<extendedProtection> della protezione estesa di Windows

Panoramica

L'elemento <extendedProtection> specifica le impostazioni che configurano la protezione estesa per autenticazione di Windows in IIS 7.5.

La protezione estesa migliora le funzionalità di autenticazione di Windows esistenti per mitigare gli attacchi di inoltro di autenticazione o "man in mezzo". Questa mitigazione viene eseguita usando le informazioni di sicurezza implementate tramite due meccanismi di sicurezza:

  • Informazioni di associazione di canale specificate tramite un token di associazione di canale (CBT), che viene usato principalmente per le connessioni SSL.
  • Informazioni di associazione del servizio specificate tramite un nome spN (Service Principle Name), che viene usato principalmente per le connessioni che non usano SSL o quando viene stabilita una connessione tramite uno scenario che fornisce l'offload SSL, ad esempio un server proxy o un servizio di bilanciamento del carico.

L'elemento <extendedProtection> può contenere una raccolta di elementi, ognuno dei quali contiene un SPN univoco per le informazioni sull'associazione <spn> del servizio. Ogni SPN rappresenta un endpoint univoco nel percorso di connessione, che può essere un nome di dominio completo (FQDN) o un nome NetBIOS del server di destinazione o di un server proxy. Ad esempio, se un client si connette a un server di destinazione tramite un server proxy, l'insieme SPN nel server di destinazione deve contenere il nome SPN per il server proxy. Ogni SPN nella raccolta deve essere preceduto da "HTTP", quindi il nome SPN risultante per "www.contoso.com" sarà "HTTP/www.contoso.com".

Esistono due attributi dell'elemento che configurano l'associazione <extendedProtection> del canale e un comportamento aggiuntivo per la protezione estesa iis:

  • L'attributo tokenChecking configura il comportamento per il controllo dei token di associazione del canale. I valori possibili per questo attributo sono:

    Nome Descrizione
    None Questo valore specifica che IIS non eseguirà il controllo dei token di associazione del canale. Questa impostazione emula il comportamento esistente prima della protezione estesa.

    Il valore numerico è 0.
    Allow Questo valore specifica che il controllo dei token di associazione del canale è abilitato, ma non obbligatorio. Questa impostazione consente la comunicazione sicura con i client che supportano la protezione estesa, ma supporta comunque i client che non sono in grado di usare la protezione estesa.

    Il valore numerico è 1.
    Require Questo valore specifica che è necessario il controllo del token di associazione del canale. Questa impostazione non fornisce supporto per i client che non supportano la protezione estesa.

    Il valore numerico è 2.
  • L'attributo flag configura un comportamento aggiuntivo per la protezione estesa. I flag possibili sono:

    Nome Descrizione
    None Questo flag specifica che non è abilitato alcun comportamento aggiuntivo per la protezione estesa. Ad esempio, non viene usato alcun server proxy e il controllo SPN è abilitato e richiede FQDN.

    Il valore numerico è 0.
    Proxy Questo flag specifica che parte del percorso di comunicazione sarà tramite un proxy o che il client si connette direttamente al server di destinazione tramite HTTP.

    Il valore numerico è 1.
    NoServiceNameCheck Questo flag specifica che il controllo SPN è disabilitato; questo flag non deve essere usato negli scenari in cui vengono controllati solo gli SPN.

    Il valore numerico è 2.
    AllowDotlessSpn Questo flag specifica che gli SPN non devono essere FQDN. L'impostazione di questo flag consente agli SPN basati su NetBIOS. Nota: L'impostazione di questo flag non è uno scenario sicuro; i nomi basati su FQDN non sono vulnerabili agli attacchi di avvelenamento della risoluzione dei nomi.

    Il valore numerico è 4.
    ProxyCohosting Questo flag specifica che l'intero percorso di comunicazione da client a server userà solo HTTP; nessuna parte del percorso di comunicazione userà SSL e verrà usato il controllo SPN. Nota: Quando si specifica questo flag, è necessario specificare anche il Proxy flag.

    Il valore numerico è 32.

Scenari di protezione estesa

Si considerino gli scenari di esempio seguenti:

  • In ognuno degli scenari seguenti è anche possibile specificare il flag se l'ambiente AllowDotlessSpn di rete supporta gli SPN basati su NetBIOS. Tuttavia, gli SPN basati su NetBIOS non sono sicuri.
  • Per ognuno degli scenari seguenti in cui verrà usato il controllo SPN e il controllo dei token di associazione del canale non verrà usato, non è consigliabile specificare il NoServiceNameCheck flag.
