共用方式為


Windows 擴充保護 <extendedProtection>

概觀

元素 <extendedProtection> 會指定設定 IIS 7.5 中Windows 驗證擴充保護的設定。

擴充保護可增強現有的Windows 驗證功能,以減輕驗證轉送或「中間人」攻擊。 這項風險降低是使用透過兩種安全性機制實作的安全性資訊來完成:

  • 透過通道系結權杖指定的通道系結資訊 (CBT) ,主要用於 SSL 連線。
  • 透過服務主體名稱 (SPN) 指定的服務系結資訊,主要用於不使用 SSL 的連線,或透過提供 SSL 卸載的案例建立連線時,例如 Proxy 伺服器或負載平衡器。

元素 <extendedProtection> 可能包含專案的 <spn> 集合,每個元素都包含服務系結資訊的唯一 SPN。 每個 SPN 都代表連線路徑中的唯一端點,可能是目的地伺服器或 Proxy 伺服器的完整功能變數名稱 (FQDN) 或 NetBIOS 名稱。 例如,如果用戶端透過 Proxy 伺服器連線到目的地伺服器,則目的地伺服器上的 SPN 集合必須包含 Proxy 伺服器的 SPN。 集合中的每個 SPN 都必須加上 「HTTP」,因此 「www.contoso.com」 產生的 SPN 會是 「HTTP/www.contoso.com」。

元素有兩個 <extendedProtection> 屬性可設定通道系結,以及 IIS 擴充保護的其他行為:

  • tokenChecking屬性會設定檢查通道系結權杖的行為。 此屬性的可能值為:

    名稱 描述
    None 這個值會指定 IIS 不會執行通道系結權杖檢查。 此設定會模擬在延伸保護之前存在的行為。

    數值為 0
    Allow 這個值會指定啟用通道系結權杖檢查,但並非必要。 此設定允許與支援擴充保護的用戶端進行安全通訊,但仍支援無法使用擴充保護的用戶端。

    數值為 1
    Require 這個值會指定需要通道系結權杖檢查。 此設定不支援擴充保護的用戶端不支援。

    數值為 2
  • flags屬性會設定擴充保護的其他行為。 可能的旗標如下:

    名稱 描述
    None 此旗標指定未針對擴充保護啟用任何其他行為。 (例如,未使用 Proxy 伺服器且已啟用 SPN 檢查,而且需要 FQDN.)

    數值為 0
    Proxy 此旗標指定通訊路徑的一部分會透過 Proxy,或用戶端透過 HTTP 直接連線到目的地伺服器。

    數值為 1
    NoServiceNameCheck 此旗標指定已停用 SPN 檢查;此旗標不應該用於只檢查 SPN 的案例中。

    數值為 2
    AllowDotlessSpn 此旗標指定 SPN 不需要是 FQDN。 設定此旗標可允許以 NetBIOS 為基礎的 SPN。 注意: 設定此旗標不是安全的案例;非 FQDN 型名稱很容易遭受名稱解析有害攻擊。

    數值為 4
    ProxyCohosting 此旗標指定整個用戶端對伺服器通訊路徑只會使用 HTTP;通訊路徑中沒有任何部分會使用 SSL,而且會使用 SPN 檢查。 注意: 當您指定此旗標時,也必須指定 Proxy 旗標。

    數值為 32

擴充保護案例

請考慮下列範例案例:

  • 在下列每個案例中,如果您的網路環境支援 NetBIOS 型 SPN,您也可以指定 AllowDotlessSpn 旗標;不過,NetBIOS 型 SPN 並不安全。
  • 對於下列每一個使用 SPN 檢查的案例,而且不會使用通道系結權杖檢查,您不應該指定 NoServiceNameCheck 旗標。
狀況 Flags 描述
用戶端會使用 HTTP 直接連線到目的地伺服器 Proxy, ProxyCohosting 將會使用 SPN 檢查,而且不會使用通道系結權杖檢查。
用戶端會使用 SSL 直接連線到目的地伺服器 None 會使用通道系結權杖檢查,而且不會使用 SPN 檢查。
用戶端會針對整個路徑使用 HTTP 透過 Proxy 伺服器連線到目的地伺服器 Proxy, ProxyCohosting 將會使用 SPN 檢查,而且不會使用通道系結權杖檢查。
用戶端會透過使用 SSL 的 Proxy 伺服器連線到目的地伺服器,以取得整個路徑 Proxy 將會使用 SPN 檢查,而且不會使用通道系結權杖檢查。
用戶端會使用 SSL 連線到 Proxy 伺服器,而 Proxy 伺服器會使用 HTTP (SSL 卸載載入連線到目的地伺服器) Proxy 將會使用 SPN 檢查,而且不會使用通道系結權杖檢查。

