【发布时间】:2021-11-25 16:54:29
【问题描述】:
我需要连接到一个端点并通过验证的认证(在他们的一端)。 Following this 给了我这个代码:
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"));
这会返回以下错误:
System.Net.Http.HttpRequestException:无法建立 SSL 连接 成立,见内部异常。 ---> System.Security.Authentication.AuthenticationException:根据验证程序,远程证书无效。
在 System.Net.Security.SslStream.StartSendAuthResetSignal(协议令牌 消息,AsyncProtocolRequest asyncRequest,ExceptionDispatchInfo 例外)在 System.Net.Security.SslStream.CheckCompletionBeforeNextReceive(协议令牌 消息,AsyncProtocolRequest asyncRequest)在 System.Net.Security.SslStream.StartSendBlob(字节 [] 传入,Int32 计数,AsyncProtocolRequest asyncRequest)在 System.Net.Security.SslStream.ProcessReceivedBlob(字节 [] 缓冲区,Int32 计数,AsyncProtocolRequest asyncRequest)在 System.Net.Security.SslStream.StartReadFrame(字节 [] 缓冲区,Int32 readBytes,AsyncProtocolRequest asyncRequest)在 System.Net.Security.SslStream.PartialFrameCallback(AsyncProtocolRequest 异步请求)
处理这个问题的正确方法是什么?
注意:实际应用将使用 IHttpClientFactory,但目前正在创建 HttpClient 进行测试。
编辑:抱歉忘了说,这个带有这个证书的端点在 Postman 中工作
【问题讨论】:
-
这与证书验证无关。该错误抱怨 服务器证书无效。也许它已经过期或被撤销。根据定义,自签名证书是无效的,因为它们不是由受信任的机构签署的。是这样吗?
-
在不影响安全性的情况下使用自签名证书就是信任它。 .NET Core SDK 会将 .NET Core 项目使用的自签名证书添加到本地计算机的受信任证书中。在其他机器上你可以用浏览器导航到API URL,点击地址栏左侧出现的警告并信任证书
-
不要禁用证书验证。这相当于禁用 HTTPS。 HTTPS 不用于加密连接,它用于确保没有其他服务器进入客户端和服务器的“中间”。它通过确保远程服务器是其证书所说的那样来做到这一点。显然,证书必须是有效的——这意味着它是由受信任的来源签署的。未经验证,有人可能会向您的网络添加恶意代理,伪装成远程服务器,拦截您的呼叫并将其发送到远程服务器
-
@PanagiotisKanavos 这是信任根权限的问题。如果你把它作为答案,我会标记它
标签: c# .net-core dotnet-httpclient