Scenario Flags Descrizione
Il client si connette direttamente al server di destinazione usando HTTP Proxy, ProxyCohosting Il controllo SPN verrà usato e il controllo dei token di associazione del canale non verrà usato.
Il client si connette direttamente al server di destinazione usando SSL None Il controllo del token di associazione del canale viene usato e il controllo SPN non viene usato.
Il client si connette al server di destinazione tramite un server proxy usando HTTP per l'intero percorso Proxy, ProxyCohosting Il controllo SPN verrà usato e il controllo dei token di associazione del canale non verrà usato.
Il client si connette al server di destinazione tramite un server proxy usando SSL per l'intero percorso Proxy Il controllo SPN verrà usato e il controllo dei token di associazione del canale non verrà usato.
Il client si connette al server proxy usando SSL e server proxy si connette al server di destinazione usando HTTP (off-load SSL) Proxy Il controllo SPN verrà usato e il controllo dei token di associazione del canale non verrà usato.

Informazioni aggiuntive

Altre informazioni sulla protezione estesa sono disponibili nell'argomento seguente:

Integrated Windows Authentication with Extended Protection

Nomi entità servizio

Compatibilità

Versione Note
IIS 10.0 L'elemento <extendedProtection> non è stato modificato in IIS 10.0.
IIS 8,5 L'elemento <extendedProtection> non è stato modificato in IIS 8.5.
IIS 8,0 L'elemento <extendedProtection> non è stato modificato in IIS 8.0.
IIS 7,5 L'elemento <extendedProtection> è stato introdotto in IIS 7.5.
IIS 7.0 N/D
IIS 6.0 N/D

Installazione

L'installazione predefinita di IIS 7 e versioni successive non include il servizio ruolo autenticazione di Windows. Per usare autenticazione di Windows in IIS, è necessario installare il servizio ruolo, disabilitare l'autenticazione anonima per il sito Web o l'applicazione e quindi abilitare autenticazione di Windows per il sito o l'applicazione.

Nota

Dopo aver installato il servizio ruolo, IIS 7 esegue il commit delle impostazioni di configurazione seguenti nel file di ApplicationHost.config.

<windowsAuthentication enabled="false" />

Windows Server 2012 o Windows Server 2012 R2

  1. Sulla barra delle applicazioni fare clic su Server Manager.
  2. In Server Manager fare clic sul menu Gestisci e quindi su Aggiungi ruoli e funzionalità.
  3. Nella procedura guidata Aggiungi ruoli e funzionalità fare clic su Avanti. Selezionare il tipo di installazione e fare clic su Avanti. Selezionare il server di destinazione e fare clic su Avanti.
  4. Nella pagina Ruoliserver espandere Server Web (IIS), espandere Server Web, espandere Sicurezza e quindi selezionare Autenticazione di Windows. Fare clic su Avanti.
    Screenshot della pagina Ruoli server. L'opzione Autenticazione di Windows è selezionata e evidenziata. .
  5. Nella pagina Selezione funzionalità fare clic su Avanti.
  6. Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
  7. Nella pagina Risultati fare clic su Chiudi.

Windows 8 o Windows 8.1

  1. Nella schermata Start spostare il puntatore nell'angolo inferiore sinistro, fare clic con il pulsante destro del mouse sul pulsante Start e quindi fare clic su Pannello di controllo.
  2. In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva le funzionalità di Windows.
  3. Espandere Internet Information Services, espandere Servizi Web a livello mondiale, espandere Sicurezza e quindi selezionare Autenticazione di Windows.
    Screenshot dell'albero di spostamento Programmi e funzionalità. L'opzione Autenticazione di Windows è selezionata e evidenziata.
  4. Fare clic su OK.
  5. Fare clic su Close.

Windows Server 2008 o Windows Server 2008 R2

  1. Nella barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione e quindi fare clic su Server Manager.
  2. Nel riquadro della gerarchia di Server Manager espandere Ruoli e quindi fare clic su Server Web (IIS).
  3. Nel riquadro Server Web (IIS) scorrere fino alla sezione Servizi ruolo e quindi fare clic su Aggiungi servizi ruolo.
  4. Nella pagina Seleziona servizi ruolo della Procedura guidata Aggiungi servizi ruolo selezionare Autenticazione di Windows e quindi fare clic su Avanti.
    Screenshot della pagina Seleziona servizi ruolo. L'opzione Sicurezza viene espansa. L'opzione Autenticazione di Windows è selezionata e evidenziata.
  5. Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
  6. Nella pagina Risultati fare clic su Chiudi.

Windows Vista o Windows 7

  1. Nella barra delle applicazioni fare clic su Start e quindi fare clic su Pannello di controllo.
  2. In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
  3. Espandere Internet Information Services, quindi Servizi Web a livello mondiale, quindi Sicurezza.
  4. Selezionare Autenticazione di Windows e quindi fare clic su OK.
    Screenshot dell'albero di spostamento Programmi e funzionalità. L'autenticazione di Windows è evidenziata e selezionata. La cartella Sicurezza viene espansa.

Procedure