其他資訊

如需有關擴充保護的詳細資訊,請參閱下列主題:

具有擴充保護的整合式 Windows 驗證

服務主體名稱

相容性

版本 備註
IIS 10.0 未在 IIS 10.0 中修改專案 <extendedProtection>
IIS 8.5 未在 IIS 8.5 中修改專案 <extendedProtection>
IIS 8.0 未在 IIS 8.0 中修改專案 <extendedProtection>
IIS 7.5 元素 <extendedProtection> 是在 IIS 7.5 中引進。
IIS 7.0 N/A
IIS 6.0 N/A

安裝程式

IIS 7 和更新版本的預設安裝不包含Windows 驗證角色服務。 若要在 IIS 上使用Windows 驗證,您必須安裝角色服務、停用網站或應用程式的匿名驗證,然後為網站或應用程式啟用Windows 驗證。

注意

安裝角色服務之後,IIS 7 會將下列組態設定認可至ApplicationHost.config檔案。

<windowsAuthentication enabled="false" />

Windows Server 2012 或 Windows Server 2012 R2

  1. 在工作列上,按一下 [伺服器管理員]
  2. [伺服器管理員] 中,按一下 [管理] 功能表,然後按一下 [新增角色及功能]。
  3. 在 [ 新增角色及功能精 靈] 中,按 [ 下一步]。 選取安裝類型,然後按 [ 下一步]。 選取目的地伺服器,然後按 [ 下一步]。
  4. 在 [ 伺服器角色] 頁面上,依序展開 [ Web 服務器] ([IIS) ]、[ 網頁伺服器]、[ 安全性],然後選取 [ Windows 驗證]。 按一下 [下一步] 。
    [伺服器角色] 頁面的螢幕擷取畫面。已選取並反白顯示 [Windows 驗證] 選項。 .
  5. 在 [選取功能] 頁面上,按 [下一步]
  6. 在 [確認安裝選項] 頁面上,按一下 [安裝]
  7. 在 [結果] 頁面上,按一下 [關閉]

Windows 8 或 Windows 8.1

  1. 在 [開始] 畫面上,將指標全部移至左下角,以滑鼠右鍵按一下 [開始] 按鈕,然後按一下[主控台]。
  2. 主控台中,按一下 [程式和功能],然後按一下 [開啟或關閉 Windows 功能]。
  3. 展開 [Internet Information Services]、[ 萬維網服務]、[ 安全性],然後選取 [ Windows 驗證]。
    [程式和功能] 流覽樹狀結構的螢幕擷取畫面。已選取並醒目提示 [Windows 驗證] 選項。
  4. 按一下 [確定]。
  5. 按一下 [關閉] 。

Windows Server 2008 或 Windows Server 2008 R2

  1. 在工作列上,按一下 [開始],指向 [系統管理工具],然後按一下[伺服器管理員]。
  2. [伺服器管理員階層] 窗格中,展開 [角色],然後按一下 [Web 服務器] (IIS)
  3. [Web 服務器 (IIS) ] 窗格中,捲動至 [ 角色服務 ] 區段,然後按一下 [ 新增角色服務]。
  4. 在 [新增角色服務精靈] 的 [選取角色服務] 頁面上,選取 [Windows 驗證],然後按 [下一步]。
    [選取角色服務] 頁面的螢幕擷取畫面。[安全性] 選項已展開。已選取並醒目提示 [Windows 驗證] 選項。
  5. 在 [確認安裝選項] 頁面上,按一下 [安裝]
  6. 在 [結果] 頁面上,按一下 [關閉]

Windows Vista 或 Windows 7

  1. 在工作列上,按一下 [開始],然後按一下[主控台]。
  2. 主控台中,按一下 [程式和功能],然後按一下 [開啟或關閉 Windows 功能]。
  3. 展開 [Internet Information Services]、[ 萬維網服務]、[ 安全性]。
  4. 選取 [Windows 驗證],然後按一下 [ 確定]。
    [程式和功能] 流覽樹狀結構的螢幕擷取畫面。Windows 驗證已醒目提示並選取。[安全性] 資料夾已展開。

