C# HttpClient 是不是忽略 SSL 证书错误?

Posted

技术标签:

【中文标题】C# HttpClient 是不是忽略 SSL 证书错误?【英文标题】:Does C# HttpClient ignore SSL certificate errors?C# HttpClient 是否忽略 SSL 证书错误? 【发布时间】:2018-04-14 04:30:27 【问题描述】:

我们有一个托管在 https 上的内部 Web 服务,并具有授权的根 CA。当我尝试从 Java Apache HttpClient 调用该服务时,它给了我证书错误“PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径”。

使用 SSL 工具,我发现 Web 服务正在发送没有中间证书的证书链,并且它只包含服务器证书。所以 Java 证书错误是有道理的,因为 Java 信任库中只有根 CA,它无法验证证书链,因此出现了错误。

但另一方面,我可以使用 C# HttpClient (.Net 4.6.1) 调用相同的 Web 服务,而不会出现任何问题。

C# HttpClient 是否忽略了 Web 服务的证书问题,还是正在下载丢失的证书?任何人都可以对此有所了解吗?

【问题讨论】:

不,它不会忽略它们....除非您将其配置为忽略它们。使用它来计算实际发生的事情:***.com/questions/5977817/… C# 使用 Windows 证书存储,相关证书是否可能在该证书存储中? 【参考方案1】:

通过 Stephen 和 Mark 提供的非常有用的 cmets 解决了这个问题。我在 app.config 中设置了跟踪,发现 C# HttpClient 可以找到中间证书。

“System.Net 信息:0 : [23580] SecureChannel#41622463 - 远程证书已被用户验证为有效。”

但我已经确认 Windows 证书存储中不存在中间证书,这导致了这种混乱。我再次在那里检查,结果证明证书在我的用户帐户而不是计算机帐户下。它一定是在设置我们公司的桌面时安装在那里的。

现在我不太确定这两个证书存储在 Windows 中的用法有什么区别,但至少我了解 C# 客户端是如何找到证书的。

【讨论】:

以上是关于C# HttpClient 是不是忽略 SSL 证书错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何忽略 Apache HttpComponents HttpClient 5.1 中的 SSL 证书错误

在 c# (.net core) 中使用 httpclient 时无法建立 SSL 连接,但在 Postman 和 Browser 中有效

使用 HttpClient 允许不受信任的 SSL 证书

允许使用HttpClient的不受信任的SSL证书

忽略 Xamarin.Forms (PCL) 中的 SSL 证书错误

c# https请求忽略证书验证_各种编程语言忽略http的SSL证书认证