ASP.Net Coreを使用していて、2つのプロジェクトがあります。
Postmanを使用してWebApiエンドポイントの1つを試行しても問題は発生せず、/ api/valuesは期待どおりに戻ります(標準テストエンドポイント)
ただし、MVCアプリケーションを使用して同じ操作を試みると、非常にイライラするエラーが発生します。
HttpsConnectionFilter[1]
Failed to authenticate HTTPS connection
Asp.NetコアのKestrelを使用してホストしています。
私はpowershellを使用して作成した自己署名PFX証明書を持っていますが、これは例外をスローするコードです:
var handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.SslProtocols = SslProtocols.Tls12;
handler.ClientCertificates.Add(new X509Certificate2("localcert.pfx", "xxx"));
var client = new HttpClient(handler);
var content = await client.GetStringAsync("https://localhost:44301/api/values");
そして、これを実行しようとすると、同じエラーが発生します。
var client = new HttpClient();
var content = await client.GetStringAsync("https://localhost:44301/api/values");
私のケストレルのセットアップは私のProgram.csのようです
var cert = new X509Certificate2("localcert.pfx", "xxx");
var Host = new WebHostBuilder()
.UseKestrel(cfg => cfg.UseHttps(cert))
.UseUrls("https://localhost:44300")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
Host.Run();
上記のHttpClientの証明書を再度定義したことは知っていますが、必死です。
なぜこれが起こっているのか、そして私がそれを修正する方法、または私を狂わせているのでデバッグする方法について、誰かが洞察を提供できますか?私はKestrelHttpServerコードを調べてステップ実行し、洞察が得られるかどうかを確認しています。
これは、Kestrelコンソールウィンドウから発生する完全なエラーです
info:HttpsConnectionFilter 1 HTTPS接続の認証に失敗しました。 System.IO.IOException:リモートパーティがトランスポートストリームを閉じたため、認証に失敗しました。 System.Net.Security.SslState.StartReadFrame(Byte [] buffer、Int32 readBytes、AsyncProtocolRequest asyncRequest)at System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest asyncRequest)---例外がスローされた前の場所からのスタックトレースの終わり--- System.Net.Security.System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult結果)のSystem.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)のSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()で。 SslStream.EndAuthenticateAsServer(IAsyncResult asyncResult)at System.Threading.Tasks.TaskFactory
1.FromAsyncCoreLogic(IAsyncResult iar, Func
2 endFunction、Action1 endAction, Task
1 promise、Boolean requireSynchronization)---例外がスローされた前の場所からのスタックトレースの終わり--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilter.d__6.MoveNext()で
私も同じ問題を抱えていました。可能なすべてのこと、そして不可能なことさえも何時間もチェックした後、私はそれをなんとかして誤って生成されたSSL証明書までたどることができました。
私はこのマニュアルに従って鉱山を作成していました: 方法:独自のテスト証明書を作成する 。
証明書は次のコマンドを使用して生成されます。
makecert -sv yourprivatekeyfile.pvk -n "cert name" yourcertfile.cer -r
ここで-r
は省略され、記載されているエラーが発生します。
次に、pfx
をマニュアルに従って生成する必要があります。 cer
だけを使用すると、Kestrel
は正常に起動しません。
新しいSSL証明書を生成して解決しました。