Partager via


Mappages plusieurs-à-un <manyToOneMappings>

Vue d’ensemble

L’élément <manyToOneMappings> de l’élément <iisClientCertificateMappingAuthentication> mappe plusieurs certificats clients à un compte d’utilisateur en fonction des critères du certificat de navigateur du client. Les mappages de certificats plusieurs-à-un peuvent être utilisés à la place des méthodes d’authentification plus couramment utilisées, telles que l’authentification Windows ou l’authentification de base.

Il existe deux méthodes d’accès différentes que vous pouvez activer pour les règles plusieurs-à-un : Autoriser ou Refuser. Ces paramètres vous permettent de créer des règles qui acceptent des groupes de certificats clients que vous autorisez à accéder à votre site, tout en refusant l’accès à d’autres groupes de certificats en fonction de différents critères. Par exemple, vous pouvez créer une règle qui autorise l’accès à tous les employés de Contoso de votre unité d’organisation Ressources humaines, tout en refusant l’accès aux employés de l’unité d’organisation Ventes.

Il existe deux champs des certificats clients qui peuvent être utilisés comme critères pour les règles plusieurs-à-un :

  • Émetteur : ce champ spécifie des informations sur l’autorité de certification qui a émis le certificat client.
  • Objet : ce champ spécifie des informations sur l’entité pour laquelle le certificat client a été émis.

Chacun de ces champs peut contenir des sous-champs LDAP courants, par exemple :

  • CN = commonName (par exemple, « Nancy Davolio »)
  • OU = organizationalUnitName (par exemple, « Ventes »)
  • O = organizationName (par exemple, « Contoso »)
  • L = localityName (par exemple, « Redmond »)
  • S = stateOrProvinceName (par exemple, « WA »)
  • C = countryName (par exemple, « USA »)

Pour créer un mappage, vous créez une règle basée sur une paire champ/sous-champ pour une valeur spécifique. Par exemple, vous pouvez créer une règle qui correspond au sous-champ O de l’émetteur avec Contoso pour autoriser l’accès à tous les clients avec des certificats émis par l’autorité de certification Contoso. Cela élimine effectivement les connexions clientes de tous les clients qui ne font pas partie de l’organisation Contoso.

Remarque

Les mappages de certificats plusieurs-à-un diffèrent des mappages de certificats un-à-un, qui mappent des certificats clients individuels à des comptes d’utilisateur individuels.

Compatibilité

Version Notes
IIS 10.0 L’élément <manyToOneMappings> n’a pas été modifié dans IIS 10.0.
IIS 8.5 L’élément <manyToOneMappings> n’a pas été modifié dans IIS 8.5.
IIS 8.0 L’élément <manyToOneMappings> n’a pas été modifié dans IIS 8.0.
IIS 7.5 L’élément <manyToOneMappings> n’a pas été modifié dans IIS 7.5.
IIS 7.0 L’élément <manyToOneMappings> de l’élément <iisClientCertificateMappingAuthentication> a été introduit dans IIS 7.0.
IIS 6.0 L’élément <manyToOneMappings> remplace l’objet métabase IIsCertMapper IIS 6.0.

Programme d’installation

L’élément <iisClientCertificateMappingAuthentication> n’est pas disponible dans l’installation par défaut d’IIS 7 et versions ultérieures. Pour l’installer, procédez comme suit.

Windows Server 2012 ou Windows Server 2012 R2

  1. Dans la barre des tâches, cliquez sur Gestionnaire de serveur.
  2. Dans Gestionnaire de serveur, cliquez sur le menu Gérer, puis sur Ajouter des rôles et des fonctionnalités.
  3. 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.
  4. Dans la page Rôles serveur, développez Serveur web (IIS), Serveur web, Sécurité, puis sélectionnez Authentification par mappage de certificat client IIS. Sélectionnez Suivant.
    Screenshot of the Services Roles page showing the I I S Client Certificate Mapping Authentication option being highlighted.
  5. Dans la page Sélectionner les composants, cliquez sur Suivant.
  6. Dans la page Confirmer les sélections d’installation, cliquez sur Installer.
  7. Dans la page Résultats , cliquez sur Fermer.

Windows 8 ou Windows 8.1

  1. Dans l’écran d’accueil, 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.
  2. Dans le Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis sur Activer ou désactiver des fonctionnalités Windows.
  3. Développez Internet Information Services, Services World Wide Web, Sécurité, puis sélectionnez Authentification par mappage de certificat client IIS.
    Screenshot of the I I S Client Certificate Mapping Authentication folder being selected and highlighted.
  4. Cliquez sur OK.
  5. Cliquez sur Fermer.