作法

如何啟用Windows 驗證的擴充保護

  1. (IIS) 管理員開啟 Internet Information Services

    • 如果您使用 Windows Server 2012 或 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8 或 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows Server 2008 或 Windows Server 2008 R2:

      • 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
    • 如果您使用 Windows Vista 或 Windows 7:

      • 在工作列上,按一下 [開始],然後按一下[主控台]。
      • 按兩下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
  2. 在 [連線] 窗格中,展開伺服器名稱、[站台],然後展開您要為其啟用 [擴充保護] 的月臺、應用程式或 Web 服務Windows 驗證。

  3. 捲動至 [首頁] 窗格中的 [安全性] 區段,然後按兩下 [驗證]。

  4. 在 [ 驗證] 窗格中,選取 [Windows 驗證]。

  5. 按一下 [動作] 窗格中的 [啟用]。
    [驗證] 頁面的螢幕擷取畫面。Windows 驗證已醒目提示。[動作] 窗格中可以找到 [啟用] 按鈕。

  6. 按一下 [動作] 窗格中的 [進階設定]。

  7. 當 [ 進階設定 ] 對話方塊出現時,請在 [ 擴充保護 ] 下拉式功能表中選取下列其中一個選項:

    • 如果您想要啟用擴充保護,同時為不支援擴充保護的用戶端提供下層支援,請選取 [ 接受 ]。
    • 如果您想要啟用擴充保護而不提供下層支援,請選取 [必要 ]。
      [進階設定] 對話方塊的螢幕擷取畫面。在 [擴充保護] 下拉式功能表中,[接受] 選項會反白顯示。
  8. 按一下 [確定] 以關閉 [進階設定] 對話方塊。

組態

專案 <extendedProtection> 可在ApplicationHost.config檔案的月臺、應用程式或虛擬目錄層級設定。

屬性

屬性 描述
flags 選擇性旗標屬性。

指定擴充保護的其他行為設定。

屬性 flags 可以是下列值的組合;預設值為 None
名稱 描述
None

此旗標會指定未針對擴充保護啟用其他行為。 例如, (未使用 Proxy 伺服器,且已啟用 SPN 檢查,且需要 FQDN.)

數值為 0

Proxy

此旗標指定通訊路徑的一部分會透過 Proxy,或用戶端透過 HTTP 直接連線到目的地伺服器。

數值為 1

NoServiceNameCheck

此旗標指定已停用 SPN 檢查;此旗標不應該用於僅檢查 SPN 的案例中。

數值為 2

AllowDotlessSpn

此旗標指定 SPN 不需要是 FQDN。 設定此旗標可允許 NetBIOS 型 SPN。 注意:設定此旗標不是安全案例;非 FQDN 型名稱容易遭受名稱解析有害攻擊。

數值為 4

ProxyCohosting

此旗標指定整個用戶端對伺服器通訊路徑只會使用 HTTP;通訊路徑中沒有任何部分會使用 SSL,而且會使用 SPN 檢查。 注意:當您指定此旗標時,也必須指定 Proxy 旗標。

數值為 32

tokenChecking 選擇性列舉屬性。

指定檢查通道系結資訊的行為。

屬性 tokenChecking 可以是下列其中一個值;預設值為 None
名稱 描述
None

此值指定 IIS 不會執行通道系結權杖檢查。 此設定會模擬在延伸保護之前存在的行為。

數值為 0

Allow

此值指定已啟用通道系結權杖檢查,但不需要。 此設定允許與支援擴充保護之用戶端的安全通訊,但仍支援無法使用擴充保護的用戶端。

數值為 1

Require

此值指定需要通道系結權杖檢查。 此設定不支援延伸保護的用戶端不支援。

數值為 2

子元素

元素 描述
spn 將 SPN 加入至集合。
clearSpns 清除 SPN 的集合。
removeSpn 從集合中移除 SPN。

組態範例

下列範例顯示一個元素,示範如何啟用具有預設網站擴充保護的Windows 驗證,並將兩個 <extendedProtection> SPN 專案新增至 SPN 的集合。

