Windows 停用 TLS 1.0 之配套作業整理
| | 24 | |
開始之前,說說 TLS。
大家朗朗上口的 SSL(Security Socket Layer),最早源於 1995 年發表的 SSL 2.0(1.0 很雷,所以從沒公開過),隨後在 1996 推出 3.0 版,IETF 於 1999 年將 SSL 標準化,因版權考量改稱為 TLS(Transport Layer Security)。就技術而言, TLS 1.0 與 SSL 3.0 很相近,而 TLS 1.0 也支援降級改用 SSL 3.0。之後 IETF 分別在 2006、2008 年再推出安全強度更高的 TLS 1.1 與 TLS 1.2。
2014 年,Google 發現 SSL 3.0 存在致命安全漏洞,而攻擊者可藉由向 TLS 發送假的錯誤提示降級至 SSL 3.0,再利用 SSL 3.0 的漏洞竊取資訊,各家瀏覽器紛紛決定禁用 SSL 3.0。因此大家常說的 SSL,其實早已經被 TLS 取代。參考來源
TLS 1.0 因 CBC 加密模式設計不良,可能遭受 BEAST 攻擊導致加密內容被解密,便落入與 SHA1 相同的命運-被業界宣判限期下架,於是,「停用 SSL 3.0 與 TLS 1.0」成為資安檢核項目之一,建議系統管理人員早日關閉。
要在 Windows 停用 TLS 1.0、啟用 TLS 1.1、TLS 1.2,只需修改 Registry 即可完成。且慢,先別急著動手,刺激的在後面… 以下是這陣子雞飛狗跳摸石頭過河後的心得整理,短短幾行卻血淚交織,價值不斐:
- 停用 TLS 1.0 後遠端桌面連不上
「用遠端桌面登入主機,設好 Registry 重開機後就再也連不進去了」這種劇情很驚險刺激吧?
Windows 7 及 Windows 2008 R2 需先安裝更新,遠端桌面程式需更新到新版才支援 TLS 1.1/1.2 連線。 - 停用 TLS 1.0 後 SQL Server 起不來
「 資料庫主機停用 TLS 1.0 並重開機,SQL Server 就起不來了」這種橋段也扣人心弦吧?
在事件檢視器可看到類似錯誤:
A fatal error occurred while creating an SSL client credential. The internal error state is 10013.
MVP Aaron Bertrand 有篇 Blog 詳細整理各版本 SQL Server 要支援 TLS 1.2 需要的最小版號,至於 SQL 詳細版本資訊的查詢方式,可參考前幾天的文章。 - SQL Server 停用 TLS 1.0 後,.NET 程式無法連上資料庫
SQL 更新並停用 TLS 1.0 後,原本使用 SqlConnection 連線 SQL 的 .NET 程式可能出現以下錯誤訊息:
使用 Integrated Security=SSPI 以 AD 登入 - A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)
使用 SQL 帳號登入 - A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
是的,ADO.NET 也得更新,請參考微軟這篇 KB,依據使用的 .NET 版本安裝對應的更新。除了 .NET 4.6,.NET 2.0/3.5/4.0 到 4.5.2 都需更新才能以 TLS 1.2 連上 SQL。 - 連線 TLS 1.2 HTTPS
.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/4.5 程式,也可透過 Registry 修改預設安全協定)
.NET 3.5 需安裝 Hotfix 才能支援
KB3154518 – Reliability Rollup HR-1605 – NDP 2.0 SP2 – Win7 SP1/Win 2008 R2 SP1
KB3154519 – Reliability Rollup HR-1605 – NDP 2.0 SP2 – Win8 RTM/Win 2012 RTM
KB3154520 – Reliability Rollup HR-1605 – NDP 2.0 SP2 – Win8.1RTM/Win 2012 R2 RTM
KB3156421 -1605 HotFix Rollup through Windows Update for Windows 10.
事後來看遇上這些狀況合情合理,當初處理過程可不是這麼一回事:
遠端登入改完 Registry 重開機,之後遠端桌面連不進去、連進去發現 SQL Server 起不來、把 SQL 救起來後發現連 SQL 的 .NET 程式壞光光… 不知所以然胡搞瞎試搞完一回合,學新知還兼練心臟,好激刺呀~
以上是目前我蒐集到停用 TLS 1.0 所需的配套更新,未來如有發現再陸續補充更新。
2019-08-30 更新 ODBC 與 OLEDB 之 SQL Server TLS 1.2 支援問題
Comments
# by eric
通常轉換TLS1.2還有廢除舊的Cipher suite, 看registry實在有難度, 這個時候可以使用工具 https://www.nartac.com/Products/IISCrypto 另外想要檢查網站的設定是不是跟外面的標準, 可以使用Scan https://www.ssllabs.com/ssltest/
# by Jeffrey
to eric, 感謝分享,已筆記。
# by 路人
在下最近也踩到地雷,野人獻曝幫忙貢獻一點心得。 1. IBM Websphere (WAS)至少要升級到8.5.5,且要增加custom properties (https://www.ibm.com/support/knowledgecenter/en/SS2L6K_5.0.0/com.ibm.rational.relm.install.doc/topics/t_enable_tls1.2_was.html) 2. 使用ODBC的client-server程式,用戶端ODBC要安裝ODBC Driver 11或以上,或者使用SQL Native Client 11以上(似乎還要patch過,我手邊的電腦測試失敗) 3. 使用ADO連線的程式,Provider SQLOLEDB 目前不支援TLS 1.2,據說微軟會在2018 Q1重新支援 (過去曾放話說不再支援) 4. Crystal Report要升級到 2010 (版本13)以上,且如果直接從RPT裡連結資料庫的話,Connection要指向一個已經可以順利用TLS 1.2連到資料庫的ODBC。
# by Jeffrey
to 路人,感謝分享寶貴心得。
# by 接手老專案的菜鳥
黑大: 我有個系統是.NET 2.0開發的,如果安裝了.NET 4.5/或者4.6以及ADO.NET,可以在不改程式的情況強制使用TLS1.2執行嗎? 因為系統短期內要改寫有難度。
# by Jeffrey
to 接手老專案的菜鳥, https://support.microsoft.com/en-us/help/3154520/support-for-tls-system-default-versions-included-in-the-net-framework 依照文件,安裝必要的 Hotfix 並設定 Registry 修改預設使用 TLS 1.2,應不用改程式。但如果你一定要用舊版 TLS 1.0/1.1 連線的需求, 則需改程式透過 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls11 / Tls10; 強制改用舊版。
# by 接手老專案的菜鳥
黑大,謝謝您!
# by 接手老專案的菜鳥
黑大: 我遇到某臺SEVER 2008R2 SP3+SQL 2008R2SP3 關掉 TLS1.0以後就連不上去了,但是遠端跟程式本身可以正常跑,SQL出現以下訊息: 建立連接至SQL Server時,發生相關或執行體特定的錯誤。找不到或無法存取伺服器。確認執行個名稱是否正確,以及SQL Server是否設定為允許遠端連線。(provider:具名的管線提供者,error:40 - 無法開啟至SQL Server 的連接)(Microsoft SQL Server,錯誤:2)
# by JOE
我有一台VM機放在IDC機房,Windows 2012 R2 st.SQL 2014 st. .NET FW4 有更新windows update再更新reg檔重新開機後遠端桌面無法登入 因為是VM機都是用遠桌面無法去開機 請問各位大大有甚麼方法可以解決遠端登入問題嗎? 感謝
# by Jeffrey
to JOE,Server停用TLS1.0後,遠端桌面連線(Remote Desktop Connection)客戶端程式要升級到新版。
# by Joe
To Jeffrey 感謝指導
# by Andy
黑大 ~ 請問這個問題有遇過嗎? https://social.msdn.microsoft.com/Forums/zh-TW/03f99cbc-d5d0-4f9f-b701-a9b4e9f0a9a5/web-service-38617215212497735657-2183938988?forum=236
# by Jeffrey
to Andy, HTTP 500是Server端程式錯誤,你可以參考以下方法設法看到HTTP 500的詳細錯誤訊息。 catch (WebException ex) { using (var sr=new StreamReader(ex.Response.GetResponseStream())) { Console.Write(sr.ReadToEnd()); } }
# by Rose
請問黑大 ~ 我有一台SQL 2005 做了linked server 連到SQL 2008,但因資安關係把2008的TLS1.0關閉後,2005就連結不上了。出現以下訊息,請教您可有解決之法? --------------------------------- 「已建立連結的伺服器,但連接測試失敗。您要保留連結的伺服器嗎?」 其他資訊: 執行 Transact-SQL 陳述式或批次時發生例外狀況。 (Microsoft.SqlServer.ConnectionInfo) TCP 提供者: 遠端主機已強制關閉一個現存的連線。 連結伺服器 "XXX.XXX.XX.XX" 的 OLE DB 提供者 "SQLNCLI" 傳回訊息 "用戶端無法建立連線"。 (Microsoft SQL Server, 錯誤: 10054)
# by Jeffrey
to Rose, 聽起來像是 SQL2005 這台沒有更新,建議朝此方向檢查。
# by 路人2
謝謝分享~
# by 路人三
停用 TLS 1.0 後遠端桌面連不上 請問版大~您下面提供的"更新"路徑~連官網都不提供patch,有無方法可以解決無法RDP困擾呢
# by 路人三
停用 TLS 1.0 後遠端桌面連不上 請問版大~您下面提供的"更新"路徑~連官網都不提供patch,有無方法可以解決無法RDP困擾呢
# by Jeffrey
to 路人三,KB文件的下載連結好像壞了,但文件有提到 Method 1: Windows Update,應可透過選擇性項目更新。 你的 OS 版本是Windows 7? 提醒 Win7 明年1月14日就會完全中止技術支援, https://support.microsoft.com/zh-tw/help/4057281/windows-7-support-will-end-on-january-14-2020 之後因不再提供安全更新,使用風險大增,建議升級作業系統。
# by 路人三
to jeffrey 目前主機是Win7 沒錯,但使用了手邊的win 10 主機也是同樣狀況發生 不曉得您是否有同樣的經驗,謝謝
# by Jeffrey
to 路人三,Win10 應該內建支援 TLS 1.2才對: Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, and later versions of Windows natively support TLS 1.2 for client-server communications over WinHTTP. 參考:https://docs.microsoft.com/zh-tw/configmgr/core/plan-design/security/enable-tls-1-2
# by REX
SQL Native Client 11需要使用QFE的版本才支援TLS 1.2,舊的AP用的版本可?s能是不支援的11.0.2100.60(在2012年發佈的)那個版本。 下載Microsoft® SQL Server® 2012 Native Client - QFE (支援TLS .12) https://www.microsoft.com/en-us/download/details.aspx?id=50402 Version: 11.0.7001.0 Date Published: 1/19/2018 KB3135244 - TLS 1.2 support for Microsoft SQL Server https://support.microsoft.com/en-us/topic/kb3135244-tls-1-2-support-for-microsoft-sql-server-e4472ef8-90a9-13c1-e4d8-44aad198cdbe
# by 小小魚
Window Server 2016 關閉 TLS1.1 和 1.0 後 會發生IIS worker CPU 過高的問題 請問要如何解決 或是 可以從哪個方向尋找 謝謝
# by Jeffrey
to 小小魚,依直覺 TLS1.2 不該造成 IIS Worker CPU 太重的負荷。我的話會先反覆驗證,確認真的是一關閉 TLS1.1/1.0 IIS w3wp CPU 就往上衝。若是,再對照 IIS Log 看關閉前後來存取的客戶端分佈有沒有明顯差異。