本文提供您在 SQL Server 中升級至 TLS 1.2 之後可能會遇到的安全套接字層 (SSL) 錯誤相關信息。 它也會列出您可以手動擷取數據的方法。 您也可以執行 SQLCHECK 工具,並檢閱 SQLCHECK 記錄檔中的資訊。
徵兆
請考慮下列案例,在將 TLS 通訊協定升級至 TLS 1.2 之後,您可能會看到下列問題。
Microsoft SQL Server 會使用弱式哈希演算法所簽署的憑證。 這類憑證包括 MD5、SHA224 和 SHA512。
TLS 1.2 升級只會套用至用戶端或伺服器,但不會同時套用兩者。
TLS 1.0 已停用。
用戶端與伺服器之間沒有相符的密碼編譯演算法。
在此案例中,您在升級完成後遇到下列問題:
影響伺服器證書的問題也會影響客戶端電腦的本機連線和連線。 如需詳細資訊,請參閱 加密 SQL Server 的連線。
應用程式可能會產生下列其中一個錯誤訊息:
具名管道
已順利建立與伺服器的連接,但隨後在登入過程中發生錯誤。 (提供者: SSL 提供者, 錯誤: 0 - 管道的另一端沒有行程)Microsoft SQL Server,錯誤:233。
TCP
已順利建立與伺服器的連接,但隨後在登入過程中發生錯誤。 (提供者:SSL 提供者,錯誤:0 - 遠端主機 10054 強行關閉連線)Microsoft SQL Server,錯誤:233。
如果您有網路擷取,它可能會類似下列螢幕快照,顯示伺服器關閉連線來回應 Client Hello
封包。
解決方法
若要解決這些錯誤,請遵循下列步驟:
開啟 SQL Server 組態管理員,以滑鼠右鍵按兩下 InstanceName> 的 <[通訊協定],然後選取 [屬性]。
選取 [憑證] 索引卷標,並檢查正在使用哪一個憑證。
如果憑證存在,請選取 [檢視 ] 加以檢查,然後選取 [ 清除]。 然後,移至步驟 4。
如果沒有憑證,請檢查 SQL Server 錯誤記錄檔以取得哈希碼。 您可能會看到下列其中一個專案:
2023-05-30 14:59:30.89 spid15s The certificate [Cert Hash(sha1) "B3029394BB92AA8EDA0B8E37BAD09345B4992E3D"] was successfully loaded for encryption.
或2023-05-19 04:58:56.42 spid11s A self-generated certificate was successfully loaded for encryption.
如果憑證是自我產生的,請跳至步驟 2。
在 Microsoft Management Console 中開啟電腦證書存儲 (MMC)。
流覽至 [個人憑證]。
展開 [ 預定用途 ] 數據行,然後按兩下已啟用伺服器驗證的憑證。
檢查指紋是否符合錯誤記錄檔中的指紋。 如果沒有,請嘗試另一個憑證。
檢查簽章哈希演算法。 如果是 MD5、SHA224 或 SHA512,則不支援 TLS 1.2。 如果是其中一個弱式演算法,請停用 伺服器驗證 ,讓SQL Server 無法使用它。
如果在 SQL Server 組態管理員 中明確指定憑證,請選取 [清除] 將其移除。
在 MMC 中找出憑證。
在 MMC 中,以滑鼠右鍵按下憑證,然後選取 [ 屬性]。
在 [ 一般] 索引標籤上,完全停用憑證或選擇性地停用 伺服器驗證。
儲存變更。
重新啟動 SQL Server。
錯誤記錄檔現在應該會指出已使用自我產生的憑證。 如果問題已解決,SQL Server 可以使用自我簽署憑證成功執行。 如果您想要 Verisign 或其他憑證,則必須要求憑證提供者確定已使用適用於 TLS 1.2 的強式哈希。 如果無法解決問題,請返回步驟 2。
檢查已啟用和停用的 TLS 通訊協定
若要檢查已啟用和停用的 TLS 通訊協定,請遵循下列步驟:
如果您尚未這麼做,請檢查背景和基本升級工作流程。
用戶端和伺服器都必須升級,才能強制執行 TLS 1.2。 如有必要,您可以升級伺服器,但讓 TLS 1.0 保持啟用,讓未升級的用戶端可以連線。
使用 REGEDIT 檢查 SSL 或 TLS 登錄。
您可以在下列登入子機碼下找到已啟用和停用的 SSL 或 TLS 版本:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
每個 SSL 或 TLS 版本都有用戶端和伺服器子機碼,而且都有 Enabled 和 Disabled 值:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
注意
任何非零值都會被視為 TRUE。 不過, 1 通常是慣用的,而不是 FFFFFFFF (或 -1)。
請確定沒有不相容的設定。
例如,TLS 1.0 已停用,並在伺服器上啟用 TLS 1.2。 這是因為這些設定可能不符合用戶端上的設定,或用戶端驅動程式可能不會更新。
您可以設定
Enabled=0
TLS 1.2 來測試這種情況(如果 TLS 1.0 已停用,也可以重新啟用 TLS 1.0)。重新啟動 SQL Server 以檢查問題是否與 TLS 1.2 相關,還是是一般問題。
沒有相符的加密套件
您可以檢查和 封包中的Client Hello
Server Hello
用戶端和伺服器 TLS 版本和加密套件。 封 Client Hello
包會公告所有用戶端加密套件,而 Server Hello
封包會指定一個加密套件。 如果沒有相符的套件,伺服器會關閉連線,而不是透過傳送 Server Hello
封包來回應。
如果網路追蹤無法使用,您可以在下列登錄子機碼下檢查函式值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002
如果您看不到相符的演算法,請連絡 Microsoft 支援服務。 若要協助支持工程師,請依照進階 SSL 資料擷取中指定的擷取網路追蹤或 BID 追蹤。