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

本文介绍了解决因SSL/TLS证书不被信任而导致的基础连接关闭问题的方法。通过修改C#代码,绕过证书验证,使程序能够在服务器环境下顺利运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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


于是在服务器上用浏览器打开上面的地址,发现会弹出一个确认证书的窗口,看来是证书问题。
在网上一顿搜索,发现了一个决绝办法甚是好用,而且很简单,在请求之前添加一行代码。
C#代码 复制代码  收藏代码
  1. ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();  
ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();

其中AcceptAllCertificatePolicy需要自己定义:
C#代码 复制代码  收藏代码
  1. internal class AcceptAllCertificatePolicy : ICertificatePolicy   
  2.     {   
  3.         public AcceptAllCertificatePolicy()   
  4.         {   
  5.         }   
  6.   
  7.         public bool CheckValidationResult(ServicePoint sPoint,   
  8.            X509Certificate cert, WebRequest wRequest, int certProb)   
  9.         {   
  10.             // Always accept   
  11.             return true;   
  12.         }   
  13.     }  
internal class AcceptAllCertificatePolicy : ICertificatePolicy
    {
        public AcceptAllCertificatePolicy()
        {
        }

        public bool CheckValidationResult(ServicePoint sPoint,
           X509Certificate cert, WebRequest wRequest, int certProb)
        {
            // Always accept
            return true;
        }
    }



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

C#代码 复制代码  收藏代码
  1. private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)   
  2.         {   
  3.             return true;   
  4.         }  
private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }


就这样了,一个委托搞定!
 
 

转载于:https://www.cnblogs.com/shikyoh/archive/2013/01/14/2860154.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值