連線 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
留言
張貼留言