通过认证验证连接的 HttpClient

Posted

技术标签:

【中文标题】通过认证验证连接的 HttpClient【英文标题】:HttpClient connecting via certification validation 【发布时间】: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 这是信任根权限的问题。如果你把它作为答案,我会标记它 【参考方案1】:

错误提示服务器证书无效。也许它已经过期或被撤销。有时,根授权证书本身会遭到破坏和撤销。这种情况很少见,但它已经在过去发生过。

也许测试服务器使用自签名证书进行开发。根据定义,自签名证书是无效的,因为它们不是由受信任的机构签署的。

HTTPS 不用于加密连接,它用于确保没有其他服务器进入客户端和服务器的“中间”。它通过确保远程服务器是其证书所说的那样来做到这一点。显然,证书需要有效——这意味着它需要由受信任的来源签名。未经验证,有人可能会向您的网络添加恶意代理,伪装成远程服务器,拦截您的呼叫并将其发送到远程服务器。

如果服务器服务已过期或被撤销,服务器管理员将不得不更新它。

在不影响安全性的情况下使用自签名证书就是信任它。 .NET Core SDK 会将 .NET Core 项目使用的自签名证书添加到本地计算机的受信任证书中。在其他机器上,您可以使用浏览器导航到 API URL,单击地址栏左侧出现的警告并信任证书

【讨论】:

以上是关于通过认证验证连接的 HttpClient的主要内容,如果未能解决你的问题,请参考以下文章

MySQL权限和用户管理

wifi已连接需要登录网页认证是啥意思?

几种常见的技术组件介绍——统一认证/单点登录/全局序列号/连接池/数据传输

Django用户注册邮箱验证实践

PAP和CHAP认证

PAP和CHAP认证