zoukankan      html  css  js  c++  java
  • 转转:解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系。"

    今天写程序的时候调用到一个第三方的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;
            }
    


    就这样了,一个委托搞定!
     
     
  • 相关阅读:
    JMeter 分布式调度压测部署
    jmeter 命令行运行与生成报告
    Apache启动报错:Invalid command 'AuthType', perhaps misspelled or defined by a module not included in it
    【TestNG】TestNG使用教程详解
    这才是Tomcat内存配置的正确姿势
    Tomcat GC参数详解
    MANIFEST.MF文件详解
    CMD命令打包文件夹成jar
    常用MIME类型
    表单序列化
  • 原文地址:https://www.cnblogs.com/shikyoh/p/2860154.html
Copyright © 2011-2022 走看看