Come abilitare la protezione estesa per autenticazione di Windows

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 o Windows Server 2012 R2:

      • Nella barra delle applicazioni fare clic su Server Manager, scegliere Strumenti e quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8 o Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione e quindi fare doppio clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Server 2008 o Windows Server 2008 R2:

      • Nella barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione e quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Vista o Windows 7:

      • Nella barra delle applicazioni fare clic su Start e quindi fare clic su Pannello di controllo.
      • Fare doppio clic su Strumenti di amministrazione e quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni espandere il nome del server, espandere Siti e quindi il sito, l'applicazione o il servizio Web per cui si vuole abilitare la protezione estesa per autenticazione di Windows.

  3. Scorrere fino alla sezione Sicurezza nel riquadro Home e quindi fare doppio clic su Autenticazione.

  4. Nel riquadro Autenticazione selezionare Autenticazione di Windows.

  5. Fare clic su Abilita nel riquadro Azioni .
    Screenshot della pagina Autenticazione. L'autenticazione di Windows è evidenziata. Il pulsante Abilita è disponibile nel riquadro Azioni.

  6. Fare clic su Impostazioni avanzate nel riquadro Azioni .

  7. Quando viene visualizzata la finestra di dialogo Impostazioni avanzate , selezionare una delle opzioni seguenti nel menu a discesa Protezione estesa :

    • Selezionare Accetta se si vuole abilitare la protezione estesa fornendo supporto a livello inferiore per i client che non supportano la protezione estesa.
    • Selezionare Obbligatorio se si vuole abilitare la protezione estesa senza fornire supporto a livello inferiore.
      Screenshot della finestra di dialogo Impostazioni avanzate. Nel menu a discesa Protezione estesa, l'opzione Accetta è evidenziata.
  8. Fare clic su OK per chiudere la finestra di dialogo Impostazioni avanzate .

Configurazione

L'elemento <extendedProtection> è configurabile a livello di directory del sito, dell'applicazione o della directory virtuale nel file di ApplicationHost.config.

Attributi

Attributo Descrizione
flags Attributo flag facoltativo.

Specifica le impostazioni di comportamento aggiuntive per la protezione estesa.

L'attributo può essere una combinazione dei valori seguenti. Il flags valore predefinito è None.
Nome Descrizione
None

Questo flag specifica che non è abilitato alcun comportamento aggiuntivo per la protezione estesa. Ad esempio, non viene usato alcun server proxy e il controllo SPN è abilitato e richiede FQDN.

Il valore numerico è 0.

Proxy

Questo flag specifica che parte del percorso di comunicazione sarà tramite un proxy o che il client si connette direttamente al server di destinazione tramite HTTP.

Il valore numerico è 1.

NoServiceNameCheck

Questo flag specifica che il controllo SPN è disabilitato; questo flag non deve essere usato negli scenari in cui vengono controllati solo gli SPN.

Il valore numerico è 2.

AllowDotlessSpn

Questo flag specifica che gli SPN non devono essere FQDN. L'impostazione di questo flag consente agli SPN basati su NetBIOS. Nota: l'impostazione di questo flag non è uno scenario sicuro; i nomi basati su FQDN non sono vulnerabili agli attacchi di avvelenamento della risoluzione dei nomi.

Il valore numerico è 4.

ProxyCohosting

Questo flag specifica che l'intero percorso di comunicazione da client a server userà solo HTTP; nessuna parte del percorso di comunicazione userà SSL e verrà usato il controllo SPN. Nota: quando si specifica questo flag, è necessario specificare anche il Proxy flag.

Il valore numerico è 32.

tokenChecking Attributo enumerazione facoltativo.

Specifica il comportamento per controllare le informazioni di associazione del canale.

L'attributo può essere uno dei valori seguenti. Il tokenChecking valore predefinito è None.
Nome Descrizione
None

Questo valore specifica che IIS non eseguirà il controllo dei token di associazione del canale. Questa impostazione emula il comportamento esistente prima della protezione estesa.

Il valore numerico è 0.

Allow

Questo valore specifica che il controllo dei token di associazione del canale è abilitato, ma non obbligatorio. Questa impostazione consente la comunicazione sicura con i client che supportano la protezione estesa, ma supporta comunque i client che non sono in grado di usare la protezione estesa.

Il valore numerico è 1.

Require

Questo valore specifica che è necessario il controllo del token di associazione del canale. Questa impostazione non fornisce supporto per i client che non supportano la protezione estesa.

Il valore numerico è 2.

Elementi figlio

Elemento Descrizione
spn Aggiunge un SPN alla raccolta.
clearSpns Cancella l'insieme di SPN.
removeSpn Rimuove un SPN dall'insieme.

Esempio di configurazione

Nell'esempio seguente viene visualizzato un <extendedProtection> elemento che illustra l'abilitazione di autenticazione di Windows con protezione estesa per il sito Web predefinito e aggiunge due voci SPN all'insieme di 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>

Codice di esempio

Gli esempi seguenti illustrano la configurazione di autenticazione di Windows con protezione estesa per il sito Web predefinito e aggiunge due voci SPN alla raccolta di 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

Nota

È necessario assicurarsi di impostare il parametro commit su apphost quando si usa AppCmd.exe per configurare queste impostazioni. Questa operazione esegue il commit delle impostazioni di configurazione nella sezione percorso appropriata nel file di 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()