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

时间:2018-04-14 04:30:27

标签: java c# ssl apache-httpclient-4.x dotnet-httpclient

我们在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服务的证书问题,还是下载了缺少的证书?任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

用斯蒂芬和马克的非常有用的评论来解决这个问题。我在app.config中设置了跟踪,在那里我发现C#HttpClient可以找到中间证书。

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

但我已经验证过Windows证书库中没有中间证书,这导致了这种混乱。我再次检查了那里,证明证书是在我的用户帐户下,而不是计算机帐户。在我们的公司桌面设置完成后,它必须已安装在那里。

现在我不确定Windows中这两个证书库的使用之间的区别,但至少我了解C#客户端如何找到证书。