当前位置:   article > 正文

解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系。"_基础连接已经关闭: 未能为 ssl/tls 安全通道建立信任关系。

基础连接已经关闭: 未能为 ssl/tls 安全通道建立信任关系。
今天写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系"。 
后来把DLL文件进行反编译,发现是在获得请求的时候出错了。 

引用
WebResponse response = WebRequest.Create("https://……").GetResponse(); 

于是在服务器上用浏览器打开上面的地址,发现会弹出一个确认证书的窗口,看来是证书问题。 
在网上一顿搜索,发现了一个决绝办法甚是好用,而且很简单,在请求之前添加一行代码。 

ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();  

其中AcceptAllCertificatePolicy需要自己定义: 

  1. internal class AcceptAllCertificatePolicy : ICertificatePolicy
  2. {
  3. public AcceptAllCertificatePolicy()
  4. {
  5. }
  6. public bool CheckValidationResult(ServicePoint sPoint,
  7. X509Certificate cert, WebRequest wRequest, int certProb)
  8. {
  9. // Always accept
  10. return true;
  11. }
  12. }

以上方法虽然解决了遇到的问题,可是在VS中会提示ServicePointManager.CertificatePolicy已经被否决。由于我是一个喜欢完美的人,于是按照提示使用新的方法来处理。 
改造后的代码更加简洁和明了 

ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;

  1. private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
  2. {
  3. return true;
  4. }


  1. HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);前面加上如下一行代码:
  2. ServicePointManager.ServerCertificatidationCallback = ValidateServerCertfiate;//验证服务器证书回调自动验证


就这样了,一个委托搞定! 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/525766
推荐阅读
相关标签
  

闽ICP备14008679号