啟用資料庫引擎的加密連線

適用于:是SQL Server (所有支援的版本)

了解如何跨通訊通道加密資料。 您可以啟用 SQL Server Database Engine 實例的加密連線,並使用 SQL Server 組態管理員 來指定憑證。

伺服器電腦必須已佈建憑證。 若要在伺服器電腦上佈建憑證,則需要將其匯入至 Windows。 用戶端電腦必須設定為信任憑證的根授權單位

重要

從 2016 SQL Server 2016 (13.x) 開始,已停止安全通訊端層 (SSL) 。 請改用傳輸層安全性 (TLS)。

傳輸層安全性 (TLS)

SQL Server可以使用傳輸層安全性 (TLS) 來加密在 SQL Server 實例與用戶端應用程式之間透過網路傳輸的資料。 TLS 加密是在通訊協定層內執行,可供所有支援的SQL Server用戶端使用。

TLS 可以在用戶端連線要求加密時用來驗證伺服器。 如果SQL Server的實例是在已從公開憑證授權單位單位指派憑證的電腦上執行,則電腦身分識別和SQL Server的實例是由導致受根信任授權單位的憑證鏈結所保證。 在這種伺服器驗證中,必須將執行用戶端應用程式的電腦設定成信任伺服器使用之憑證的根授權單位。 如需伺服器憑證和加密的詳細資訊,請參閱 使用 TrustServerCertificate

可以搭配自我簽署憑證來使用加密,下節將做說明,但自我簽署憑證所提供的保護有限。 TLS 使用的加密層級 (40 位元或 128 位元) 視應用程式和資料庫電腦上執行的 Microsoft Windows 作業系統版本而定。

警告

使用 40 位元加密層級會被視為不安全。

使用自我簽署憑證來加密的 TLS 連線不提供增強式安全性。 這種連線容易受到攔截式攻擊。 在生產環境或連線到網際網路的伺服器上,您不應該仰賴使用自我簽署憑證的 TLS。

啟用 TLS 加密,可提高 SQL Server 執行個體和應用程式之間跨網路傳輸資料的安全性。 不過,當SQL Server與用戶端應用程式之間的所有流量都使用 TLS 加密時,需要下列額外的處理:

  • 在連線時需要額外的網路往返作業。
  • 從應用程式傳送至 SQL Server 實例的封包必須由用戶端 TLS 堆疊加密,並由伺服器 TLS 堆疊解密。
  • 從 SQL Server 實例傳送至應用程式的封包必須由伺服器 TLS 堆疊加密,並由用戶端 TLS 堆疊解密。

關於憑證

您必須針對 伺服器驗證發出此憑證。 憑證的名稱必須是電腦的完整網域名稱 (FQDN)。

電腦上之使用者的憑證會儲存在本機中。 若要安裝憑證以供SQL Server使用,您必須以具有本機系統管理員許可權的帳戶執行SQL Server 組態管理員。

用戶端必須可確認伺服器所使用之憑證的擁有權。 如果用戶端具有已簽署伺服器憑證之憑證授權單位的公開金鑰憑證,則不需要進一步進行組態設定。 Microsoft Windows 包含許多憑證授權單位單位的公開金鑰憑證。 如果伺服器憑證是由用戶端沒有公開金鑰憑證的公開或私人憑證授權單位單位所簽署,您必須安裝簽署伺服器憑證之憑證授權單位單位的公開金鑰憑證。

注意

若要在容錯移轉叢集中使用加密功能,請務必在容錯移轉叢集中的所有節點上,對於虛擬伺服器使用完整的 DNS 名稱來安裝伺服器憑證。 例如,如果您有兩個節點的叢集,且節點名為test1.* < 您的公司*.com和 test2.*您的公司 >> *.com,而且您有名為 virtsql 的虛擬伺服器,則必須在兩個節點上安裝 virtsql.*您的公司*.com憑證。 <<> 您可以在 [SQL Server 網路組態] 的 [virtsql 通訊協定] 屬性方塊中,將 ForceEncryption 選項的值設為 [是]。

