Nome <entità servizio spn>
Panoramica
L'elemento <spn>
aggiunge un nome dell'entità servizio (SPN) all'insieme di SPN. Ogni SPN specifica un endpoint univoco per l'attività client usando le funzionalità di protezione estese per autenticazione di Windows.
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 dell'entità servizio (SPN), 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:
Compatibilità
Versione | Note |
---|---|
IIS 10.0 | L'elemento <spn> non è stato modificato in IIS 10.0. |
IIS 8,5 | L'elemento <spn> non è stato modificato in IIS 8.5. |
IIS 8,0 | L'elemento <spn> non è stato modificato in IIS 8.0. |
IIS 7,5 | L'elemento <spn> dell'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
- Sulla barra delle applicazioni fare clic su Server Manager.
- In Server Manager fare clic sul menu Gestisci e quindi su Aggiungi ruoli e funzionalità.
- 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.
- Nella pagina Ruoliserver espandere Server Web (IIS), espandere Server Web, espandere Sicurezza e quindi selezionare Autenticazione di Windows. Fare clic su Avanti.
. - Nella pagina Selezione funzionalità fare clic su Avanti.
- Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
- Nella pagina Risultati fare clic su Chiudi.
Windows 8 o Windows 8.1
- Nella schermata Start spostare il puntatore fino all'angolo inferiore sinistro, fare clic con il pulsante destro del mouse sul pulsante Start e quindi scegliere Pannello di controllo.
- In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
- Espandere Internet Information Services, servizi Web a livello globale, sicurezza, quindi selezionare Autenticazione di Windows.
- Fare clic su OK.
- Fare clic su Close.
Windows Server 2008 o Windows Server 2008 R2
- Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Server Manager.
- Nel riquadro della gerarchia Server Manager espandere Ruoli, quindi fare clic su Server Web (IIS).
- Nel riquadro Server Web (IIS) scorrere fino alla sezione Servizi ruolo e quindi fare clic su Aggiungi servizi ruolo.
- Nella pagina Selezione servizi ruolo della Procedura guidata Aggiungi servizi ruolo selezionare Autenticazione di Windows e quindi fare clic su Avanti.
- Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
- Nella pagina Risultati fare clic su Chiudi.
Windows Vista o Windows 7
- Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
- In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
- Espandere Internet Information Services, quindi Servizi Web a livello mondiale, quindi Sicurezza.
- Selezionare Autenticazione di Windows e quindi fare clic su OK.
Procedure
Come abilitare la protezione estesa per autenticazione di Windows
Aprire Gestione Internet Information Services (IIS):
Se si usa Windows Server 2012 o Windows Server 2012 R2:
- Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, 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, quindi fare doppio clic su Gestione Internet Information Services (IIS).
Se si usa Windows Server 2008 o Windows Server 2008 R2:
- Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Gestione Internet Information Services (IIS).
Se si usa Windows Vista o Windows 7:
- Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
- Fare doppio clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
Nel riquadro Connessioni espandere il nome del server, espandere Siti, quindi il sito, l'applicazione o il servizio Web per cui si vuole abilitare la protezione estesa per autenticazione di Windows.
Scorrere fino alla sezione Sicurezza nel riquadro Home e quindi fare doppio clic su Autenticazione.
Nel riquadro Autenticazione selezionare Autenticazione di Windows.
Fare clic su Impostazioni avanzate nel riquadro Azioni .
Quando viene visualizzata la finestra di dialogo Impostazioni avanzate , selezionare una delle opzioni seguenti nel menu a discesa Protezione estesa :
Fare clic su OK per chiudere la finestra di dialogo Impostazioni avanzate .
Configurazione
L'elemento <spn>
dell'elemento <extendedProtection>
è configurabile a livello di sito, applicazione o directory virtuale nel file ApplicationHost.config.
Attributi
Attributo | Descrizione |
---|---|
name |
Attributo stringa facoltativo. Specifica un nome SPN univoco. Non è previsto alcun valore predefinito. |
Elementi figlio
Nessuno.
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 alla raccolta di nomi 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
Negli esempi seguenti viene illustrata la configurazione di autenticazione di Windows con protezione estesa per il sito Web predefinito e vengono aggiunte due voci SPN alla raccolta di nomi 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. In questo modo le impostazioni di configurazione vengono confermate nella sezione relativa al percorso appropriato nel file 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()