HttpClient 通过认证验证连接
HttpClient connecting via certification validation
我需要连接到端点并通过认证以进行验证(在他们端)。 给我这个代码:
using var cert = new X509Certificate2(pathToCert);
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(cobCert);
var client = new HttpClient(handler);
var response = await client.PostAsync(url, new StringContent(json, Encoding.UTF8, "application/json"));
此returns以下错误:
System.Net.Http.HttpRequestException: The SSL connection could not be
established, see inner exception. --->
System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
at System.Net.Security.SslStream.StartSendAuthResetSignal(ProtocolToken
message, AsyncProtocolRequest asyncRequest, ExceptionDispatchInfo
exception) at
System.Net.Security.SslStream.CheckCompletionBeforeNextReceive(ProtocolToken
message, AsyncProtocolRequest asyncRequest) at
System.Net.Security.SslStream.StartSendBlob(Byte[] incoming, Int32
count, AsyncProtocolRequest asyncRequest) at
System.Net.Security.SslStream.ProcessReceivedBlob(Byte[] buffer, Int32
count, AsyncProtocolRequest asyncRequest) at
System.Net.Security.SslStream.StartReadFrame(Byte[] buffer, Int32
readBytes, AsyncProtocolRequest asyncRequest) at
System.Net.Security.SslStream.PartialFrameCallback(AsyncProtocolRequest
asyncRequest)
正确的处理方法是什么?
注意:实际应用程序将使用 IHttpClientFactory,但当前正在创建 HttpClient 进行测试。
编辑:抱歉忘了说,这个带有证书的端点在 Postman 中有效
错误提示服务器证书无效。也许它已经过期或被撤销。有时,根授权证书本身会受到损害并被吊销。这种情况很少见,但过去发生过。
也许测试服务器使用自签名证书进行开发。自签名证书根据定义是无效的,因为它们不是由受信任的机构签署的。
HTTPS 不用于加密连接,它用于确保没有其他服务器进入客户端和服务器的“中间”。它通过确保远程服务器是其证书所表明的身份来做到这一点。显然,证书需要有效——这意味着它需要由可信来源签名。未经验证,有人可以向您的网络添加恶意代理,伪装成远程服务器,拦截您的呼叫并将它们发送到远程服务器。
如果服务器服务已过期或被撤销,服务器管理员将不得不续订它。
在不损害安全性的情况下使用自签名证书就是信任它。 .NET Core SDK 会将.NET Core 项目使用的自签名证书添加到本机的可信证书中。在其他机器上,您可以使用浏览器导航到 API URL,单击地址栏左侧出现的警告并信任证书
我需要连接到端点并通过认证以进行验证(在他们端)。
using var cert = new X509Certificate2(pathToCert);
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(cobCert);
var client = new HttpClient(handler);
var response = await client.PostAsync(url, new StringContent(json, Encoding.UTF8, "application/json"));
此returns以下错误:
System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
at System.Net.Security.SslStream.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, ExceptionDispatchInfo exception) at System.Net.Security.SslStream.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslStream.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslStream.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslStream.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslStream.PartialFrameCallback(AsyncProtocolRequest asyncRequest)
正确的处理方法是什么?
注意:实际应用程序将使用 IHttpClientFactory,但当前正在创建 HttpClient 进行测试。
编辑:抱歉忘了说,这个带有证书的端点在 Postman 中有效
错误提示服务器证书无效。也许它已经过期或被撤销。有时,根授权证书本身会受到损害并被吊销。这种情况很少见,但过去发生过。
也许测试服务器使用自签名证书进行开发。自签名证书根据定义是无效的,因为它们不是由受信任的机构签署的。
HTTPS 不用于加密连接,它用于确保没有其他服务器进入客户端和服务器的“中间”。它通过确保远程服务器是其证书所表明的身份来做到这一点。显然,证书需要有效——这意味着它需要由可信来源签名。未经验证,有人可以向您的网络添加恶意代理,伪装成远程服务器,拦截您的呼叫并将它们发送到远程服务器。
如果服务器服务已过期或被撤销,服务器管理员将不得不续订它。
在不损害安全性的情况下使用自签名证书就是信任它。 .NET Core SDK 会将.NET Core 项目使用的自签名证书添加到本机的可信证书中。在其他机器上,您可以使用浏览器导航到 API URL,单击地址栏左侧出现的警告并信任证书