2012年3月19日 星期一

如何啟用SQL Server的SSL加密

        資料庫中通常包含了許多的重要資料,由於個人資料保護法的通過後,資料的保護更是重要,雖然資料庫大部份是放置在防火牆之後,較少被外部的人直接進行資料的存取,藉以減少資料竊取的可能性,但是在防火牆內仍有可能被透過封包監控的方式,進行資料的捉取,造成資料的外洩,所以這時候如果真的想對資料進一步的保護時,可以透過啟用SSL的方式藉以保護資料,當然啟用前還是要考慮資料傳輸上的負載,因為SSL會將原本的資料編碼,所以在傳輸時會造成資料量變大,而加密時 Key 的長度越長資料傳輸量就會更多,所以本篇,我們就來介紹如何設定SQL Server啟用SSL的方式。

1、產生測試用的SSL憑證(如果已有憑證時,可跳過此步驟):
在設定前我們需要先行申請一張SSL憑證,而此憑證通常是由第三方所發送出的,由於大家也往往會卡在這個地方,所以在測試上,我們可以先行產生一張測試用的SSL憑證,我們可以透過Windows SDK 內建的一個程式 (makecert.exe) 產生SSL的憑證。

1-1 MakeCert檔案下載
由於我有安裝Visual Studio 2010與 .NET Framework,所以檔案是放置在我的下列目錄中。
檔案路徑:C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\makecert.exe

MakeCert 下載位置:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa386968(v=vs.85).aspx 

1-2 產生憑證
接下來我們來透過 MakeCert.exe 的程式來產生一個測試用的SSL憑證,由於SQL Server對於SSL的憑證有一些特別的要求,所以設定前請依照下列的方式進行。

請開啟一個 DOS 視窗,切換目錄到此檔案的路徑後,輸入下列的指令,完成後此憑證即會自動匯入 [憑證 – 目前的使用者] -> [個人] -> [憑證]之中。
makecert -r -pe -n "CN=SQL2012-RTM.caryhsu.com" -b 03/16/2012 -e 03/15/2016 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr currentuser -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

PS:
  • 上述的指令,請記錄修改日期的部份與CN後面的名稱,SQL2012-RTM是我的電腦名稱,而caryhsu.com是我的domain name。
  • 如果目前的帳號並非你的SQL Server啟動帳號時,請依照下列的動作將憑證先行匯出,然後再匯入到[憑證 (本機電腦)] -> [個人] -> [憑證]之中即可(請記得此步驟需要連同私密金鑰也一起匯出)。
  • 憑證的要求條件,請參考連結 [Encrypting Connections to SQL Server]。


  • 2、設定SQL SERVER端的通訊協定。

    2-1 請點選 [開始] -> [所有程式] -> [Microsoft SQL Server 2012] -> [組態工具] -> [SQL Server Configuration Manager] -> [SQL Server 網路組態] -> [MSSQLSERVER的通訊設定] -> [內容]

    2-2 切換到 [憑證] 之後,你可以在憑證的清單中看到剛剛產生憑證,此時選擇此憑證即可。

    2-3 切換到 [旗標],此時請將強制加密設定為 [是],然後選擇 [確定]。
    PS:此處的加密主要是強制性對所有的 SQL Server 連線進行加密,如果此部份選擇為 [否] 的時,則決定於client是否啟用加密模式進行連線。

    2-4 設定完成後,你必須重新啟動SQL Server Service。


    3、驗證與測試SQL Server SSL的啟用是否正常。

    3-1 重新啟動後,請確認SQL Server Error Log是否有下列的資訊。
    The certificate [Cert Hash(sha1) “431786DB0D1CC78DEEEB3A4B5F0C31A541DE1C951”] was successfully loaded for encryption.
    PS:中間的亂碼主要是此張憑證的憑證指紋,如下表所示。



    3-2 測試連線是否有啟用SSL。
    在目前為止我們並沒有設定Client連線的部份,那是否SSL已有啟用,但由於我們在 2-3 中已有設定 [強制加密] ,所以Client端可以不需要進行設定,因為Server會強制對所有的連線進行加密。

    由於要觀察Server與Client端的通訊模式,所以我們在此透過網路封包捉取的方式進行監測,如果如下:


    PS:封包捉取的軟體非常多,在此我是透過官方提供的 Microsoft Network Monitor 進行,下載網址如下:
    Microsoft Network Monitor 3.4
    http://www.microsoft.com/download/en/details.aspx?id=4865



    參考連結:
    Enabling Certificate for SSL on a SQL Server 2005 Clustered Installation
    http://blogs.msdn.com/b/jorgepc/archive/2008/02/19/enabling-certificates-for-ssl-connection-on-sql-server-2005-clustered-installation.aspx
    SQL Server fails to start with error 17182 "TDSSNIClient initialization failed with error 0xd, status code 0x38" when server is configured to use SSL
    http://support.microsoft.com/kb/2023869
    如何啟用 SQL Server 的執行個體的 SSL 加密,使用 Microsoft 管理主控台
    http://support.microsoft.com/kb/316898
    Encrypting Connections to SQL Server
    http://msdn.microsoft.com/en-us/library/ms189067.aspx
    憑證建立工具 (Makecert.exe)
    http://msdn.microsoft.com/zh-tw/library/bfsktky3(v=vs.80).aspx
    How-to use MakeCert for trusted root certification authority and SSL certificate issuance
    http://blogs.technet.com/b/jhoward/archive/2005/02/02/365323.aspx
    如何:啟用 Database Engine 的加密連接 (SQL Server 組態管理員)
    http://technet.microsoft.com/zh-tw/library/ms191192.aspx
    How to enable SSL encryption for SQL Server 2000 if you have a valid Certificate Server
    http://support.microsoft.com/kb/276553/en-us


    關鍵字:SQL ServerSSLCertificateEncryptionSecure Sockets LayerMakeCert

    沒有留言:

    張貼留言