共用方式為


升級至 TLS 1.2 之後會報告 SSL 錯誤

本文提供在 SQL Server 中升級至 TLS 1.2 之後,可能會遇到的安全套接字層 (SSL) 錯誤的相關信息。 它也會列出您可以手動擷取數據的方法。 您也可以執行 SQLCHECK 工具,並檢閱 SQLCHECK 記錄檔中的資訊。

徵狀

請考慮下列案例,您可能會在將 TLS 通訊協定升級至 TLS 1.2 之後看到下列問題。

  • Microsoft SQL Server 使用由弱式哈希演算法簽署的憑證。 這類憑證包括 MD5、SHA224 和 SHA512。

  • TLS 1.2 升級僅套用至用戶端或伺服器,但不適用於兩者。

  • TLS 1.0 已停用。

  • 用戶端與伺服器之間沒有相符的密碼編譯演算法。

在此案例中,您會在升級完成後遇到下列問題:

  • 影響伺服器證書的問題也會影響來自用戶端計算機的本機連線和連線。 如需詳細資訊,請參閱加密 Connections 以 SQL Server

  • 應用程式可能會產生下列其中一個錯誤訊息:

    命名管道

    已成功與伺服器建立連線,但在登入流程期間發生錯誤。 (提供者:SSL 提供者,錯誤:0 - 管道另一端沒有進程) Microsoft SQL Server,錯誤:233。

    TCP

    已成功與伺服器建立連線,但在登入流程期間發生錯誤。 (提供者:SSL 提供者,錯誤:0 - 遠端主機 10054 已強制關閉連線) Microsoft SQL Server,錯誤:233。

如果您有網路擷取,它可能會類似下列螢幕快照,顯示伺服器藉由關閉連線來 Client Hello 回應封包。

網路擷取的螢幕快照,其中顯示伺服器如何回應用戶端 Hello 封包。

解決方案

若要解決這些錯誤,請遵循下列步驟:

  1. 開 SQL Server 組態管理員,以滑鼠右鍵按兩下 InstanceName> 的 <[通訊協定],然後選取 [屬性]

  2. 選取 [ 憑證] 索引卷標,並檢查正在使用哪一個憑證。

    [憑證] 索引標籤的螢幕快照,其中顯示使用的憑證。

    • 如果憑證存在,請選 取 [檢視 ] 進行檢查,然後選取 [ 清除]。 然後,移至步驟 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。

  3. 在 Microsoft Management Console (MMC) 中開啟 電腦證書存儲

    1. 流覽至 [個人憑證]

    2. 展開 [ 預定用途] 數據行,然後按兩下已啟用伺服器驗證的憑證。

    3. 檢查指紋是否符合錯誤記錄檔中的指紋。 如果沒有,請嘗試另一個憑證。

    4. 檢查 簽章哈希演算法。 如果是 MD5、SHA224 或 SHA512,則不支援 TLS 1.2。 如果是其中一個弱式演算法,請停用伺服器驗證,讓 SQL Server 無法使用它。

    5. 如果憑證在 SQL Server 組態管理員 中明確指定,請選取 [清除] 將其移除。

    6. 在 MMC 中找出憑證。

    7. 在 MMC 中,以滑鼠右鍵按下憑證,然後選取 [ 屬性]

    8. 在 [ 一般] 索引標籤上,完全停用憑證,或選擇性地停用 伺服器驗證

      從 SQL Server 組態管理員 選取 [屬性]。

  4. 儲存變更。

  5. 重新啟動 SQL Server。

    錯誤記錄檔現在應該表示已使用自我產生的憑證。 如果問題已解決,SQL Server 可以使用自我簽署憑證成功執行。 如果您想要 Verisign 或其他憑證,則必須要求憑證提供者確定使用適用於 TLS 1.2 的強哈希。 如果問題未解決,請返回步驟 2。

檢查已啟用和停用的 TLS 通訊協定

若要檢查已啟用和停用的 TLS 通訊協定,請遵循下列步驟:

  1. 如果您尚未這麼做,請檢查背景和基本升級工作流程。

    用戶端和伺服器都必須升級,才能強制執行 TLS 1.2。 如有必要,您可以升級伺服器,但讓 TLS 1.0 保持啟用,讓未升級的用戶端可以連線。

  2. 使用 REGEDIT 檢查 SSL 或 TLS 登錄。

    您可以在下列登入子機碼下找到已啟用和停用的 SSL 或 TLS 版本:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

    每個版本的 SSL 或 TLS 都有用戶端和伺服器子機碼,而且兩者都有 EnabledDisabled 值:

    [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) 。

  3. 請確定沒有不相容的設定。

    例如,已停用 TLS 1.0,並在伺服器上啟用 TLS 1.2。 這是因為這些設定可能不符合用戶端上的設定,或用戶端驅動程式可能不會更新。

    您可以設定 Enabled=0 TLS 1.2 (來測試這種情況,如果 TLS 1.0 已停用) ,也可以重新啟用 TLS 1.0。

  4. 重新啟動 SQL Server,以檢查問題是否與 TLS 1.2 相關,或是一般問題。

沒有相符的加密套件

您可以檢查和 封包中 Client Hello 的用戶端和伺服器 TLS 版本和 Server Hello 加密套件。 封 Client Hello 包會公告所有用戶端加密套件,而 Server Hello 封包會指定一個加密套件。 如果沒有相符的套件,伺服器會關閉連線,而不是藉由傳送 Server Hello 封包來回應。

您可以檢查以判斷套件是否相符的加密套件詳細資料螢幕快照。

如果網路追蹤無法使用,您可以在下列登錄子機碼下檢查函式值:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002

如果您沒有看到相符的演算法,請連絡 Microsoft 支援服務。 若要協助支持工程師,請擷取網路追蹤或 BID 追蹤,如進階 SSL 資料擷取中所指定。