<location path="Default Web Site">
   <system.webServer>
      <security>
         <authentication>
            <windowsAuthentication enabled="true">
               <extendedProtection tokenChecking="Allow" flags="None">
                  <spn name="HTTP/www.contoso.com" />
                  <spn name="HTTP/contoso.com" />
               </extendedProtection>
            </windowsAuthentication>
         </authentication>
      </security>
   </system.webServer>
</location>

範例程式碼

下列範例示範如何設定具有預設網站擴充保護的Windows 驗證,並將兩個 SPN 專案新增至 SPN 的集合。

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /enabled:"True" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /extendedProtection.tokenChecking:"Allow" /extendedProtection.flags:"None" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /+"extendedProtection.[name='HTTP/www.contoso.com']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /+"extendedProtection.[name='HTTP/contoso.com']" /commit:apphost

注意

當您使用AppCmd.exe設定這些設定時,請務必將 認可 參數 apphost 設定為 。 這會將組態設定認可至ApplicationHost.config檔案中適當的位置區段。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site");
         windowsAuthenticationSection["enabled"] = true;

         ConfigurationElement extendedProtectionElement = windowsAuthenticationSection.GetChildElement("extendedProtection");
         extendedProtectionElement["tokenChecking"] = @"Allow";
         extendedProtectionElement["flags"] = @"None";

         ConfigurationElementCollection extendedProtectionCollection = extendedProtectionElement.GetCollection();

         ConfigurationElement spnElement = extendedProtectionCollection.CreateElement("spn");
         spnElement["name"] = @"HTTP/www.contoso.com";
         extendedProtectionCollection.Add(spnElement);

         ConfigurationElement spnElement1 = extendedProtectionCollection.CreateElement("spn");
         spnElement1["name"] = @"HTTP/contoso.com";
         extendedProtectionCollection.Add(spnElement1);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim windowsAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site")
      windowsAuthenticationSection("enabled") = True

      Dim extendedProtectionElement As ConfigurationElement = windowsAuthenticationSection.GetChildElement("extendedProtection")
      extendedProtectionElement("tokenChecking") = "Allow"
      extendedProtectionElement("flags") = "None"

      Dim extendedProtectionCollection As ConfigurationElementCollection = extendedProtectionElement.GetCollection

      Dim spnElement As ConfigurationElement = extendedProtectionCollection.CreateElement("spn")
      spnElement("name") = "HTTP/www.contoso.com"
      extendedProtectionCollection.Add(spnElement)

      Dim spnElement1 As ConfigurationElement = extendedProtectionCollection.CreateElement("spn")
      spnElement1("name") = "HTTP/contoso.com"
      extendedProtectionCollection.Add(spnElement1)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site");
windowsAuthenticationSection.Properties.Item("enabled").Value = true;

var extendedProtectionElement = windowsAuthenticationSection.ChildElements.Item("extendedProtection");
extendedProtectionElement.Properties.Item("tokenChecking").Value = "Allow";
extendedProtectionElement.Properties.Item("flags").Value = "None";

var extendedProtectionCollection = extendedProtectionElement.Collection;

var spnElement = extendedProtectionCollection.CreateNewElement("spn");
spnElement.Properties.Item("name").Value = "HTTP/www.contoso.com";
extendedProtectionCollection.AddElement(spnElement);

var spnElement1 = extendedProtectionCollection.CreateNewElement("spn");
spnElement1.Properties.Item("name").Value = "HTTP/contoso.com";
extendedProtectionCollection.AddElement(spnElement1);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site")
windowsAuthenticationSection.Properties.Item("enabled").Value = True

Set extendedProtectionElement = windowsAuthenticationSection.ChildElements.Item("extendedProtection")
extendedProtectionElement.Properties.Item("tokenChecking").Value = "Allow"
extendedProtectionElement.Properties.Item("flags").Value = "None"

Set extendedProtectionCollection = extendedProtectionElement.Collection

Set spnElement = extendedProtectionCollection.CreateNewElement("spn")
spnElement.Properties.Item("name").Value = "HTTP/www.contoso.com"
extendedProtectionCollection.AddElement(spnElement)

Set spnElement1 = extendedProtectionCollection.CreateNewElement("spn")
spnElement1.Properties.Item("name").Value = "HTTP/contoso.com"
extendedProtectionCollection.AddElement(spnElement1)

adminManager.CommitChanges()