我遇到以下情况:我使用 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 绕过异常,但由于我需要安全且受信任的连接,因此这只是一个测试解决方案。
有什么想法吗?非常感谢! 伙计们,玩得开心!
最佳答案
谢谢你,巴顿
已解决 - 找出我做错了什么:证书及其链都很好,我的错误是,我仍然订阅了 ServicePointManager.ServerCertificateValidationCallback(...) 并且我目前在那里返回 false,因为我认为,只有在证书验证失败时才会调用 ServerCertificateValidationCallback,但实际上该方法旨在执行自己的验证,因此,当然,它总是被调用。
谢谢你给我指明了正确的方向 - 这是一个正确的靶心......
关于.NET:HttpClient 对象似乎忽略了服务器证书验证的证书颁发机构:我错过了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52889076/