解決Error"基礎連接已經關閉: 未能為SSL/TLS 安全通道建立信任關系


今天寫程序的時候調用到一個第三方的DLL文件,本機調試一切都正常,但是程序不是到服務器以后一直提示一個BUG:"基礎連接已經關閉: 未能為SSL/TLS 安全通道建立信任關系"。 
后來把DLL文件進行反編譯,發現是在獲得請求的時候出錯了。 

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

於是在服務器上用瀏覽器打開上面的地址,發現會彈出一個確認證書的窗口,看來是證書問題。 
在網上一頓搜索,發現了一個決絕辦法甚是好用,而且很簡單,在請求之前添加一行代碼。 

ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();  
internal class AcceptAllCertificatePolicy : ICertificatePolicy
    {
        public AcceptAllCertificatePolicy()
        {
        }

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

以上方法雖然解決了遇到的問題,可是在VS中會提示ServicePointManager.CertificatePolicy已經被否決。於是按照提示使用新的方法來處理。 
改造后的代碼更加簡潔和明了

ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }

就這樣一個委托搞定!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM