Основные ошибки, которые показаны ниже, когда я пытаюсь получить ответ для моего 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.