在 Azure VM 上建立 Azure 搜尋服務索引子到 SQL Server 的加密連線時,請參閱 在 Azure VM 上設定從 Azure 搜尋服務索引子到 SQL Server 的連線

憑證需求

若要SQL Server載入 TLS 憑證,憑證必須符合下列條件:

  • 憑證必須位於本機電腦憑證存放區或目前使用者憑證存放區。

  • SQL Server服務帳戶必須具有存取 TLS 憑證的必要許可權。

  • 目前的系統時間必須在憑證的 [有效期限自] 屬性值之後,並且在憑證的 [有效期限至] 屬性值之前。

    注意

    除非由 [信任伺服器憑證] 設定覆寫,否則會使用起始指定加密選項為 true 的用戶端連線連接到SQL Server時,會評估憑證有效性。

  • 憑證必須是為了伺服器驗證而準備的。 這需要憑證的 [增強金鑰使用方法] 屬性指定 [伺服器驗證 (1.3.6.1.5.5.7.3.1)]。

  • 憑證必須使用 AT_KEYEXCHANGEKeySpec 選項來建立。 這需要舊版憑證。 憑證的金鑰用法屬性 (KEY_USAGE) 通常也包括金鑰編密法 (CERT_KEY_ENCIPHERMENT_KEY_USAGE)。

  • 憑證的 [主旨] 屬性必須指出一般名稱 (CN) 與伺服器電腦的主機名稱或完整網域名稱 (FQDN) 是相同的。 使用主機名稱時,必須在憑證中指定 DNS 尾碼。 如果 SQL Server 是在容錯移轉叢集上執行,則一般名稱必須符合虛擬伺服器的主機名稱或 FQDN,且容錯移轉叢集中的所有節點都必須提供憑證。

  • SQL Server 2008 R2 和 SQL Server 2008 R2 Native Client (SNAC) 支援萬用字元憑證。 SNAC 已淘汰,並已替換成 Microsoft OLE DB Driver for SQL ServerMicrosoft ODBC Driver for SQL Server。 其他用戶端可能不支援萬用字元憑證。

    • 無法使用 SQL Server 組態管理員來選取萬用字元憑證。 若要使用萬用字元憑證,您必須編輯 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib 登錄機碼,在 [憑證] 值輸入不含空格的憑證指紋。

    警告

    不當編輯登錄可能會造成系統嚴重受損。 在變更登錄之前,我們建議您備份電腦上的所有重要資料。

在單一伺服器上安裝

SQL Server 2019 (15.x) ,憑證管理會整合到SQL Server 組態管理員。 SQL Server 組態管理員 SQL Server 2019 (15.x) 可以搭配舊版SQL Server使用。 請參閱憑證管理 (SQL Server 組態管理員) ,在單一SQL Server實例上新增憑證。

如果使用 SQL Server 2012 (11.x) 到 SQL Server 2017 (14.x) ,SQL Server 組態管理員 SQL Server 2019 (15.x) 無法使用,請遵循下列步驟:

  1. 在 [ 開始] 功能表上,選取 [ 執行],然後在 [ 開啟 ] 方塊中輸入 MMC ,然後選取 [ 確定]。

  2. 在 MMC 主控台的 [ 檔案 ] 功能表上,選取 [ 新增/移除嵌入式管理單元]。

  3. 在 [ 新增/移除嵌入式管理單元] 對話方塊中,選取 [ 新增]。

  4. 在 [ 新增獨立嵌入式管理單元] 對話方塊中,選取 [ 憑證],選取 [ 新增]。

  5. 在 [ 憑證嵌入式管理單元] 對話方塊中,選取 [ 電腦帳戶],然後選取 [ 完成]。

  6. 在 [ 新增獨立嵌入式管理單元 ] 對話方塊中,選取 [ 關閉]。

  7. 在 [ 新增/移除嵌入式管理單元 ] 對話方塊中,選取 [ 確定]。

  8. 在 [ 憑證 ] 嵌入式管理單元中,依序展開 [ 憑證]、[ 個人] 和 [ 憑證],然後以滑鼠右鍵按一下 [ 所有工作],然後選取 [ 匯入]。

  9. 以滑鼠右鍵按一下匯入的憑證,指向 [ 所有工作],然後選取 [ 管理私密金鑰]。 在 [安全性] 對話方塊中,新增 SQL Server 服務帳戶所使用之使用者帳戶的讀取權限。

  10. 完成 [憑證匯入精靈] 以加入憑證至電腦中,然後關閉 MMC 主控台。 如需新增憑證至電腦的詳細資訊,請參閱 Windows 文件集。

