前言
最近因為 Server 設定停用 SSL , 改走 TLS 1.2。
所以使用 IIS Crypto2.0 來設定,設定之後,程式卻發生 「System.Net.WebException: 要求已經中止: 無法建立 SSL/TLS 的安全通道」的錯誤。
參考網路上的修改後,還是程式還是一樣會噴錯。 到底是怎麼一回事呢?
研究
如果透過 Chrome 去連目標的 WebService ,則可以正常顯示。
用 Powershell 去走 443 ,也是 ok 的,如下,
1 | New-Object System.Net.Sockets.TcpClient("webservice url", 443) |
但如果是透過 IE 去連的話,則會出現「無法顯示此網頁 開啟[進階]設定中的 TLS 1.0、TLS 1.1與TLS 1.2,然後再嘗試…」的錯誤,如下,
而在 Event Log 中,也會有 Schannel 的錯誤訊息(TLS通訊協定定義的嚴重警示代碼為40。),如下,
可是 ie 明明就有勾 TLS 1.0、TLS 1.1與TLS 1.2的選項呀。
看起來似乎 ie 不通的話,我們的程式就不通。
跟大伙討論後,覺得有可能是設定的 Ciphers 目標電腦不 Support 。
解決
其中某台電腦是可以正常連到那台 HTTPS 的 Web Services 。
所以就開啟 IIS Crypto 2.0 工具來比較,看是那裡設定不一致。
比較後發現,可以的那台電腦有勾選 AES 及 SHA 256 ,而我們的電腦沒有勾。
將它勾起來重開機後,再試就可以正常連到它了。
結論
如果參考網路上「無法建立 SSL/TLS 的安全通道」的解法還是無法解決您的問題。
您可以試著使用 ie 連看看,或是看某台電腦是否 ok,去比較一下它們的 IIS Crypto 中的設定是否相同哦!
非常感謝 JN, Hardy, Bobby, Pally 的分享。