升級 SNAC 應用程式之後,「憑證鏈結是由不受信任授權單位所簽發」錯誤

總結

本文協助你排除在將資料庫應用程式從 SQL Server Native Client 11.0(SNAC)升級到 Microsoft OLE DB Driver 19 或 Microsoft ODBC Driver 18 for SQL Server 時,所發生的憑證鏈信任錯誤。

當你從 SNAC 11.0 升級到更新的驅動程式時,應用程式可能會因憑證鏈信任錯誤而無法連接到 SQL Server。 此問題是因為較新的驅動程式預設啟用 加密 並要求憑證驗證,而 SNAC 預設是關閉此功能。 要修正錯誤,請設定客戶端信任的憑證,或依本文所述調整 Encrypt、 Use Encryption for Data或 TrustServerCertificate 連線設定。

哪個加密關鍵字適用在你的驅動程式和客戶端

控制加密的關鍵字取決於驅動程式,以及你的應用程式如何建構連線字串。 如果你使用驅動程式不認識的關鍵字,連線會以「關鍵字不支援」錯誤而非憑證錯誤失敗。

驅動程式與連接方式 加密關鍵字 憑證信任關鍵字
OLE DB 驅動程式 19,提供者字串 (IDBInitialize::Initialize) Encrypt TrustServerCertificate=yes 或 no
OLE DB 驅動程式 19、ADO 或初始化字串(IDataInitialize) Use Encryption for Data Trust Server Certificate=true 或 false
ODBC 驅動程式 18、連線字串或 DSN Encrypt TrustServerCertificate=yes 或 no
  • OLE DB 驅動程式 19: 接受 Optional、 Mandatory (預設值)、 Strict。 為了向下相容,也接受版本 18 的值,其中 no 和 false 對應至 Optional,而 yes 和 true 對應至 Mandatory。
  • ODBC 驅動程式 18:接受 yes/mandatory(預設值)、/nooptional 和 strict。
  • 提供者條件: 使用 TrustServerCertificate=yes 或 TrustServerCertificate=no。
  • ADO 與初始化字串: 使用 Trust Server Certificate=true 或 Trust Server Certificate=false。
  • 嚴格模式: 它總是驗證伺服器憑證,忽略憑證信任設定。

在提供者字串中使用 TrustServerCertificate=true 可能會傳回「無效值」錯誤。

完整關鍵字列表請參見「使用 連接字串 關鍵字搭配 OLE DB Driver for SQL Server」、MSOLEDBSQL 的主要版本差異,以及 DSN 與 連接字串 關鍵字與屬性。

OLE DB Driver 19 與 ODBC Driver 18 的憑證鏈錯誤、原因與解決方案

選擇你升級到的驅動程式標籤。 每個分頁會顯示你看到的錯誤訊息、發生原因,以及建議的解決方案順序。

當您從 SQL Server Native Client 11.0(Provider=SQLNCLI11)升級到 Microsoft OLE DB Driver 19 for SQL Server 後,連線嘗試可能會因以下錯誤訊息而失敗:

[Microsoft OLE DB Driver 19 for SQL Server]:客戶端無法建立連線

[Microsoft OLE DB Driver 19 for SQL Server]:SSL 提供者:憑證鏈結是由不受信任的授權單位所簽發。

升級至 Microsoft OLE DB 驅動程式 19 時憑證鏈信任錯誤的原因

此錯誤表示用戶端無法驗證 SQL Server 憑證的真實性,因為它是由用戶端不信任的憑證授權機構(CA)所發出。

當以下兩個條件都成立時,這些錯誤會發生:

  • SQL Server 實例的 [強制加密] 設定會設定為 [否]。

  • 客戶端連線字串沒有明確指定加密屬性的值,或者 DSN 裡沒有明確設定或更新加密選項。

發生錯誤的原因是客戶端驅動程式的預設行為有所變更。 舊版客戶端驅動程式預設資料加密為 關閉 。 新驅動程式預設此設定為 開啟 。 由於資料加密是 開啟狀態,驅動程式嘗試驗證伺服器憑證但失敗。

升級至 Microsoft OLE DB 驅動程式 19 時,憑證鏈信任錯誤的解決方案

在 SQL Server 實例上由客戶信任的憑證授權機構設定 TLS 憑證。 確保伺服器提供所需的中介憑證,讓客戶端能將鏈條建立到受信任的根憑證(root CA)。 此方法在保持加密與憑證驗證啟用的同時解決錯誤。 如需詳細資訊,請參閱 設定 SQL Server 資料庫引擎以加密連線。

無需驗證就信任伺服器憑證

如果你無法立即提供可驗證的憑證,請告訴司機跳過憑證驗證。 您使用的關鍵字,取決於應用程式建立連線字串的方式:

  • 在提供者字串中,加入 TrustServerCertificate=yes。
  • 在 ADO 或初始化字串中,加入 Trust Server Certificate=true。

這個設定本身不會自動開啟加密。 當連線加密時,它會指示驅動程式跳過憑證驗證,導致連線容易受到中間攻擊。 僅將其作為暫時性的措施使用。 在 Strict 加密模式下,驅動程式會忽略此設定,並始終驗證憑證。

附註

目前,MSOLEDBSQL19 會防止建立沒有加密和受信任憑證的連結伺服器( 自我簽署憑證不足)。 如果你需要連結伺服器,可以使用現有支援的 MSOLEDBSQL 版本。

將加密關鍵字設為可選

更改加密設定,讓驅動程式不需要驗證過的憑證。 您使用的關鍵字取決於您的應用程式如何建立連線字串:

  • 在提供者字串中,設定 Encrypt=Optional為 。
  • 在 ADO 或初始化字串中,設為 Use Encryption for Data=Optional。

OLE DB 驅動程式 19 的預設值為 Mandatory。 如果 連接字串 已經指定Mandatory了 、 yes或 true,則將 的值改為 Optional。 如果 連接字串 沒有指定值,就加入關鍵字。 此變更恢復了版本 18 的加密行為,並降低了連線的安全性。

如需詳細資訊,請參閱 OLE 資料庫中的加密和憑證驗證。

暫時使用 OLE DB 驅動程式 18.x 作為措施

Microsoft OLE DB Driver for SQL Server 18.x 預設不啟用加密,因此不會受到這個變更的影響。 將此選項視為暫時措施,並規劃移轉至 OLE DB Driver 19。 您可以從 Microsoft OLE DB Driver for SQL Server 的版本資訊下載驅動程式。