「請求被中止未能建立SSL/TLS 安全通道」 的原因及解決辦法
描述:請求被中止: 未能建立SSL/TLS 安全通道。 Could not create SSL/TLS secure channel。
產生平台:Windows Server 2012,Windows 7 Service Pack 1(SP1)與Windows Server 2008 R2 SP1
解決辦法一:
在HttpWebRequest前設定程式碼
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
解決辦法二
- 上面的方法沒有效果,則為系統層面的問題了,對照你現在使用的系統更新系統補丁
更新以將TLS 1.1和TLS 1.2啟用為Windows中WinHTTP中的預設安全性協議,此更新提供對Windows Server 2012,Windows 7 Service Pack 1(SP1)和Windows Server 2008 R2 SP1中的傳輸層安全性(TLS) 1.1和TLS 1.2的支持,參考官方文檔https://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi
更新補丁
設定預設值
- 在SChannel元件層級的Windows 7上啟用TLS 1.1和1.2 (採用以下2.1或2.2一種更新)
2.1、微軟安裝更新登錄:http://download.microsoft.com/download/0/6/5/0658B1A7-6D2E-474F-BC2C-D69E5B9E9A68/MicrosoftEasyFix51044.msi
2.2、手動更新註冊表,複製下面註冊表代碼匯入至註冊表。新建txt,將後綴txt改為reg(登錄項目),匯入(匯入之前做備份)
1 | [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] |
驗證系統
- 驗證系統是否支援TLS1.2、TLS1.3
PowerShell開啟:
Net.ServicePointManager::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3 -bor [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
解決辦法三
- 前面兩種辦法都不行,只能用終極辦法,升級系統到windows 10。
其他參考內容
https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support/
存在解決方案,但是它們取決於框架版本:
.NET 4.6及更高版本。您無需執行任何其他工作即可支援TLS 1.2,預設支援該功能。
.NET 4.5。支援TLS 1.2,但它不是預設協定。您需要選擇使用它。以下程式碼將TLS 1.2設定為預設值,請確保在連接到安全資源之前執行它:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
.NET 4.0。不支援TLS 1.2,但如果系統上安裝了.NET 4.5(或更高版本),那麼即使您的應用程式框架不支援TLS 1.2,您仍然可以選擇使用TLS 1.2。唯一的問題是.NET 4.0中的SecurityProtocolType沒有TLS1.2的條目,因此我們必須使用此枚舉值的數字表示形式:
ServicePointManager.SecurityProtocol =(SecurityProtocolType)3072;
.NET 3.5或更低版本。不支援TLS 1.2(*),且沒有解決方法。將您的應用程式升級到該框架的最新版本。
PS對於場景3,還有一個登錄程式碼駭客,預設會強制4.5使用TLS 1.2,而無需以程式方式強制執行。
PPS正如Microsoft的Christian Pop在下面提到的那樣,.NET 3.5有一個可用的最新補丁程序,它啟用了TLS1.2支援。
請參閱:
KB3154518 – 可靠性總結 HR-1605 – NDP 2.0 SP2 – Win7 SP1/Win 2008 R2 SP1
KB3154519 – 可靠性總結 HR-1605 – NDP 2.0 SP2 – Win8 RTM/Win 2012 RTM
KB3154520 – 可靠性總表 HR-1605 – NDP 2.0 SP2 – Win8.1RTM/Win 2012 R2 RTM
KB3156421 -1605 HotFix Rollup through Windows Update for Windows 10.