如何在 IIS 7 或更新版本上設定 SSL

Saad Ladki

簡介

為月臺設定安全通訊端層 (SSL) 的步驟在 IIS 7 和更新版本和 IIS 6.0 中相同,並包含下列各項:

  • 取得適當的憑證。
  • 在月臺上建立 HTTPS 系結。
  • 向網站提出要求以進行測試。
  • 選擇性地設定 SSL 選項,也就是讓 SSL 成為需求。

本檔提供 SSL 的一些基本資訊,然後示範如何以下列方式啟用 SSL:

  • 使用 IIS 管理員。
  • 使用 AppCmd.exe 命令列工具。
  • 透過 Microsoft.Web.Administration 以程式設計方式。
  • 使用 WMI 腳本。

本文包含下列各節:

SSL 組態

無論您是在自己的伺服器上或 雲端中執行您的網站,使用 SSL 來保護您的網站可能非常重要,因為許多網站都會將其轉換成以保護使用者的隱私權。 如果您需要在伺服器上設定 SSL,請務必瞭解 SSL 的實作已從 IIS 6.0 變更為 IIS 7 和更新版本。 在 Windows Server 2003 上的 IIS 6.0 中,所有 SSL 設定都儲存在 IIS 中繼基底中,而加密/解密發生在使用者模式中, (需要大量核心/使用者模式轉換) 。 在 IIS 7 和更新版本中,HTTP.sys在核心模式中處理 SSL 加密/解密,因此在 IIS 7 和更新版本中,安全連線在 IIS 7 和更新版本中,最多有 20% 的效能優於 IIS 6.0 中遇到的連線。

在核心模式中使用 SSL 需要將 SSL 系結資訊儲存在兩個位置。 首先,系結會儲存在網站的 %windir%\System32\inetsrv\config\applicationHost.config中。 月臺啟動時,IIS 會將系結傳送至HTTP.sys,HTTP.sys開始接聽指定 IP:Port (此動作適用于所有系結) 。 其次,與系結相關聯的 SSL 組態會儲存在HTTP.sys組態中。 在命令提示字元使用 netsh 命令來檢視儲存在 HTTP.sys 中的 SSL 系結組態,如下列範例所示:

netsh http show sslcert

當用戶端連線並起始 SSL 交涉時,HTTP.sys在其 SSL 組態中尋找用戶端所連線的 IP:Port 配對。 HTTP.sys SSL 設定必須包含憑證雜湊和憑證存放區的名稱,SSL 交涉才會成功。

疑難排解提示: 如果您在 SSL 系結時遇到問題,請確認系結已在ApplicationHost.config中設定,而且HTTP.sys存放區包含系結的有效憑證雜湊和存放區名稱。

選擇憑證

選擇憑證時,請考慮下列事項:您希望終端使用者能夠使用您的憑證來驗證服務器的身分識別嗎? 如果是,請建立憑證要求,並將該要求傳送至已知憑證授權單位單位, (CA) 例如 VeriSign 或 GeoTrust,或從內部網路網域的線上 CA 取得憑證。 瀏覽器通常會在伺服器憑證中驗證三件事:

  1. 目前的日期和時間在憑證的「有效期限自」和「有效期限至」日期範圍內。
  2. 憑證的「一般名稱」(CN) 符合要求中的主機標頭。 例如,如果用戶端提出 https://www.contoso.com/ 要求,則 CN 必須是 www.contoso.com
  3. 憑證的簽發者是已知且受信任的 CA。

如果其中一或多個檢查失敗,瀏覽器會提示使用者發出警告。 如果您有一個網際網路網站或內部網路網站,其中您的終端使用者不是您個人知道的人員,則應該一律確保這三個參數有效。

自我簽署憑證是在您的電腦上建立的憑證。 在使用者信任您的伺服器,例如測試環境,這對使用者而言並不重要。

使用 AppCmd

您無法使用 AppCmd.exe 來要求或建立憑證。 您也無法使用AppCmd.exe來建立 SSL 系結。

設定 SSL 設定

您可以使用 AppCmd.exe,藉由修改 Access 區段中的 sslFlags 屬性,將月臺設定為只接受伺服器 HTTPS 連線。 例如,您可以使用下列命令,在ApplicationHost.config檔案 (中設定「預設網站」的這項設定,例如 commitPath:APPHOST) :

%windir%\system32\inetsrv>AppCmd set config "Default Web Site" -commitPath:APPHOST -section:access -sslFlags:Ssl

如果成功,會顯示下列訊息:

Applied configuration changes to section "system.webServer/security/access" for "MACHINE/WEBROOT/APPHOST/Default Web Site" at configuration commit path "MACHINE/WEBROOT/APPHOST"

注意

若要要求 128 位 SSL,請將 sslFlags 值變更為 Ssl128

下列範例示範如何檢視 < 預設網站的存取/ > 區段設定。 已成功設定 sslFlags屬性。

%windir%\system32\inetsrv>AppCmd list config "Default Web Site" -section:access

執行 命令會導致ApplicationHost.config檔案中的下列專案:

<system.webServer>
  <security>
    <access flags="Script, Read" sslFlags="Ssl" />
  </security>