Windows Server 2008 ou Windows Server 2008 R2

  1. Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire de serveur.
  2. Dans le volet de hiérarchie Gestionnaire de serveur, développez Rôles, puis cliquez sur Serveur web (IIS).
  3. 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.
  4. Dans la page Sélectionner des services de rôle de l’Assistant Ajout de services de rôle, sélectionnez Authentification par mappage de certificat client IIS, puis cliquez sur Suivant.
    Screenshot of the Add Roles Services Wizard showing the highlighted I I S Client Certificate Mapping Authentication.
  5. Dans la page Confirmer les sélections pour l'installation, cliquez sur Installer.
  6. Dans la page Résultats , cliquez sur Fermer.

Windows Vista ou Windows 7

  1. Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
  2. Dans le Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis sur Activer ou désactiver des fonctionnalités Windows.
  3. Développez Internet Information Services, puis sélectionnez Authentification par mappage de certificat client IIS, puis cliquez sur OK.
    Screenshot of the expanded Security folder, showing the highlighted I I S Client Certificate Mapping Authentication folder.

Procédure

Il n’existe aucune interface utilisateur pour configurer l’authentification par mappage de certificat client IIS pour IIS 7. Pour obtenir des exemples de configuration de l’authentification par mappage de certificat client IIS par programmation, consultez la section Exemples de code de ce document.

Configuration

Attributs

Aucune.

Éléments enfants

Élément Description
add Élément facultatif.

Ajoute un mappage à la collection manyToOneMappings.
clear Élément facultatif.

Supprime toutes les références aux mappages de la collection manyToOneMappings.

Exemple Configuration

L’exemple de configuration suivant effectue les actions suivantes pour le site web par défaut :

  • Active l’authentification par mappage de certificat client IIS à l’aide du mappage de certificats plusieurs-à-un.
  • Crée une règle de mappage de certificat plusieurs-à-un pour un compte d’utilisateur en fonction du champ d’organisation dans l’objet du certificat client correspondant à Contoso.
  • Configure le site pour exiger SSL et négocier des certificats clients.
<location path="Default Web Site">
   <system.webServer>
      <security>
         <authentication>
            <windowsAuthentication enabled="false" />
            <anonymousAuthentication enabled="false" />
            <digestAuthentication enabled="false" />
            <basicAuthentication enabled="false" />
            <iisClientCertificateMappingAuthentication enabled="true"
                  manyToOneCertificateMappingsEnabled="true">
               <manyToOneMappings>
                  <add name="Contoso Employees"
                        enabled="true"
                        permissionMode="Allow"
                        userName="Username"
                        password="[enc:AesProvider:57686f6120447564652c2049495320526f636b73:enc]">
                     <rules>
                        <add certificateField="Subject"
                           certificateSubField="O"
                           matchCriteria="Contoso"
                           compareCaseSensitive="true" />
                     </rules>
                  </add>
               </manyToOneMappings>
            </iisClientCertificateMappingAuthentication>
         </authentication>
         <access sslFlags="Ssl, SslNegotiateCert" />
      </security>
   </system.webServer>
</location>

Exemple de code

Les exemples de code suivants effectuent les actions suivantes pour le site web par défaut :

  • Activer l’authentification par mappage de certificat client IIS à l’aide du mappage de certificats plusieurs-à-un.
  • Créer une règle de mappage de certificat plusieurs-à-un pour un compte d’utilisateur en fonction du champ d’organisation dans l’objet du certificat client correspondant à Contoso.
  • Configurer le site pour exiger SSL et négocier des certificats clients.

