本文說明 SQL Server 的憑證需求,以及如何檢查憑證是否符合這些需求。
SQL Server 加密的憑證需求
若要使用傳輸層安全性 (TLS) 進行 SQL Server 加密,您需要布建符合下列條件的憑證(三種數字類型之一:
憑證必須位於本機計算機證書存儲或 SQL Server 服務帳戶證書存儲中。 建議您使用本機計算機證書存儲,避免使用 SQL Server 啟動帳戶變更來重新設定憑證。
SQL Server 服務帳戶必須具有存取 TLS 憑證的必要許可權。 如需詳細資訊,請參閱 匯 入憑證來加密 SQL Server 的連線。
目前的系統時間必須在憑證的屬性 有效期自 的值之後,並且在屬性 有效期至 的值之前。 如需詳細資訊,請參閱 過期的憑證。
備註
憑證必須是為了伺服器驗證而準備的。 這需要憑證的增強密鑰使用方式屬性來指定伺服器驗證(1.3.6.1.5.5.7.3.1)。
憑證必須使用
KeySpec的AT_KEYEXCHANGE選項來建立。 這需要使用 舊版密碼編譯記憶體提供者 來儲存私鑰的憑證。 通常,憑證的金鑰使用方式屬性 (KEY_USAGE) 也包含金鑰加密 () 和數位簽名 (CERT_KEY_ENCIPHERMENT_KEY_USAGECERT_DIGITAL_SIGNATURE_KEY_USAGE)。主體替代名稱應該包含用戶端可能用來連線到 SQL Server 執行個體的所有名稱。
用戶端必須能夠驗證伺服器所使用的憑證擁有權。 如果用戶端具有簽署伺服器證書之證書頒發機構單位的公鑰憑證,則不需要進一步設定。 Microsoft Windows 包含許多證書頒發機構單位的公鑰憑證。 如果伺服器證書是由客戶端沒有公鑰憑證的公開或私人證書頒發機構單位所簽署,您必須在要連線到 SQL Server 的每個用戶端上安裝證書頒發機構單位的公鑰憑證。
這很重要
如果計算機存放區中存在憑證,但它只符合上述清單中的部分需求並且已經通過 SQL Server 組態管理員或登錄項進行手動配置以供使用,那麼 SQL Server 將不會啟動。 選取另一個符合所有需求的憑證,或移除 SQL Server 所使用的憑證,直到您可以布建符合需求的憑證,或使用自我產生的憑證,如 SQL Server 產生的自我簽署憑證中所述。
Always On 可用性群組
如果您的 SQL Server 執行個體是 Always On 可用性群組的一部分,您可以使用下列其中一種方法來建立憑證:
方法 1:在可用性群組的所有複本上使用一個憑證。 通用名稱是任意的,因此可以是任何佔位符值。 可用性群組中所有 SQL Server 複本的主機名稱和 FQDN,以及可用性群組接聽程式名稱,應該包含在憑證的 主體替代名稱 中。 如果在產生原始憑證之後將其他複本新增至可用性群組,則必須使用所有複本的名稱重新產生憑證,並 重新匯入 至每個複本。 除非憑證是由公用或官方憑證授權單位 (CA) 簽署,否則憑證也必須 匯入 至連線到可用性群組複本或可用性群組接聽程式之所有用戶端上的憑證存放區。 如果您未在憑證中包含可用性群組的副本和接聽程式名稱,則在連線到可用性群組時,您必須在連接字串的主體替代名稱值中包含其中一個值,或在連接字串中包含憑證的路徑
HostNameInCertificate。 建議的方法是在憑證中指定名稱。以下是屬性範例,可為可用性群組定義正確設定的憑證,其中有兩部名為
test1.<your company>.com和test2.<your company>.com的伺服器,以及名為aglistener.<your company>.com的可用性群組接聽程式:CN = <hostname is recommended but not required when certificates are configured using SQL Server Configuration Manager> DNS Name = aglistener.<your company>.com DNS Name = test1.<your company>.com DNS Name = test2.<your company>.com DNS Name = aglistener DNS Name = test1 DNS Name = test2方法 2:針對可用性群組的每個複本使用個別的憑證。 使用個別的憑證時,在產生憑證之後將複本新增至可用性群組會更容易,因為您只需要為新的複本產生憑證,而不需要修改所有現有複本上的所有憑證。 通用名稱是任意的,因此可以是任何佔位符值。 個別 SQL Server 執行個體的主機名稱和 FQDN 以及可用性群組接聽程式名稱 必須 包含在每個個別複本憑證的 主體替代名稱 中。 將每個憑證匯入至其各自的複本,除非憑證是由公用或官方憑證授權單位 (CA) 簽署,否則將所有憑證匯入至連線到複本或可用性群組接聽程式之所有用戶端上的所有憑證存放區。
以下是屬性範例,可為可用性群組定義正確設定的憑證,其中包含兩個名為
test1.<your company>.com和test2.<your company>.com的執行個體,以及名為aglistener.<your company>.com的可用性群組接聽程式:測試證書1:
CN= <hostname is recommended but not required when certificates are configured using SQL Server Configuration Manager> DNS Name= test1.<your company>.com DNS Name= aglistener.<your company>.com DNS Name= aglistener DNS Name= test1測試證書2:
CN= <hostname is recommended but not required when certificates are configured using SQL Server Configuration Manager> DNS Name= test2.<your company>.com DNS Name= aglistener.<your company>.com DNS Name= aglistener DNS Name= test2
故障轉移叢集實例
如果 SQL Server 設定為 容錯移轉叢集執行個體,您必須在容錯移轉叢集中的所有節點上安裝具有虛擬伺服器主機名稱或完整 DNS 名稱 (FQDN) 的伺服器憑證。 且必須在容錯移轉叢集的所有節點上佈建憑證。 例如,如果您有一個雙節點叢集,節點名為 test1.<your company>.comtest2.<your company>.com和 ,並且您有一個名為 virtsql 的虛擬伺服器,則需要在兩個節點上安裝憑證 virtsql.<your company>.com 。
依照 設定 SQL Server 資料庫引擎以加密連線中記載的順序,將憑證匯入容錯移轉叢集。
以下是一個範例,說明為容錯移轉叢集實例正確設定的憑證屬性:
CN = virtsql.<your company>.com
DNS Name = virtsql.<your company>.com
DNS Name = virtsql
如需有關 SQL 叢集的更多資訊,請參閱 安裝容錯移轉叢集之前。
檢查憑證是否符合需求
在 SQL Server 2019 (15.x) 和更新版本中,SQL Server Configuration Manager 會在設定階段本身自動驗證所有憑證需求。 如果 SQL Server 在您設定憑證之後成功啟動,表示 SQL Server 可以使用該憑證。 但某些用戶端應用程式對於可用於加密的憑證仍有其他需求,而且根據所使用的應用程式,您可能會遇到不同的錯誤。 在該案例中,您必須檢查用戶端應用程式的支援檔,以取得主題的詳細資訊。
您可以使用下列其中一種方法來檢查憑證的有效性,以搭配 SQL Server 使用:
sqlcheck 工具:
sqlcheck是命令行工具,可檢查目前的計算機和服務帳戶設定,併產生文字報告給控制台視窗,以針對各種連線錯誤進行疑難解答。 輸出有關於憑證的下列資訊:Details for SQL Server Instance: This Certificate row in this section provides more details regarding the certificate being used by SQL Server (Self-generated, hard-coded thumbprint value, etc.). Certificates in the Local Computer MY Store: This section shows detailed information regarding all the certificates found in the computer certificate store.如需工具功能及下載指示的詳細資訊,請參閱 歡迎使用 CSS_SQL_Networking_Tools wiki。
certutil 工具:
certutil.exe是命令行程式,會安裝為憑證服務的一部分。 您可以使用命令 certutil.exe 來傾印和顯示憑證資訊。 使用-v選項來取得詳細資訊。 如需詳細資訊,請參閱 certutil。憑證嵌入式管理單元:您也可以使用 [ 憑證] 嵌入式管理單元視窗,檢視計算機上各種證書存儲中憑證的詳細資訊。 但此工具不會顯示
KeySpec資訊。 如需如何使用 MMC 嵌入式管理單元檢視憑證的詳細資訊,請參閱 如何:使用 MMC 嵌入式管理單元檢視憑證。
匯入與主機名稱名稱不同的憑證
目前,只有在憑證的主體名稱符合電腦的主機名稱時,您才能使用 SQL Server Configuration Manager 匯入憑證。
如果您想要使用具有不同主體名稱的憑證,請遵循下列步驟:
使用 [憑證] 嵌入式管理單元將憑證匯入本機電腦憑證存放區。
在 SQL Server 組態管理員中,展開 [SQL Server 網路組態],以滑鼠右鍵按一下 SQL Server 的執行個體,然後選擇 [屬性] 以開啟 [instance_name<屬性的>通訊協定] 對話方塊。
在 [憑證] 索引標籤上,從 [憑證] 下拉式清單中選取您匯入至憑證存放區的憑證:
匯入與主機名稱名稱不同的憑證會導致下列錯誤訊息:
The selected certificate name does not match FQDN of this hostname. This property is required by SQL Server
Certificate name: random-name
Computer name: sqlserver.domain.com
已過期憑證
SQL Server 只會在設定時檢查憑證的有效性。 例如,您無法在 SQL Server 2019 (15.x) 和更新版本上使用 SQL Server Configuration Manager 來佈建過期的憑證。 如果憑證在布建之後到期,SQL Server 會繼續執行,而不會發生問題。 但是,某些用戶端應用程式,例如 Power BI 會檢查每個連線上的憑證有效性,並在 SQL Server 實例設定為使用過期憑證進行加密時引發錯誤。 我們建議您不要使用過期的憑證進行 SQL Server 加密。
後續步驟
- 設定 SQL Server 資料庫引擎,以 匯入憑證來加密連線。