- Приложение ASP.NET Core MVC
- Приложение ASP.NET Core Web API
Однако если я попытаюсь выполнить ту же операцию с помощью приложения MVC, я получу очень неприятную ошибку:
Код: Выделить всё
HttpsConnectionFilter[1]
Failed to authenticate HTTPS connection
У меня есть самозаверяющий сертификат PFX, который я создал с помощью PowerShell, и это код, вызывающий исключение:
Код: Выделить всё
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");
Код: Выделить всё
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()
.Build();
host.Run();
Может ли кто-нибудь подсказать, почему это происходит и как я могу это исправить или даже отладить? В настоящее время я просматриваю код KestrelHttpServer, чтобы посмотреть, даст ли это некоторую информацию.
Это полная ошибка, которую я получаю в окне консоли Kestrel:
info: HttpsConnectionFilter1
Не удалось проверить подлинность HTTPS-соединения. System.IO.IOException: проверка подлинности не удалась, поскольку удаленная сторона закрыла
транспортный поток. at
System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32
readBytes, AsyncProtocolRequest asyncRequest) at
System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest
asyncRequest)
--- Конец трассировки стека из предыдущего местоположения где было создано исключение --- at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at
System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult
lazyResult) at
System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult
result) at
System.Net.Security.SslStream.EndAuthenticateAsServer(IAsyncResult
asyncResult) в
System.Threading.Tasks.TaskFactory
Код: Выделить всё
1.FromAsyncCoreLogic(IAsyncResult
iar, FuncКод: Выделить всё
1 endAction, Taskтребует синхронизации)
--- Конец трассировки стека из предыдущего места, где было создано исключение --- в
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
Task) в
Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilter.d__6.MoveNext()