連線 HTTPS 網站發生驗證失敗導致基礎連接已關閉

 今天在維護開發新功能發現了 “ERROR=System.Net.WebException: 基礎連接已關閉: 傳送時發生未預期的錯誤。 ---> System.IO.IOException: 驗證失敗,因為遠端群體已經關閉傳輸資料流。”的問題

TLS 1.0 停用的問題,網站調整系統停用了較不安全的 TLS 1.0,.NET 客戶端使用 WebClient、WCF 以 HTTPS 連線遠端主機,也會涉及 TLS 1.0/1.1/1.2 版本議題,不同版本 .NET 的處理方式不同:

.NET 4.6 內建支援且預設使用 TLS 1.2

.NET 4.5 內建支援,但需透過 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 設為預設協定

.NET 4 本身不支援,但安裝 .NET 4.5 後即可使用 TLS 1.2,指定 TLS 1.2 的寫法為 ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

這裡維護的網站是舊的.net 4.0,因此採用以下寫法:

ServicePointManager.SecurityProtocol =  

    SecurityProtocolType.Tls | 

    (SecurityProtocolType)768 | 

    (SecurityProtocolType)3072;


如此一來,在使用web服務就不會碰到ssl的問題


參考資料:

https://blog.darkthread.net/blog/webclient-and-tls12/

https://www.796t.com/post/bnpwdWM=.html

留言

熱門文章