今天寫程序的時候調用到一個第三方的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; }
就這樣一個委託搞定!spa