我有以下情况:我使用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绕过异常,但是由于我需要安全且受信任的连接,所以这只是测试的解决方案。
有什么想法吗?非常感激! 祝大家玩得开心!
答案 0 :(得分:0)
谢谢你,巴顿(Bartonjs)
已解决-发现我做错了:证书及其链条都很好,我的错误是,我仍然订阅了 ServicePointManager.ServerCertificateValidationCallback(...),目前我在那返回 false ,因为我认为ServerCertificateValidationCallback仅在证书验证失败时才被调用,但实际上该方法旨在进行自己的验证,因此,它总是被调用。
谢谢你把我指向正确的方向-这是正确的靶心...