AppCmd.exe

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

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /+"manyToOneMappings.[name='Contoso Employees',enabled='True',permissionMode='Allow',userName='Username',password='Password']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /+"manyToOneMappings.[name='Contoso Employees'].rules.[certificateField='Subject',certificateSubField='O',matchCriteria='Contoso',compareCaseSensitive='True']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/access /sslFlags:"Ssl, SslNegotiateCert" /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 iisClientCertificateMappingAuthenticationSection = config.GetSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "Default Web Site");
         iisClientCertificateMappingAuthenticationSection["enabled"] = true;
         iisClientCertificateMappingAuthenticationSection["manyToOneCertificateMappingsEnabled"] = true;

         ConfigurationElementCollection manyToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("manyToOneMappings");
         ConfigurationElement addElement = manyToOneMappingsCollection.CreateElement("add");
         addElement["name"] = @"Contoso Employees";
         addElement["enabled"] = true;
         addElement["permissionMode"] = @"Allow";
         addElement["userName"] = @"Username";
         addElement["password"] = @"Password";

         ConfigurationElementCollection rulesCollection = addElement.GetCollection("rules");
         ConfigurationElement addElement1 = rulesCollection.CreateElement("add");
         addElement1["certificateField"] = @"Subject";
         addElement1["certificateSubField"] = @"O";
         addElement1["matchCriteria"] = @"Contoso";
         addElement1["compareCaseSensitive"] = true;
         rulesCollection.Add(addElement1);
         manyToOneMappingsCollection.Add(addElement);

         ConfigurationSection accessSection = config.GetSection("system.webServer/security/access", "Default Web Site");
         accessSection["sslFlags"] = @"Ssl, SslNegotiateCert";

         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 iisClientCertificateMappingAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "Default Web Site")
      iisClientCertificateMappingAuthenticationSection("enabled") = True
      iisClientCertificateMappingAuthenticationSection("manyToOneCertificateMappingsEnabled") = True

      Dim manyToOneMappingsCollection As ConfigurationElementCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("manyToOneMappings")
      Dim addElement As ConfigurationElement = manyToOneMappingsCollection.CreateElement("add")
      addElement("name") = "Contoso Employees"
      addElement("enabled") = True
      addElement("permissionMode") = "Allow"
      addElement("userName") = "Username"
      addElement("password") = "Password"

      Dim rulesCollection As ConfigurationElementCollection = addElement.GetCollection("rules")
      Dim addElement1 As ConfigurationElement = rulesCollection.CreateElement("add")
      addElement1("certificateField") = "Subject"
      addElement1("certificateSubField") = "O"
      addElement1("matchCriteria") = "Contoso"
      addElement1("compareCaseSensitive") = True
      rulesCollection.Add(addElement1)
      manyToOneMappingsCollection.Add(addElement)

      Dim accessSection As ConfigurationSection = config.GetSection("system.webServer/security/access", "Default Web Site")
      accessSection("sslFlags") = "Ssl, SslNegotiateCert"

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

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

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

var manyToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("manyToOneMappings").Collection;
var addElement = manyToOneMappingsCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "Contoso Employees";
addElement.Properties.Item("enabled").Value = true;
addElement.Properties.Item("permissionMode").Value = "Allow";
addElement.Properties.Item("userName").Value = "Username";
addElement.Properties.Item("password").Value = "Password";

var rulesCollection = addElement.ChildElements.Item("rules").Collection;
var addElement1 = rulesCollection.CreateNewElement("add");
addElement1.Properties.Item("certificateField").Value = "Subject";
addElement1.Properties.Item("certificateSubField").Value = "O";
addElement1.Properties.Item("matchCriteria").Value = "Contoso";
addElement1.Properties.Item("compareCaseSensitive").Value = true;
rulesCollection.AddElement(addElement1);
manyToOneMappingsCollection.AddElement(addElement);

var accessSection = adminManager.GetAdminSection("system.webServer/security/access", "MACHINE/WEBROOT/APPHOST/Default Web Site");
accessSection.Properties.Item("sslFlags").Value = "Ssl, SslNegotiateCert";

adminManager.CommitChanges();

VBScript

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

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

Set manyToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("manyToOneMappings").Collection
Set addElement = manyToOneMappingsCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "Contoso Employees"
addElement.Properties.Item("enabled").Value = True
addElement.Properties.Item("permissionMode").Value = "Allow"
addElement.Properties.Item("userName").Value = "Username"
addElement.Properties.Item("password").Value = "Password"

Set rulesCollection = addElement.ChildElements.Item("rules").Collection
Set addElement1 = rulesCollection.CreateNewElement("add")
addElement1.Properties.Item("certificateField").Value = "Subject"
addElement1.Properties.Item("certificateSubField").Value = "O"
addElement1.Properties.Item("matchCriteria").Value = "Contoso"
addElement1.Properties.Item("compareCaseSensitive").Value = True
rulesCollection.AddElement(addElement1)
manyToOneMappingsCollection.AddElement(addElement)

Set accessSection = adminManager.GetAdminSection("system.webServer/security/access", "MACHINE/WEBROOT/APPHOST/Default Web Site")
accessSection.Properties.Item("sslFlags").Value = "Ssl, SslNegotiateCert"

adminManager.CommitChanges()