當您連線到 SQL Server 時,「從遠端伺服器收到的憑證是由不受信任的證書頒發機構單位發出」錯誤
本文可協助您解決嘗試對 SQL Server 進行加密連線時所發生的問題。
原始產品版本:SQL Server
原始 KB 編號: 2007728
徵兆
連線至 SQL Server 時,您可能會收到下列錯誤訊息:
已順利建立與伺服器的連接,但隨後在登入過程中發生錯誤。 (提供者:SSL 提供者,錯誤:0 - 憑證鏈是由不受信任的授權單位發出。) (.Net SqlClient Data Provider)
此外,下列錯誤訊息會記錄在 Windows 系統事件記錄檔中。
Log Name: System
Source: Schannel
Date: 10/13/2020 3:03:31 PM
Event ID: 36882
Task Category: None
Level: Error
Keywords:
User: USERNAME
Computer: COMPUTERNAME
Description:
The certificate received from the remote server was issued by an untrusted certificate authority. Because of this, none of the data contained in the certificate can be validated. The TLS connection request has failed. The attached data contains the server certificate.
原因
當您嘗試使用無法驗證的憑證對 SQL Server 建立加密連線時,就會發生此錯誤。 此問題可能會在下列情況中發生:
案例 | 伺服器端加密 | 用戶端加密 | 憑證類型 | 憑證授權單位存在於受信任的根憑證授權單位存放區中 |
---|---|---|---|---|
1 | 是 | 否 | 您從非信任的來源布建憑證(證書頒發機構單位未列為客戶端電腦上受信任跟證書授權單位中的受信任授權單位) | 否 |
2 | 關閉 | 是 | SQL Server 自行產生的憑證 | 自我簽署憑證不會顯示在此存放區中。 |
對 SQL Server 建立加密連線時,安全通道 (Schannel) 搜尋本機電腦上受信任的根憑證授權單位存放區,以建立受信任憑證授權單位的清單。 在 TLS 交握期間,伺服器會將其公開金鑰憑證傳送到用戶端。 公開金鑰憑證的發行者也就是所謂的「憑證授權單位 (CA)」。 用戶端必須確定憑證授權單位是用戶端信任的憑證授權單位。 事先瞭解受信任 CA 的公開金鑰,即可達成此目的。 當 Schannel 偵測到未受信任證書頒發機構單位所簽發的憑證時,例如在前兩種情況下,您會收到徵兆區段中所列的錯誤訊息。
解決方法
如果您刻意使用來自非信任授權單位的憑證或自我簽署憑證來加密與 SQL Server 的連線,您可以使用下列其中一個選項:
針對案例 1,將證書頒發機構單位新增至起始加密連線的用戶端電腦上受信任的跟證書授權單位存放區。 若要這樣做,請完成匯出 伺服器證書 ,並在 該順序的後續幾節所列的用戶端計算機 程式上安裝跟證書授權單位 (CA)。
匯出伺服器憑證
此範例會使用名為 caCert.cer 的檔案作為憑證檔案。 您必須從伺服器取得此憑證檔案。 下列步驟說明如何將伺服器憑證匯出到檔案:
按一下 [開始],按一下 [執行],然後輸入 MMC。 (MMC 是 Microsoft Management Console 的縮寫字)。
在 MMC 中,開啟 [憑證]。
依序展開 [個人] 和 [憑證]。
以滑鼠右鍵按下伺服器證書,然後選取 [所有工作匯出>]。
按兩下 [下一步],將 [憑證導出精靈] 的歡迎對話框移過。
確認 [ 否],不要匯出私鑰 已選取,然後選取 [ 下一步]。
請確定已選取 [DER 編碼的二進位 X.509 (.CER)] 或 [Base-64 編碼的 X.509 (.CER)],然後按 [下一步]。
輸入匯出檔案名稱。
按一下 [下一步],然後按一下 [完成] 以匯出憑證。
在用戶端電腦上安裝根憑證授權單位 (CA)
在用戶端電腦上啟動 MMC 的憑證嵌入式管理單元,然後新增 [憑證] 嵌入式管理單元。
在 [ 憑證嵌入式 管理單元] 對話框中,選取 [ 計算機 帳戶],然後選取 [ 下一步]。
在 [選取計算機] 窗格中,選取 [本機計算機:[此控制台執行的計算機],然後選取 [完成]。
選擇 [ 確定 ] 以關閉 [ 新增或移除嵌入式管理單元 ] 對話框。
在 MMC 的左窗格中,展開 [ 憑證][本機計算機] 節點。
展開 [ 受信任的跟證書授權單位] 節點,以滑鼠右鍵按兩下 [憑證 ] 子資料夾,選取 [所有工作],然後選取 [ 匯入]。
在 [憑證匯入精靈] 的 [歡迎] 頁面上,選取 [下一步]。
在 [要匯入的檔案] 頁面上,選取 [流覽]。
流覽至caCert.cer憑證檔案的位置,選取檔案,然後選取 [開啟]。
在 [要匯入的檔案] 頁面上,選取 [下一步]。
在 [ 證書存儲] 頁面上,接受預設選取專案,然後選取 [ 下一步]。
在 [ 正在完成憑證匯入精靈] 頁面上,選取 [ 完成]。
針對案例 1 和 2,請在用戶端應用程式中將 [信任伺服器證書] 設定設定為 true。
如需如何執行這項操作的詳細資訊,請參閱下列主題:
搭配 Sqlclient 使用加密 (部分機器翻譯)
注意
如果您要使用 SQL Server Management Studio 連線到 SQL Server,請選取 [連線到伺服器] 視窗中的 [選項] 索引標籤,然後選取 [信任伺服器證書] 選項。
注意: 使用自我簽署憑證加密的 SSL 連線不提供強式安全性。 它們很容易受到 man-in-the-middle
攻擊。 您不應該依賴在生產環境中或連線到網際網路的伺服器上使用自我簽署憑證的 SSL。
如果本文前幾節所討論的設定是非預期的,您可以使用下列其中一個選項來解決此問題:
設定資料庫引擎,以便依據對資料庫引擎啟用加密連線的程序使用加密。
如果不需要加密:
如果用戶端應用程式中有任何加密設定 (如有),請停用。
使用 SQL Server Configuration Manager 停用伺服器端加密。 如需如何執行這項操作的詳細資訊,請參閱 設定伺服器。