操作系統錯誤 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:
-
使用
IIS 密碼編譯
工具中的 [
加密套
件] 索引標籤來驗證和變更目前的 TLS 設定。
-
啟動登錄 編輯器,並找出安全通道特定的登錄機碼:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
。 如需詳細資訊,請參閱
TLS 1.2 升級工作流程
和
升級至 TLS 1.2 之後的 SSL 錯誤
。
案例 2:比對用戶端和伺服器上的 TLS 通訊協定,但沒有相符的 TLS 加密套件
當您或您的系統管理員限制用戶端或伺服器上的特定演算法以獲得額外的安全性時,就會發生此案例。
您可以在網路追蹤的用戶端 Hello 和伺服器 Hello 封包中輕鬆檢查
客戶
端和
伺服器
TLS 版本、
加密套
件。
用戶端 Hello
封包會通告所有用戶端加密套件,而
伺服器 Hello
封包則指定其中一個。 如果沒有相符的套件,伺服器會關閉連線,而不是回應
伺服器 Hello
封包。
若要檢查問題,請遵循下列步驟:
-
如果網路追蹤無法使用,請檢查此登錄機碼下的函式值:
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
使用 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 搭配使用,並造成先前所述的錯誤。
自我簽署憑證不會受到此問題的影響。
若要解決此問題,請執行下列步驟:
- 在 [SQL Server 組態管理員] 中,展開 [控制台] 窗格中的 [SQL Server 網络組態]。
- 選取 [通訊協定] 作為 <實例名稱>。
- 選取 [ 憑證] 索引 標籤,並遵循相關步驟: