2017-01-16 17 views
2

Я использую ASP.Net Core, и у меня есть 2 проекта.Не удалось аутентифицировать соединение HTTPS при попытке GET из WebApi

применение применение

Если я попытка один из конечных точек с помощью WebAPI Почтальон я не имею никаких проблем и/API/значения

  1. ASP.Net MVC Ядро
  2. ASP.Net Ядро WebAPI возвращается, как и ожидалось (стандартный тест конечной точки)

    Однако, если я пытаться ту же операцию с помощью приложения MVC я получаю очень разочаровывает ошибка:

    HttpsConnectionFilter[1] 
    Failed to authenticate HTTPS connection 
    

    Я использую Kestrel для ядра Asp.Net.

    У меня есть самоподписывающийся 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"); 
    

    моей установка Kestrel, как это в моем 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 Failed to authenticate HTTPS connection. System.IO.IOException: Authentication failed because the remote party has closed the transport stream. at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest asyncRequest) --- End of stack trace from previous location where exception was thrown --- 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) at System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endFunction, Action 1 endAction, Task 1 promise, Boolean requiresSynchronization) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilter.d__6.MoveNext()

ответ

1

У меня была такая же проблема. После многих часов проверки всего возможного и даже невозможного материала мне удалось отследить его до ошибочно сгенерированного SSL-сертификата.

Я создавал шахту в соответствии с данным руководством: How to: Create Your Own Test Certificate.

Сертификат генерируется с помощью этой команды:

makecert -sv yourprivatekeyfile.pvk -n "cert name" yourcertfile.cer -r 

где, если -r опущен, то возникает ошибка описана.

Тогда pfx должен быть сгенерирован в соответствии с руководством. Если вы используете только cer, Kestrel не запустится успешно.

Я решил это, создав новый сертификат SSL.

+0

Я рад, что у вас это работает. Я попробую сегодня вечером и надеюсь поделиться своим успехом :) – pieperu