使用 HttpClient 信任自签名证书

Posted

技术标签:

【中文标题】使用 HttpClient 信任自签名证书【英文标题】:Trusting Self-Signed Certificate using HttpClient 【发布时间】:2016-06-09 09:27:56 【问题描述】:

我按照this 教程创建了一个自签名 CA 证书,然后创建了一个基于 CA 证书的自签名 SSL 证书。然后我在 IIS 中安装 SSL 证书以通过本地 IP 地址访问我的内部站点,例如10.0.0.1。我想使用HttpClient 向网站发出如下请求:

using (var httpClient = new HttpClient())

    var text = await httpClient.GetStringAsync("https://52.19.32.61:5010");

我已将我的自签名 CA 证书添加到本地计算机受信任的根证书中,但是,我仍然收到以下异常(告诉我关闭 SSL 验证的任何答案都没有帮助。):

System.Net.Http.HttpRequestException:发送时出错 请求。 System.Net.WebException:底层连接是 关闭:无法为 SSL/TLS 安全建立信任关系 渠道。 System.Security.Authentication.AuthenticationException: 根据验证程序,远程证书无效。

【问题讨论】:

你的问题类似这样:***.com/questions/2675133/… 要求忽略证书错误。 【参考方案1】:

SelfSigned CA 必须位于服务器上的 LocalMachine\Root 存储中以及连接到服务器的任何客户端上。

SSL 证书应该具有客户端用来连接它的确切 DNS 名称。它可以在主题备用名称 (SAN) 扩展的证书中指定多个 DNS 名称。在您的情况下,您使用的是 IP 地址,所以要么

您将 IP 地址放在 SAN 中或 您在颁发 SSL 证书时使用您指定的 DNS 名称将 IP 地址放在 hosts 文件中,并在 HttpClient 中使用此 DNS 名称

您可以考虑使用XCA 来颁发您的证书。它有很好的 GUI 并且建立在 OpenSSL 之上。它具有用于 CA 和 SSL 服务器的预定义模板。更多信息请参阅文档here。

【讨论】:

以上是关于使用 HttpClient 信任自签名证书的主要内容,如果未能解决你的问题,请参考以下文章

HttpClient 使用自签名证书调用 HTTPS WebApi

自签名SSL证书是啥?有用吗

自签名SSL证书是啥?有用吗?

在 ktor httpClient(js) JS 引擎中忽略自签名证书的配置

信任来自 IIS 的自签名证书

HttpClient 拒绝发送自签名客户端证书