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;
            }
    


    就这样了,一个委托搞定!
     
     
  • 相关阅读:
    pgfplots画二维图真的很方便,多例比较
    LaTeX技巧206:使用gather输入多行公式的技巧
    LaTeX技巧205:使用split输入多行公式技巧
    LaTeX技巧207:使用align环境输入多行公式的技巧
    LaTeX技巧24:LaTeX常用命令集锦
    CTEX
    Latex常用指令学习
    LATEX数学公式基本语法
    LaTeX使用技巧
    C 命令行参数
  • 原文地址:https://www.cnblogs.com/shikyoh/p/2860154.html
Copyright © 2011-2022 走看看