共用方式為


遠端主機已強制關閉現有的連線 (操作系統錯誤 10054)

適用于:SQL Server

注意事項

開始進行疑難排解之前,建議您先檢查 必要條件並逐一瀏覽檢查清單。

本文詳述各種案例,並提供下列錯誤的解決方法:

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

  • 已成功與伺服器建立連線,但在登入前交握期間發生錯誤。 (提供者:TCP 提供者,錯誤:0 - 遠端主機已強制關閉現有的連線。)

操作系統錯誤 10054 會在 Windows 套接字層中引發。 如需詳細資訊,請參閱 Windows 套接字錯誤碼:WSAECONNRESET 10054

您何時會看到錯誤?

安全通道也稱為 安全通道,是 安全性支援提供者 (SSP) 。 它包含一組安全性通訊協定,可透過加密提供身分識別驗證和安全的私人通訊。 安全通道 SSP 的其中一個功能是實作不同版本的 傳輸層安全性 (TLS) 通訊協定。 此通訊協定是業界標準,旨在保護透過因特網通訊之資訊的隱私權。

TLS 交握通訊協議負責在透過 TCP 通訊的兩個應用程式之間建立或繼續安全會話所需的密鑰交換。 在連線程式的預先登入階段,SQL Server和用戶端應用程式會使用 TLS 通訊協定來建立用於傳輸認證的安全通道。

下列案例詳細說明無法完成交握時所發生的錯誤:

案例 1:用戶端與伺服器之間沒有相符的 TLS 通訊協定

安全套接字層 (SSL) 和 TLS 1.2 之前的 TLS 版本有數個已知弱點。 建議您升級至 TLS 1.2,並盡可能停用舊版。 因此,系統管理員可以透過組策略或其他機制來推送更新,以在您環境內的各種計算機上停用這些不安全的 TLS 版本。

當您的應用程式使用舊版的 Open Database Connectivity (ODBC) 驅動程式、OLE DB 提供者、.NET Framework 元件或不支援 TLS 1.2 的 SQL Server 版本時,就會發生連線錯誤。 發生此問題的原因是伺服器和用戶端找不到相符的通訊協定 (例如 TLS 1.0 或 TLS 1.1) 。 需要相符的通訊協定,才能完成繼續連線所需的 TLS 交握。

解決方案

若要解決此問題,請使用下列其中一個方法:

  • 將您的 SQL Server 或用戶端提供者升級至支援 TLS 1.2 的版本。 如需詳細資訊,請參閱 Microsoft SQL Server 的 TLS 1.2 支援
  • 執行下列其中一個動作,要求系統管理員在用戶端和伺服器計算機上暫時啟用 TLS 1.0 或 TLS 1.1:

案例 2:比對用戶端和伺服器上的 TLS 通訊協定,但沒有相符的 TLS 加密套件

當您或您的系統管理員限制用戶端或伺服器上的特定演算法以獲得額外的安全性時,就會發生此案例。

您可以在網路追蹤的用戶端 Hello 和伺服器 Hello 封包中輕鬆檢查客戶端和伺服器 TLS 版本、加密套件。 用戶端 Hello 封包會通告所有用戶端加密套件,而伺服器 Hello 封包則指定其中一個。 如果沒有相符的套件,伺服器會關閉連線,而不是回應伺服器 Hello 封包。

解決方案

若要檢查問題,請遵循下列步驟:

  1. 如果網路追蹤無法使用,請檢查此登錄機碼下的函式值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002

    使用下列 PowerShell 命令來尋找 TLS 函式。

    Get-ItemPropertyValue  -Path HKLM:\System\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002\ -Name Functions
    
  2. 使用 IIS 密碼編譯工具中的 [加密套件] 索引標籤來檢查是否有任何相符的演算法。 如果找不到相符的演算法,請連絡 Microsoft 支援服務。

如需詳細資訊,請參閱 TLS 1.2 升級工作流程傳輸層安全性 (TLS) 連線在連線或嘗試繼續時可能會失敗或逾時

案例 3:可能啟用TLS_DHE加密

當用戶端或伺服器裝載於 Windows 2012、2016 和更新版本時,就會發生此問題。 儘管這兩個 OS 版本都擁有相同的加密 (TLS_DHE*) ,Windows 2012 和 2016+ 仍會以不同的方式處理 TLS 內的密碼編譯密鑰。 這可能會導致通訊錯誤。

解決方案