</system.webServer>

使用 WMI

您無法使用 WebAdministration WMI 命名空間來要求或建立憑證。

建立 SSL 系結

下列腳本示範如何建立新的 SSL 系結,以及如何為 HTTP.sys 和 IIS 新增適當的組態:

Set oIIS = GetObject("winmgmts:root\WebAdministration")
'''''''''''''''''''''''''''''''''''''''''''''
' CREATE SSL BINDING
'''''''''''''''''''''''''''''''''''''''''''''

oIIS.Get("SSLBinding").Create _ 
   "*", 443, "4dc67e0ca1d9ac7dd4efb3daaeb15d708c9184f8", "MY"
'''''''''''''''''''''''''''''''''''''''''''''
' ADD SSL BINDING TO SITE
'''''''''''''''''''''''''''''''''''''''''''''

Set oBinding = oIIS.Get("BindingElement").SpawnInstance_
oBinding.BindingInformation = "*:443:"
oBinding.Protocol = "https"

Set oSite = oIIS.Get("Site.Name='Default Web Site'")
arrBindings = oSite.Bindings

ReDim Preserve arrBindings(UBound(arrBindings) + 1)
Set arrBindings(UBound(arrBindings)) = oBinding

oSite.Bindings = arrBindings
Set oPath = oSite.Put_

注意

憑證雜湊和存放區必須參考您伺服器上的實際功能憑證。 如果憑證雜湊和/或存放區名稱很假,則會傳回錯誤。

設定 SSL 設定

下列腳本示範如何使用 IIS WMI 提供者來設定 SSL 設定。 您可以在 IIS_Schema.xml 檔案中找到此值。

CONST SSL = 8  
Set oIIS = GetObject("winmgmts:root\WebAdministration")  
Set oSection = oIIS.Get(\_  
 "AccessSection.Path='MACHINE/WEBROOT/APPHOST',Location='Default Web Site'")  
oSection.SslFlags = oSection.SslFlags OR SSL  
oSection.Put\_ <a id="IISManager"></a>

IIS 管理員

取得憑證

選取樹狀檢視中的伺服器節點,然後按兩下 listview 中的 [伺服器憑證] 功能:
已選取 [伺服器憑證] 的 ALEXIS E 3 L H 伺服器節點 [首頁] 螢幕擷取畫面。

按一下 [動作] 窗格中的 [建立Self-Signed憑證...]。
[伺服器憑證動作] 窗格的螢幕擷取畫面,其中強調 [建立自我簽署憑證]。

輸入新憑證的易記名稱,然後按一下 [ 確定]。

現在您有自我簽署憑證。 憑證標示為「伺服器驗證」使用;也就是說,它會使用 做為 HTTP SSL 加密的伺服器端憑證,以及驗證服務器的身分識別。

建立 SSL 系結

在樹狀檢視中選取網站,然後按一下 [動作] 窗格中的 [系結...]。 這會顯示系結編輯器,可讓您建立、編輯和刪除網站的系結。 按一下 [新增...] 將新的 SSL 系結新增至網站。

[網站系結] 對話方塊的螢幕擷取畫面,其中包含一個預設網站系結。

新系結的預設設定會設定為埠 80 上的 HTTP。 在 [類型]下拉式清單中選取[HTTPs]。 從 [ SSL 憑證 ] 下拉式清單中選取您在上一節中建立的自我簽署憑證,然後按一下 [ 確定]。

[新增網站系結] 對話方塊的螢幕擷取畫面,其中 [類型] 設定為 [H T P S] 和 [S S L 憑證] 設定為 [測試憑證]。

現在,您的網站上有新的 SSL 系結,而剩下的一切都是確認它是否正常運作。
[網站系結] 對話方塊的螢幕擷取畫面,其中包含 H T T P 和 H T P S 系結。

確認 SSL 系結

在 [動作] 窗格的 [流覽網站] 下,按一下與您剛才建立之系結相關聯的連結。
[動作] 窗格的 [流覽網站] 區段螢幕擷取畫面,其中已強調流覽星號冒號 443 或 H T T P S。

Internet Explorer (IE) 7 和更新版本會顯示錯誤頁面,因為自我簽署憑證是由您的電腦所發行,而不是由受信任的憑證授權單位單位 (CA) 。 如果您將憑證新增至證書授權單位清單中,則 IE 7 和更新版本會信任憑證,並將憑證儲存在本機電腦上,或網域的群組原則。 按一下 [繼續瀏覽此網站 (不建議)]
Internet Explorer 的螢幕擷取畫面,其中顯示安全性憑證錯誤。建議不要) 強調此網站 (。

設定 SSL 設定

如果您想要您的網站需要 SSL,或以特定方式與用戶端憑證互動,請設定 SSL 設定。 按一下樹狀檢視中的網站節點,返回網站的首頁。 按兩下中間窗格中的 [SSL 設定] 功能。

[S S L 設定] 窗格的螢幕擷取畫面,其中需要 S S L 並忽略用戶端憑證。

摘要

在本逐步解說中,我們已成功使用命令列工具AppCmd.exe、腳本提供者 WMI 和 IIS 管理員,在 IIS 上設定 SSL。