C# 解決“請求被中止: 未能創建 SSL/TLS 安全通道”的問題


最近在開發項目的時候,使用爬蟲抓取網絡數據的時候,當請求Web數據時,碰到了“請求被中止: 未能創建 SSL/TLS 安全通道”的問題,嘗試過很多網上的方法,例如添加證書等都沒有用。最后在GitHub上面找到了解決方案,地址:https://github.com/paypal/TLS-update/blob/master/net/TlsCheck 特意記錄下來,希望對碰到類似的問題的網友能夠有所幫助。其實只要在創建請求地址的前面加了這句代碼就可以了,如圖所示:

  代碼段:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //加上這一句

 

 

程序會間歇性訪問某個https接口,一直用的好好的,今天突然報錯了,異常就發生在訪問接口的地方,曰“請求被中止,未能創建 SSL/TLS 安全通道。”,另外有台電腦也有跑該程序,也是同樣的報錯,看來是接口方改動過什么了。

搜索一番,原因應該是,接口方變更了安全協議,而客戶端並未啟用該協議。解決辦法自然就是:讓客戶端啟用該協議。具體就是在發起網絡請求之前確保ServicePointManager.SecurityProtocol中含有服務端所用的安全協議,如果不知道或希望客戶端健壯一點,當然最簡單的方式就是把所有可用的協議都啟用,隨你服務端將來怎么換。代碼如下:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12;
但如果客戶端是基於.net framework 4.0,SecurityProtocolType枚舉中並沒有Tls11和Tls12,這就需要直接填值:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls
| (SecurityProtocolType)0x300 //Tls11
| (SecurityProtocolType)0xC00; //Tls12

 


免責聲明!

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



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