【发布时间】:2018-10-19 09:01:02
【问题描述】:
我有以下情况:我使用 System.Net.Http.HttpClient (.Net Fx 4.7.1) 对象访问使用 SSL/TLS 的 URL。服务器的证书应该是受信任的,因为它是由公司的 PKI 基础设施签名的,并且我的同事已经更新了客户端计算机的证书存储以信任它。
但是,如果我使用浏览器 (IE/Chrome) 打开 URL,则连接是可信的,当我使用 HttpClient 对象访问相同的 URL 时,我会收到以下错误链:
AggregateException:发生一个或多个错误。 HttpRequestException:发送请求时发生错误。 WebException:基础连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。 AuthenticationException: 根据验证程序,远程证书无效。
看来,浏览器(Internet Explorer/Chrome)确实有另一个“验证程序”作为 HttpClient 对象。
如果对https://google.com 进行测试,一切正常。
我是否需要告诉 HttpClient 对象它需要处理存储在计算机帐户中的受信任权限? 另一方面,我没有找到任何属性。
我知道如何使用 ServerCertificateVALidateionCallback 绕过异常,但由于我需要安全且受信任的连接,因此这只是用于测试的解决方案。
有什么想法吗?非常感谢! 祝大家玩得开心!
【问题讨论】:
-
如果您创建验证回调,您可以检查 SslPolicyFlags 和 X509Chain 对象以找出失败的原因。但是如果 IE 说它很好,那么 .NET 应该说它很好(除非服务器是多宿主的并且使用 SNI 选择证书,因为可能 .NET 还没有设置该选项)
标签: .net ssl https ssl-certificate