設定 SSL 使用的憑證
對於安全通訊端層 (SSL) 通訊而言,HTTP 伺服器必須針對適用於 SSL 的每個通訊端 (IP 位址/通訊埠組合),進行憑證的註冊。您必須取得憑證的權限,才能進行伺服器驗證。您可以從憑證發行單位 (如 Verisign) 取得 SSL 憑證,若為測試之用,則可以使用工具自行發行及建立憑證。
無論您是取得憑證或自行發行憑證,該憑證都必須註冊於伺服器中。建議您使用「HTTP 組態公用程式」(HttpCfg.exe) 來註冊、查詢及刪除 SSL 憑證。
註冊 SSL 憑證
若要註冊憑證,請使用下列命令:
httpcfg set ssl /iIP:Port**/hHash/g**Guid
Arguments
- IP:Port
對其註冊憑證的 IP 位址與通訊埠組合。
Hash
憑證雜湊。附註: 憑證雜湊可從憑證存放區取得。您可以使用「憑證」嵌入式管理單元或命令列工具 (如 CertUtil) 加以檢視。
- Guid
GUID 字串,用以識別註冊憑證的實體。最佳作法就是為每個 SQL Server 2005 執行個體建立一個 GUID,並針對該執行個體所進行的所有憑證註冊使用相同的 GUID。
為 IP:Port 註冊 SSL 憑證,會影響接聽該 IP:Port 的所有應用程式。例如,若 SQL Server 2005 執行個體與其他應用程式 (如 IIS) 都在相同的 IP:Port (10.0.0.1:80) 上進行接聽,則為 10.0.0.1:80 註冊 SSL 憑證的 SQL Server 執行個體將會影響 IIS。而 IIS 與 SQL Server 執行個體將必須共用同一個通用憑證。這是核心模式 HTTP 驅動程式 (Http.sys) 的限制。當 Http.sys 在 IP:Port 10.0.0.1:80 上收到要求時,由於要求已加密,因此 Http.sys 無法檢查 URL 以判定要求是屬於 SQL Server 還是 IIS。Https.sys 只能在要求解密後予以路由。因此,它無法針對在相同 IP:Port 上進行接聽的不同應用程式使用不同的 SSL 憑證。
範例
以下是註冊憑證的範例:
httpcfg set ssl /i 10.0.0.1:80 /h 2c8bfddf59a4a51a2a5b6186c22473108295624d
/g "{2bb50d9c-7f6a-4d6f-873d-5aee7fb43290}"
查詢憑證
若要檢視所有已註冊的憑證,請使用下列命令:
httpcfg query ssl
若要檢視單一憑證,請使用 /i 選項:
httpcfg query ssl /iIP:Port
Arguments
- IP:Port
為其查詢憑證的 IP 位址與通訊埠組合。
範例
httpcfg query ssl
httpcfg query ssl /I 10.0.0.1:80
刪除 SSL 憑證
若要刪除憑證,請使用 /i 選項,如下所示:
httpcfg delete ssl /iIP:Port
Arguments
- IP:Port
為其刪除憑證的 IP 位址與通訊埠組合。
範例
httpcfg delete ssl /i 10.0.0.1:80
取得憑證
您可以從憑證授權單位 (如 Verisign) 取得 SQL Server 2005 所需的憑證,使其得以與網際網路型用戶端進行 SSL 通訊。
但若是測試之用,您可使用名為 MakeCert.exe 的工具建立測試憑證。MakeCert.exe 屬於 Microsoft .NET Framework SDK 的一部份。Platform SDK 中也可以使用 MakeCert.ext。若要下載 SDK,請分別造訪 Microsoft .NET Framework 開發人員中心與 Microsoft 下載中心。MakeCert.exe 會建立 X.509 憑證。它可建立數位簽章的公開與私密金鑰組,並將其儲存在憑證檔案中。這項工具也可以建立金鑰組與指定發行者之間的關聯,並建立 X.509 憑證,以繫結使用者指定的名稱與金鑰組的公開部份。
若要為回應主機名稱 (MySQLServer) 的伺服器建立 SSL 憑證,您可以使用下列選項來執行 MakeCert:
makecert -r -pe -nCN="MySQLServer"-eku1.3.6.1.5.5.7.3.1-ssmy-srlocalmachine
-skyexchange-sp"Microsoft RSA SChannel Cryptographic Provider"-sy12
命令列參數
- -r
建立自簽憑證。自簽憑證是指並非由憑證授權單位簽署的憑證。由於此憑證並非由授權憑證單位簽署,因此可用在 SSL 所需的加密作業,但無法用於伺服器驗證。
- -n
指定伺服器名稱。此名稱必須符合 X.500 標準。最簡單的方式就是將名稱指定在雙引號中,並在前面加上 CN=。
- -eku
在憑證中指定增強型金鑰用法物件識別碼 (OID) 的逗號分隔清單。針對 SQL Server 2005,需要有對於 OID 為 1.3.6.1.5.5.7.3.1 (szOID_PKIX_KP_SERVER_AUTH) 之伺服器驗證而言有效的 SSL 憑證。
- -ss
指定儲存已建立憑證的憑證存放區。雖然憑證可儲存在憑證存放區的任何地方,但還是建議您將其儲存在 my 存放區中。
- -sr
指定用來放置憑證的憑證存放區。這個位置可以是:currentuser (預設值) 或 localmachine。由於此憑證是針對服務而建立,因此應放在本機電腦上。
- -sky
指定憑證金鑰類型。這必須是 signature、exchange 或整數 (例如 4)。若是 RSA 公開金鑰交換演算法,在此則必須為 exchange。這是用來加密及解密工作階段金鑰的金鑰類型。
- -sp
指定 CryptoAPI 提供者名稱。對於為 SQL Server 建立的憑證而言,可將此名稱設為 Microsoft RSA SChannel Cryptographic Provider。
- -sy
指定 CryptoAPI 提供者類型。若提供者為 Microsoft RSA SChannel Cryptographic Provider,類型即為 12。
其他命令列參數
- -b
以 mm/dd/yyyy 格式表示的日期值,指定憑證有效期間的開始日期。其預設值為憑證的建立日期。
- -e
以 mm/dd/yyyy 格式表示的日期值,指定憑證有效期間的結束日期。其預設值為 12/31/2039 11:59:59 GMT,除非另有設定。
範例
以下範例顯示如何使用 MakeCert 與其他選項來建立憑證。
makecert -r -pe -n "CN= MySQLServerName" -b 01/01/2000 -e 01/01/2036
-eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange
-sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
建立憑證後,您可以從憑證的 MMC 或使用 CertUtil 之類的工具,來取得其雜湊。若使用 CertUtil,您可列出剛才建立的憑證。
C:\>certutil -store "my" "MySQLServerName"
================ Certificate 2 ================
Serial Number: e302d3a7a831c9884c0dd736f24825e6
Issuer: CN=MySQLServerName
Subject: CN=MySQLServerName
Signature matches Public Key
Root Certificate: Subject matches Issuer
Cert Hash(sha1): d2 2f 9a 7f 18 cb ed 13 a1 3e be e5 32 69 6c 4b ad ba b9 30
Key Container = 956cbc46-f005-4aeb-b521-7c313f2ccd10
Provider = Microsoft RSA SChannel Cryptographic Provider
Encryption test passed
CertUtil: -store command completed successfully.
從執行 CertUtil 的結果所取得的雜湊可傳遞至 Httpcfg.exe 工具,以便註冊自簽憑證。
在使用 MakeCert 建立自簽 SSL 憑證,並將其註冊於 Http.sys 之前,請查看電腦是否已安裝 IIS。IIS 所提供的精靈可讓您更輕鬆地進行 SSL 憑證的註冊。因此,若電腦上已安裝 IIS,則 SSL 憑證可能已註冊於 Http.sys。若尚未註冊,您可以使用 IIS 精靈來建立及註冊憑證。
由於 SSL 憑證對整部電腦都具有效力,因此 IIS 是否用來註冊 SQL Server 2005 所要使用的憑證並不重要。
考量因素
- 解除安裝 SQL Server 2005 執行個體時,使用 Httpcfg.exe 所建立的 SSL 憑證繫結仍會保留,除非您手動加以刪除。因為這些設定並非使用 SQL Server 安裝程式所建立,所以不會隨之移除。因此,若已解除安裝 SQL Server 執行個體,則必須同時移除這些繫結。
- 雖然在 SQL Server 2005 中使用 SSL over HTTP 時不需要有 IIS,但在 IIS 隨著 SQL Server 執行個體而安裝之後,HTTP SSL 服務即會連結至 IIS 用法。例如,若您在命令提示字元處使用 net stop iisadmin 停止 IIS 時,IIS 也會停止 HTTP SSL 服務。此外,當您在 Windows 下安裝 IIS 後,您必須同時啟動 IIS (Inetinfo.exe),才可啟動 HTTP SSL 服務。