加密 SQL Server 的連接

SQL Server 支援安全通訊端層 (SSL),並且與網際網路通訊協定安全性 (IPSec) 相容。

安全通訊端層 (SSL)

Microsoft SQL Server 可以使用安全通訊端層 (SSL) 來加密 SQL Server 執行個體與用戶端應用程式之間透過網路傳輸的資料。SSL 加密會在通訊協定層內執行,且可供 DB Library 和 MDAC 2.53 以外的所有 SQL Server 用戶端使用。

SSL 可以在用戶端連接要求加密時用來驗證伺服器。如果 SQL Server 執行個體在已取得公開憑證授權單位指派之憑證的電腦上執行,導向受信任之根授權單位的憑證鏈結便可擔保該電腦及 SQL Server 執行個體的身分。在這種伺服器驗證中,必須將執行用戶端應用程式的電腦設定成信任伺服器使用之憑證的根授權單位。可以搭配自我簽署憑證來使用加密,下節將做說明,但自我簽署憑證所提供的保護有限。

SSL 使用的加密等級 (40 位元或 128 位元) 視應用程式和資料庫電腦上執行的 Microsoft Windows 作業系統版本而定。

對於在 SQL Server 和應用程式之間網路上傳送的資料,啟用 SSL 加密可提高其安全性。不過,啟用加密確實會減緩效能。使用 SSL 加密 SQL Server 與用戶端應用程式之間所有的網路傳輸時,需要下列額外的處理:

  • 在連接時需要額外的網路往返作業。

  • 從應用程式傳送到 SQL Server 執行個體的封包必須利用用戶端網路程式庫來加密,並使用伺服器網路程式庫來解密。

  • 從 SQL Server 執行個體傳送到應用程式的封包必須利用伺服器網路程式庫來加密,並使用用戶端網路程式庫來解密。

設定 SQL Server 的 SSL

下列程序描述如何設定 SQL Server 的 SSL。

若要設定 SSL

  1. 將憑證安裝在伺服器電腦的 Windows 憑證存放區中。

  2. 按一下 [開始],並在 [Microsoft SQL Server] 程式群組中指向 [組態工具],然後按一下 [SQL Server 組態管理員]

  3. 展開 [SQL Server 網路組態],並以滑鼠右鍵按一下所需的伺服器通訊協定,然後按一下 [屬性]

    [!附註]

    這是工具左窗格內的 [<instance_name> 的通訊協定] 區段,而不是右窗格中的特定通訊協定。

  4. [憑證] 索引標籤上,將 Database Engine 設定為使用憑證。

  5. [旗標] 索引標籤上,檢視或指定通訊協定加密選項。登入封包一律加密。

    • 當 Database Engine 的 [ForceEncryption] 選項設定為 [是] 時,所有用戶端/伺服器通訊都會加密,而無法支援加密的用戶端將遭到拒絕存取。

    • 當 Database Engine 的 [ForceEncryption] 選項設定為 [否] 時,用戶端應用程式可以要求加密,但不是必要的。

    • 變更 [ForceEncryption] 設定之後必須重新啟動 SQL Server。

    在用戶端應用程式連接 SQL Server 時傳輸的認證 (在登入封包中) 一律加密。SQL Server 將會使用來自受信任之憑證授權單位的憑證 (如果有的話)。如果沒有安裝信任的憑證,SQL Server 將會在執行個體啟動時產生自我簽署憑證,並使用自我簽署憑證來加密認證。這個自我簽署的憑證有助於提高安全性,但是並不會對抗伺服器的識別詐騙。如果使用自我簽署憑證,且 [ForceEncryption] 選項的值設為 [是],則 SQL Server 和用戶端應用程式之間透過網路傳輸的所有資料都將使用自我簽署憑證來加密。

    警告注意事項注意

    使用自我簽署憑證來加密的 SSL 連接不提供強式安全性。此方式可能遭受攔截式攻擊 (man-in-the-middle attack) 的威脅。在實際執行環境或連接到網際網路的伺服器上,您不應該仰賴使用自我簽署憑證的 SSL。

憑證需求

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

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

  • 目前的系統時間必須介於憑證的 Valid from 屬性和憑證的 Valid to 屬性之間。

  • 憑證必須是為了伺服器驗證而準備的。因此,憑證的 Enhanced Key Usage 屬性必須指定 Server Authentication (1.3.6.1.5.5.7.3.1)

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

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

  • SQL Server 2008 R2 和 SQL Server 2008 R2 Native Client 支援萬用字元憑證。其他用戶端可能不支援萬用字元憑證。如需詳細資訊,請參閱用戶端文件集和 KB258858 (機器翻譯)。

SQL Server Native Client 憑證需求

搭配憑證使用 "SERVER=shortname; ENCRYPT=yes" (該憑證的主旨會指定完整網域名稱 (FQDN)) 的應用程式在過去因為寬鬆的驗證所以可以連接。SQL Server 2008 R2 藉由強制施行憑證的主旨完全相符來增強安全性。依賴寬鬆驗證的應用程式必須採取下列其中一項動作:

  • 使用連接字串中的 FQDN。

    • 如果在應用程式外面設定連接字串的 SERVER 關鍵字,這個選項就不需要重新編譯應用程式。

    • 如果是以硬式編碼方式編寫連接字串的應用程式,便無法使用這個選項。

    • 使用資料庫鏡像的應用程式無法使用這個選項,因為鏡像伺服器是以簡單名稱回覆。

  • 加入簡短名稱的別名來對應至 FQDN。

    • 即使是以硬式編碼方式編寫連接字串的應用程式,還是可以使用這個選項。

    • 使用資料庫鏡像的應用程式無法使用這個選項,因為提供者不會尋找接收之容錯移轉夥伴名稱的別名。

  • 擁有針對簡短名稱發出的憑證。

    • 這個選項適用於所有應用程式。

叢集的加密

如果您想要在容錯移轉叢集中使用加密功能,則必須使用容錯移轉叢集執行個體的完整 DNS 名稱,在容錯移轉叢集中的所有節點上安裝伺服器憑證。例如,如果您有一個叢集,內含兩個節點,分別稱為 test1.您的公司.comtest2. 您的公司.com,還有名為 fcisql 的 SQL Server 的容錯移轉叢集執行個體,則必須取得 fcisql.您的公司.com 的憑證,並將該憑證安裝在兩個節點上。若要設定容錯移轉叢集以進行加密,您可以接著在 [SQL Server 網路組態][<伺服器> 的通訊協定] 屬性方塊上,選取 [ForceEncryption] 核取方塊。

Internet Protocol Security (IPSec)

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