若要解決此問題,請從本機原則中移除開頭為 “TLS_DHE*” 的所有加密。 如需應用程式嘗試連線到 Windows 中 SQL Server 時所發生之錯誤的詳細資訊,請參閱在 Windows 中連線 SQL Server 時,應用程式遇到強制關閉的 TLS 連線錯誤

案例 4:SQL Server 使用由弱式哈希演算法簽署的憑證,例如 MD5、SHA224 或 SHA512

SQL Server 一律加密與登入相關的網路封包。 基於此目的,它會使用手動布建的憑證或 自我簽署憑證。 如果 SQL Server 在證書存儲中找到支援伺服器驗證函式的憑證,則會使用憑證。 SQL Server 使用此憑證,即使尚未手動布建。 如果這些憑證使用弱式哈希演算法 (指紋演算法) 例如 MD5、SHA224 或 SHA512,它們將無法與 TLS 1.2 搭配使用,並造成先前所述的錯誤。

注意事項

自我簽署憑證不會受到此問題的影響。

解決方案

若要解決此問題,請執行下列步驟:

  1. [SQL Server 組態管理員] 中,展開 [控制台] 窗格中的 [SQL Server 網络組態]。
  2. 選取 [通訊協定] 作為 <實例名稱>。
  3. 選取 [ 憑證] 索引 標籤,並遵循相關步驟:
    • 如果顯示憑證,請選 取 [檢視 ] 以檢查指紋演算法,以確認其是否使用弱式哈希演算法。 然後,選取 [清除 ],然後移至步驟 4。
    • 如果未顯示憑證,請檢閱 SQL Server 錯誤記錄檔中是否有類似下列專案,並記下哈希或指紋值:
      2017-05-30 14:59:30.89 spid15s The certificate [Cert Hash(sha1) "B3029394BB92AA8EDA0B8E37BAD09345B4992E3D"] was successfully loaded for encryption
  4. 使用下列步驟移除伺服器驗證:
    1. 取 [開始>執行],然後輸入 MMC。 (MMC 也稱為 Microsoft Management Console.)
    2. 在 MMC 中,開啟憑證,然後在 [憑證] 嵌入式管理單元畫面中選取 [計算機帳戶]。
    3. 展開 [個人>憑證]
    4. 找出 SQL Server 使用其名稱的憑證,或檢查證書存儲中不同憑證的指紋值,然後開啟其 [屬性] 窗格。
    5. 在 [ 一般] 索引標籤上, 選取 [僅啟用下列用途 ],然後取消選取 [伺服器驗證]
  5. 重新啟動 SQL Server 服務。

案例 5:用戶端和伺服器使用TLS_DHE加密套件進行 TLS 交握,但其中一個系統並未針對TLS_DHE安裝前置零修正

如需此案例的詳細資訊,請參閱在 Windows 中連線 SQL Server 時,應用程式遇到強制關閉的 TLS 連線錯誤

注意事項

如果本文尚未解決您的問題,您可以檢查 常見的連線問題文章 是否有説明。

案例 6:TCP Three-Way 交握逾時 (SYN 失敗,TCP 拒絕) 因為 IOCP 背景工作角色不足

在 SQL Server 2017 和更早版本的工作負載很高的系統中,您可能會發現 TCP 三向交握失敗導致間歇性 10054 錯誤,導致 TCP 拒絕。 此問題的根本原因可能是處理 TCPAcceptEx 要求的延遲。 此延遲可能是因為 IOCP (輸入/輸出完成埠不足,) 負責管理連入連線接受的接聽程式背景工作。 IOCP 背景工作角色的數目不足,而忙碌服務其他要求會導致延遲處理連線要求,最終導致交握失敗和 TCP 拒絕。 如果有任何) 或登入要求的處理涉及驗證檢查,您也可以觀察開始 SSL 交握 (期間的登入逾時。

解決方案

配置給處理驗證和加密作業的IOCP背景工作角色和SOS背景工作資源不足,是TCP三向交握逾時和其他登入逾時的主要原因。 SQL Server 2019 包含此領域的數個效能改善。 其中一個值得注意的增強功能是實作專用的登入發送器集區。 這會將登入相關工作的資源配置優化,以減少逾時次數,並改善整體系統效能。

TLS 連線失敗的其他案例

如果您遇到的錯誤訊息未對應至任何先前的案例,請參閱下列其他案例:

另請參閱

協力廠商資訊免責聲明

本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。