Protection étendue Windows <extendedProtection>
Vue d’ensemble
L’élément <extendedProtection>
spécifie les paramètres qui configurent la protection étendue pour l’authentification Windows dans IIS 7.5.
La protection étendue améliore les fonctionnalités d’authentification Windows existantes afin d’atténuer les attaques de relais d’authentification ou d’« intercepteur ». Cette atténuation est effectuée à l’aide d’informations de sécurité implémentées par le biais de deux mécanismes de sécurité :
- Informations de liaison de canal spécifiées via un jeton de liaison de canal (CBT), qui est principalement utilisé pour les connexions SSL.
- Informations de liaison de service spécifiées par le biais d’un nom de principal du service (SPN), qui est principalement utilisé pour les connexions qui n’utilisent pas SSL, ou lorsqu’une connexion est établie via un scénario qui fournit un déchargement SSL, tel qu’un serveur proxy ou un équilibreur de charge.
L’élément <extendedProtection>
peut contenir une collection d’éléments <spn>
, chacun contenant un SPN unique pour les informations de liaison de service. Chaque SPN représente un point de terminaison unique dans le chemin de connexion, qui peut être un nom de domaine complet (FQDN) ou un nom NetBIOS du serveur de destination ou d’un serveur proxy. Par exemple, si un client se connecte à un serveur de destination via un serveur proxy, la collection SPN sur le serveur de destination doit contenir le SPN du serveur proxy. Chaque SPN de la collection doit être précédé de « HTTP », de sorte que le SPN résultant pour « www.contoso.com » soit « HTTP/www.contoso.com ».
Il existe deux attributs de l’élément <extendedProtection>
qui configurent la liaison de canal et un comportement supplémentaire pour la protection étendue IIS :
L’attribut tokenChecking configure le comportement de vérification des jetons de liaison de canal. Cet attribut peut posséder les valeurs suivantes :
Nom Description None
Cette valeur spécifie qu’IIS n’effectue pas de vérification de jeton de liaison de canal. Ce paramètre émule le comportement qui existait avant la protection étendue.
La valeur numérique est0
.Allow
Cette valeur spécifie que la vérification de jeton de liaison de canal est activée, mais pas obligatoire. Ce paramètre permet une communication sécurisée avec les clients qui prennent en charge la protection étendue, mais prend toujours en charge les clients qui ne sont pas capables d’utiliser la protection étendue.
La valeur numérique est1
.Require
Cette valeur spécifie que la vérification de jeton de liaison de canal est obligatoire. Ce paramètre ne prend pas en charge les clients qui ne prennent pas en charge la protection étendue.
La valeur numérique est2
.L’attribut flags configure un comportement supplémentaire pour la protection étendue. Les indicateurs possibles sont les suivants :
Nom Description None
Cet indicateur spécifie qu’aucun comportement supplémentaire n’est activé pour la protection étendue. (Par exemple, aucun serveur proxy n’est utilisé et la vérification SPN est activée et nécessite des noms de domaine complets.)
La valeur numérique est0
.Proxy
Cet indicateur spécifie qu’une partie du chemin de communication est via un proxy ou que le client se connecte directement au serveur de destination via HTTP.
La valeur numérique est1
.NoServiceNameCheck
Cet indicateur spécifie que la vérification SPN est désactivée. Cet indicateur ne doit pas être utilisé dans les scénarios où seuls les SPN sont vérifiés.
La valeur numérique est2
.AllowDotlessSpn
Cet indicateur spécifie que les SPN ne doivent pas obligatoirement être des noms de domaine complets. La définition de cet indicateur autorise les SPN basés sur NetBIOS. Remarque : la définition de cet indicateur n’est pas un scénario sécurisé ; les noms non basés sur le nom de domaine complet sont vulnérables aux attaques par empoisonnement de résolution de noms.
La valeur numérique est4
.ProxyCohosting
Cet indicateur spécifie que l’intégralité du chemin de communication client à serveur utilise uniquement HTTP ; aucune partie du chemin de communication n’utilise SSL et la vérification SPN sera utilisée. Remarque : lorsque vous spécifiez cet indicateur, vous devez également spécifier l’indicateur Proxy
.
La valeur numérique est32
.
Scénarios de protection étendue
Considérez les exemples de scénarios suivants :
- Dans chacun des scénarios suivants, vous pouvez également spécifier l’indicateur
AllowDotlessSpn
si votre environnement réseau prend en charge les SPN basés sur NetBIOS. Toutefois, les SPN basés sur NetBIOS ne sont pas sécurisés. - Pour chacun des scénarios suivants où la vérification SPN sera utilisée et la vérification de jeton de liaison de canal ne sera pas utilisée, vous ne devez pas spécifier l’indicateur
NoServiceNameCheck
.
Scénario | Indicateurs | Description |
---|---|---|
Le client se connecte directement au serveur de destination à l’aide de HTTP | Proxy , ProxyCohosting |
La vérification SPN sera utilisée et la vérification de jeton de liaison de canal ne sera pas utilisée. |
Le client se connecte directement au serveur de destination à l’aide de SSL | None |
La vérification de jeton de liaison de canal est utilisée et la vérification SPN n’est pas utilisée. |
Le client se connecte au serveur de destination via un serveur proxy à l’aide de HTTP pour l’intégralité du chemin | Proxy , ProxyCohosting |
La vérification SPN sera utilisée et la vérification de jeton de liaison de canal ne sera pas utilisée. |
Le client se connecte au serveur de destination via un serveur proxy à l’aide de SSL pour l’intégralité du chemin | Proxy |
La vérification SPN sera utilisée et la vérification de jeton de liaison de canal ne sera pas utilisée. |
Le client se connecte au serveur proxy à l’aide de SSL et le serveur proxy se connecte au serveur de destination à l’aide de HTTP (déchargement SSL) | Proxy |
La vérification SPN sera utilisée et la vérification de jeton de liaison de canal ne sera pas utilisée. |
Informations supplémentaires
Pour plus d’informations sur la protection étendue, consultez la rubrique suivante :
Integrated Windows Authentication with Extended Protection (en anglais)
Compatibilité
Version | Notes |
---|---|
IIS 10.0 | L’élément <extendedProtection> n’a pas été modifié dans IIS 10.0. |
IIS 8.5 | L’élément <extendedProtection> n’a pas été modifié dans IIS 8.5. |
IIS 8.0 | L’élément <extendedProtection> n’a pas été modifié dans IIS 8.0. |
IIS 7.5 | L’élément <extendedProtection> a été introduit dans IIS 7.5. |
IIS 7.0 | S/O |
IIS 6.0 | S/O |
Programme d’installation
L’installation par défaut d’IIS 7 et versions ultérieures n’inclut pas le service de rôle d’authentification Windows. Pour utiliser l’authentification Windows sur IIS, vous devez installer le service de rôle, désactiver Authentification anonyme pour votre site web ou votre application, puis activer Authentification Windows pour le site ou l’application.
Remarque
Après avoir installé le service de rôle, IIS 7 valide les paramètres de configuration suivants dans le fichier ApplicationHost.config.
<windowsAuthentication enabled="false" />
Windows Server 2012 ou Windows Server 2012 R2
- Dans la barre des tâches, cliquez sur Gestionnaire de serveur.
- Dans Gestionnaire de serveur, cliquez sur le menu Gérer, puis sur Ajouter des rôles et des fonctionnalités.
- Dans l’Assistant Ajout de rôles et de fonctionnalités, cliquez sur Suivant. Sélectionnez le type d’installation, puis cliquez sur Suivant. Sélectionnez le serveur de destination, puis cliquez sur Suivant.
- Dans la page Rôles serveur, développez Serveur web (IIS), Serveur web, Sécurité, puis sélectionnez Authentification Windows. Sélectionnez Suivant.
. - Dans la page Sélectionner les composants, cliquez sur Suivant.
- Dans la page Confirmer les sélections d’installation, cliquez sur Installer.
- Dans la page Résultats , cliquez sur Fermer.
Windows 8 ou Windows 8.1
- Dans l’écran Démarrer, déplacez le pointeur jusqu’au coin inférieur gauche, cliquez avec le bouton droit sur le bouton Démarrer, puis cliquez sur Panneau de configuration.
- Dans Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis sur Activer ou désactiver des fonctionnalités Windows.
- Développez Internet Information Services, Services World Wide Web, Sécurité, puis sélectionnez Authentification Windows.
- Cliquez sur OK.
- Cliquez sur Fermer.
Windows Server 2008 ou Windows Server 2008 R2
- Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire de serveur.
- Dans le volet de hiérarchie du Gestionnaire de serveur, développez Rôles, puis cliquez sur Serveur web (IIS).
- Dans le volet Serveur web (IIS), faites défiler jusqu’à la section Services de rôle, puis cliquez sur Ajouter des services de rôle.
- Dans la page Sélectionner des services de rôle de l’Assistant Ajout de services de rôle, sélectionnez Authentification Windows, puis cliquez sur Suivant.
- Dans la page Confirmer les sélections pour l'installation, cliquez sur Installer.
- Dans la page Résultats , cliquez sur Fermer.
Windows Vista ou Windows 7
- Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
- Dans Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis sur Activer ou désactiver des fonctionnalités Windows.
- Développez Internet Information Services, Services World Wide Web, puis Sécurité.
- Sélectionnez Authentification Windows, puis cliquez sur OK.
Procédure
Comment activer la protection étendue pour l’authentification Windows
Ouvrez le Gestionnaire Internet Information Services (IIS) :
Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :
- Dans la barre des tâches, cliquez sur Gestionnaire de serveur, sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
Si vous utilisez Windows 8 ou Windows 8.1 :
- Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
- Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :
- Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire Internet Information Services (IIS).
Si vous utilisez Windows Vista ou Windows 7 :
- Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
- Double-cliquez sur Outils d’administration, puis sur Gestionnaire Internet Information Services (IIS).
Dans le volet Connexions, développez le nom du serveur, développez Sites, puis le site, l’application ou le service web pour lequel vous souhaitez activer la protection étendue pour l’authentification Windows.
Faites défiler jusqu’à la section Sécurité dans le volet Accueil, puis double-cliquez sur Authentification.
Dans le volet Authentification, sélectionnez Authentification Windows.
Cliquez sur Paramètres avancés dans le volet Actions.
Quand la boîte de dialogue Paramètres avancés s’affiche, sélectionnez l’une des options suivantes dans le menu déroulant Protection étendue :
- Sélectionnez Accepter si vous souhaitez activer la protection étendue tout en fournissant une prise en charge de bas niveau pour les clients qui ne prennent pas en charge la protection étendue.
- Sélectionnez Obligatoire si vous souhaitez activer la protection étendue sans fournir de prise en charge de bas niveau.
Cliquez sur OK pour fermer la boîte de dialogue Paramètres avancés.
Configuration
L’élément <extendedProtection>
est configurable au niveau du site, de l’application ou du répertoire virtuel dans le fichier ApplicationHost.config.
Attributs
Attribut | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
flags |
Attribut flags facultatif. Spécifie les paramètres de comportement supplémentaires pour la protection étendue. L’attribut flags peut être une combinaison des valeurs suivantes ; la valeur par défaut est None .
|
||||||||||||
tokenChecking |
Attribut enum facultatif. Spécifie le comportement de vérification des informations de liaison de canal. L’attribut tokenChecking peut être l’une des valeurs suivantes ; la valeur par défaut est None .
|
Éléments enfants
Élément | Description |
---|---|
spn |
Ajoute un SPN à la collection. |
clearSpns |
Efface la collection de SPN. |
removeSpn |
Supprime un SPN de la collection. |
Exemple Configuration
L’exemple suivant affiche un élément <extendedProtection>
qui illustre l’activation de l’authentification Windows avec une protection étendue pour le site web par défaut et ajoute deux entrées SPN à la collection de 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>
Exemple de code
Les exemples suivants illustrent la configuration de l’authentification Windows avec une protection étendue pour le site web par défaut et ajoutent deux entrées SPN à la collection de 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
Remarque
Vous devez veiller à définir le paramètre commit sur apphost
quand vous utilisez AppCmd.exe pour configurer ces paramètres. Cela valide les paramètres de configuration dans la section d’emplacement appropriée dans le fichier 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()