Ошибка при попытке отправить любой запрос по URL-адресу префикса https://* - PullRequest
0 голосов
/ 27 мая 2019

Основные ошибки, которые показаны ниже, когда я пытаюсь получить ответ для моего HttpWebRequest. Используя ASP.NET Core 2.2, попробовал это и с 2.1.

 - Win32Exception: An unknown error occurred while processing the
   certificate
 - AuthenticationException: Authentication failed, see inner exception. 
   System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken
   message, AsyncProtocolRequest asyncRequest, ExceptionDispatchInfo
   exception)
 - HttpRequestException: The SSL connection could not be established, see 
   inner exception.
 - WebException: The SSL connection could not be established, see inner 
   exception.

URL-адрес HTTPS, на который я пытаюсь попасть, принадлежит третьей стороне, от которой мы получили требуемый сертификат после создания запроса на подписанный сертификат в соответствии с запросом. После успешного получения сертификата мы попытались перейти по указанному URL, связывая сертификат, предоставленный вручную; а. сохраняя сертификат в том же каталоге и импортируя его б. импортируя его сначала в хранилище сертификатов и читая оттуда

Сертификат читается правильно, что я убедился в режиме отладки. Это даже прилагается с просьбой; я тоже в этом уверен.

Есть несколько других опций, которые я пробовал; все они включают отправку запроса тем или иным способом. Точнее я попробовал только с WebRequest, (в примере кода) HttpWebRequest, HttpClient и т. Д.

        string host = "https://*********************";            
        string cert = @"D:\*******.pfx";
        string passKey = @"************";

        X509Certificate2Collection certificates = new 
        X509Certificate2Collection();
        certificates.Import(cert, passKey, 
        X509KeyStorageFlags.MachineKeySet | 
        X509KeyStorageFlags.PersistKeySet);

        ServicePointManager.ServerCertificateValidationCallback = (a, b, 
        c, d) => true;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
        request.Headers.Add("X-API-ApplicationId", "************");
        request.Headers.Add("X-API-Version", "************");
        request.AllowAutoRedirect = true;
        request.ClientCertificates = certificates;
        request.Method = "POST";


        WebResponse response = request.GetResponse();

        Stream stream = response.GetResponseStream();
        using (StreamReader reader = new StreamReader(stream))
        {
            string line = reader.ReadLine();
            while (line != null)
            {
                Console.WriteLine(line);
                line = reader.ReadLine();
            }
        }
        stream.Close();

AuthenticationException: Authentication failed, see inner exception.
System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, ExceptionDispatchInfo exception)
System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslState.StartSendBlob(byte[] incoming, int count, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslState.ProcessReceivedBlob(byte[] buffer, int count, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslState.StartReadFrame(byte[] buffer, int readBytes, AsyncProtocolRequest asyncRequest)
System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest asyncRequest)
System.Net.Security.SslState.ThrowIfExceptional()
System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)
System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result)
System.Net.Security.SslStream.EndAuthenticateAsClient(IAsyncResult asyncResult)
System.Net.Security.SslStream+<>c.<AuthenticateAsClientAsync>b__47_1(IAsyncResult iar)
System.Threading.Tasks.TaskFactory<TResult>.FromAsyncCoreLogic(IAsyncResult iar, Func<IAsyncResult, TResult> endFunction, Action<IAsyncResult> endAction, Task<TResult> promise, bool requiresSynchronization)
System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)

HttpRequestException: The SSL connection could not be established, see inner exception.
System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask<ValueTuple<HttpConnection, HttpResponseMessage>> creationTask)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, bool doRequestAuth, CancellationToken cancellationToken)
System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task<HttpResponseMessage> sendTask, HttpRequestMessage request, CancellationTokenSource cts, bool disposeCts)
System.Net.HttpWebRequest.SendRequest()
System.Net.HttpWebRequest.GetResponse()

WebException: The SSL connection could not be established, see inner exception. Authentication failed, see inner exception.
System.Net.HttpWebRequest.GetResponse()
WebApplication1.httpsSendRequest.TryHttpsConn() in httpsSendRequest.cs
+
            WebResponse response = request.GetResponse();
WebApplication1.Controllers.ValuesController.GetTestHttps() in ValuesController.cs
+
            return await httpsSendRequest.TryHttpsConn();
lambda_method(Closure , object )
Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable+Awaiter.GetResult()
Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

Ниже приведена ошибка, которую я получаю, если пытаюсь нажать URL с помощью Google Chrome с установленным сертификатом. Этот сайт не может обеспечить безопасное соединение. ***********. Com не принял ваш сертификат входа в систему, либо он может быть не предоставлен. Попробуйте связаться с системным администратором. ERR_BAD_SSL_CLIENT_AUTH_CERT

Буду признателен за любые обходные пути при поддержании рукопожатия SSL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...