重要

針對生產環境,建議從憑證授權單位取得信任的憑證。
基於測試目的,也可使用自我簽署憑證。 若要建立自我簽署憑證,請參閱 Powershell Cmdlet New-SelfSignedCertificatecertreq 命令

跨多部伺服器安裝

SQL Server 2019 (15.x) ,憑證管理會整合到SQL Server 組態管理員。 SQL Server 組態管理員 SQL Server 2019 (15.x) 可以搭配舊版SQL Server使用。 請參閱憑證管理 (SQL Server 組態管理員),以在容錯移轉叢集設定或可用性群組設定中新增憑證。

如果使用 SQL Server 2012 (11.x) 到 SQL Server 2017 (14.x) ,且SQL Server 組態管理員SQL Server 2019 (15.x) 無法使用,請遵循在每部伺服器上布建 (安裝) 憑證一節中的步驟。

匯出伺服器憑證

  1. 從 [憑證] 嵌入式管理單元中,找出 [憑證個人] 資料夾中的憑證,以滑鼠按右鍵 [憑證 / ],指向 [所有工作],然後選取 [匯出]。

  2. 完成 [憑證匯出精靈] ,並將憑證檔儲存在方便取得的位置。

設定伺服器

設定伺服器強制加密連線。

重要

SQL Server服務帳戶必須具有用來強制加密SQL Server憑證的讀取權限。 針對不具有特殊權限的服務帳戶,則必須將讀取權限新增至憑證。 若不進行此操作,可能會導致 SQL Server 服務重新啟動失敗。

  1. [SQL Server 組態管理員] 中,展開[SQL Server網路組態],以滑鼠右鍵按一下[伺服器實例 > 的 <通訊協定],然後選取 [屬性]。

  2. 在 [實例名稱 > 的通訊 <協定內容] 對話方塊的 [憑證] 索引標籤上,從 [憑證] 方塊的下拉式清單中選取所需的憑證,然後選取 [確定]。

  3. 在 [ 旗標] 索引標籤[ForceEncryption ] 方塊中,選取 [ ],然後選取 [ 確定 ] 以關閉對話方塊。

  4. 重新啟動 SQL Server 服務。

注意

若要確保用戶端與伺服器之間的安全連線,請設定用戶端要求加密連線。 本文稍後會說明其他詳細資料。

設定用戶端

設定用戶端要求加密連線。

  1. 將原始憑證或匯出的憑證檔複製到用戶端電腦。

  2. 在用戶端電腦上,使用 [憑證] 嵌入式管理單元安裝根憑證或匯出的憑證檔。

  3. 使用SQL Server 組態管理員,以滑鼠右鍵按一下[設定SQL Server Native Client],然後選取 [屬性]。

  4. 在 [ 旗標] 頁面的 [ 強制通訊協定加密 ] 方塊中,選取 [ ]。

使用 SQL Server Management Studio

從 SQL Server Management Studio 加密連線:

  1. 在物件總管工具列上,選取 [連線],然後選取[Database Engine]。

  2. 在 [ 連接到伺服器 ] 對話方塊中,完成連線資訊,然後選取 [ 選項]。

  3. 在 [ 連線屬性] 索引 標籤上,選取 [ 加密連線]。

網際網路通訊協定安全性 (IPSec)

SQL Server資料可以使用 IPSec 在傳輸期間加密。 IPSec 是由用戶端和伺服器作業系統所提供,不需要SQL Server設定。 如需有關 IPSec 的詳細資訊,請參閱 Windows 或網路文件。

後續步驟