我写了一个C#程序,它使用 HttpWebRequest
连接到HTTPS站点 . GetResponse()
方法抛出异常:
SystemError:基础连接已关闭:无法为SSL / TLS安全通道 Build 信任关系 .
我可以使用 curl.exe --cacert CAFile.pem
连接到同一个网站 . 我希望能够使用C#程序中相同的可信CA证书 .
如何让 HttpWebRequest
使用此CA证书文件(或包含从中解析的证书的 X509CertificateCollection
)?
2 回答
尝试设置ServerCertificateValidationCallback以使用它:
我没有机会测试这个,所以如果你遇到任何错误请告诉我,如果需要我会修改答案 .
我最终实现的解决方案是编写一个使用自定义验证逻辑实现ICertificatePolicy的类:
(为简洁起见,省略了错误检查 . )
_defaultPolicy
可以设置为ServicePointManager.CertificatePolicy,以允许除自定义证书外还使用默认证书存储 ._certs
包含额外的证书 . 它是通过解析PEM文件并调用_certs.Add(new X509Certificate(Convert.FromBase64String(base64cert)));
生成的CertificatePolicy
已被ServerCertificateValidationCallback
淘汰,但我需要支持旧版本的.NET .