Freigeben über


n:1--Zuordnungen <manyToOneMappings>

Übersicht

Das Element <manyToOneMappings> des Elements <iisClientCertificateMappingAuthentication> ordnet mehrere Clientzertifikate einem Benutzerkonto basierend auf Kriterien im Browserzertifikat des Clients zu. n:1-Zertifikatzuordnungen können anstelle der am häufigsten verwendeten Authentifizierungsmethoden verwendet werden, z. B. Windows-Authentifizierung oder Standardauthentifizierung.

Es gibt zwei verschiedene Zugriffsmethoden, die Sie für n:1-Regeln aktivieren können: Zulassen oder Verweigern. Mit diesen Einstellungen können Sie Regeln erstellen, die Gruppen von Clientzertifikaten akzeptieren, die Sie auf Ihre Site zugreifen können, während Sie den Zugriff auf andere Zertifikatgruppen basierend auf unterschiedlichen Kriterien verweigern. Sie können z. B. eine Regel erstellen, die den Zugriff auf alle Contoso-Mitarbeiter in Ihrer Personalabteilung erlaubt, während Sie den Zugriff auf Mitarbeiter in der Organisationseinheit Vertrieb verweigern.

Es gibt zwei Felder aus Clientzertifikaten, die als Kriterien für n:1-Regeln verwendet werden können:

  • Aussteller - Dieses Feld gibt Informationen über die Zertifizierungsstelle (ZS) an, die das Clientzertifikat ausgestellt hat.
  • Antragsteller – Dieses Feld gibt Informationen zur Entität an, für die das Clientzertifikat ausgestellt wurde.

Jedes dieser Felder kann allgemeine LDAP-Unterfelder enthalten; zum Beispiel:

  • CN = allgemeiner Name (commonName, z. B. "Nancy Davolio")
  • OU = Name der Organisationseinheit (organizationalUnitName, z. B. "Sales")
  • O = Name der Organisation (organizationName, z. B. "Contoso")
  • L = Ortsname (localityName, z. B. "Redmond")
  • S = Name des Staats oder der Region (stateOrProvinceName, z. B. "WA")
  • C = Landesname (countryName, z. B. "US")

Zum Erstellen einer Zuordnung erstellen Sie eine Regel basierend auf einem Feld-/Unterfeldpaar für einen bestimmten Wert. Sie können beispielsweise eine Regel erstellen, die mit dem O-Unterfeld des Ausstellers mit Contoso übereinstimmt, um den Zugriff auf alle Clients mit Zertifikaten zu ermöglichen, die von der Contoso-Zertifizierungsstelle ausgestellt wurden. Dadurch werden Clientverbindungen von allen Clients entfernt, die nicht Teil der Contoso-Organisation sind.

Hinweis

n:1-Zertifikatzuordnungen unterscheiden sich von 1:1-Zertifikatzuordnungen, die einzelne Clientzertifikate einzelnen Benutzerkonten zuordnen.

Kompatibilität

Version Hinweise
IIS 10.0 Das <manyToOneMappings> Element wurde in IIS 10.0 nicht geändert.
IIS 8.5 Das <manyToOneMappings> Element wurde in IIS 8.5 nicht geändert.
IIS 8.0 Das <manyToOneMappings> Element wurde in IIS 8.0 nicht geändert.
IIS 7.5 Das <manyToOneMappings>-Element wurde in IIS 7.5 nicht geändert.
IIS 7.0 Das <manyToOneMappings>-Element des <iisClientCertificateMappingAuthentication>-Elements wurde in IIS 7.0 eingeführt.
IIS 6.0 Das Element <manyToOneMappings> ersetzt das IIS 6.0 Metabasisobjekt IIsCertMapper.

Setup

Das Element <iisClientCertificateMappingAuthentication> ist für die Standardinstallation von IIS 7 und höher nicht verfügbar. Verwenden Sie zum Installieren die folgenden Schritte.

Windows Server 2012 oder Windows Server 2012 R2

  1. Klicken Sie auf der Taskleiste auf Server-Manager.
  2. Klicken Sie im Server-Manager auf Verwalten und dann auf Rollen und Features hinzufügen.
  3. Klicken Sie im Assistenten zum Hinzufügen von Rollen und Features auf Weiter. Wählen Sie den Installationstyp aus, und klicken Sie auf Weiter. Wählen Sie den Zielserver aus, und klicken Sie auf Weiter.
  4. Erweitern Sie auf der Seite ServerrollenWebserver (IIS), erweitern Sie Webserver, erweitern Sie Sicherheit, und wählen Sie dann die Authentifizierung durch IIS-Clientzertifikatszuordnung. Klicken Sie auf Weiter.
    Screenshot of the Services Roles page showing the I I S Client Certificate Mapping Authentication option being highlighted.
  5. Klicken Sie auf der Seite Features auswählen auf Weiter.
  6. Klicken Sie auf der Seite Installationsauswahl bestätigen auf Installieren.
  7. Klicken Sie auf der Seite Ergebnisse auf Schließen.

Windows 8 oder Windows 8.1

  1. Bewegen Sie auf dem Startbildschirm den Mauszeiger ganz nach links unten, klicken Sie mit der rechten Maustaste auf dieStarttaste und klicken Sie dann auf Systemsteuerung.
  2. Klicken Sie in der Systemsteuerungauf Programme und dann auf „Windows-Features aktivieren oder deaktivieren“.
  3. Erweitern Sie Internetinformationsdienste, erweitern Sie World Wide Web Services, erweitern Sie Sicherheit, und wählen Sie dann die Authentifizierung durch IIS-Clientzertifikatszuordnung.
    Screenshot of the I I S Client Certificate Mapping Authentication folder being selected and highlighted.
  4. Klicken Sie auf OK.
  5. Klicken Sie auf Schließen.

Windows Server 2008 oder Windows Server 2008 R2

  1. Klicken Sie auf der Taskleiste auf Start, zeigen Sie auf Verwaltungstools, und klicken Sie dann auf Server-Manager.
  2. Erweitern Sie im Hierarchiebereich des Server-Managers die Rollenund klicken Sie dann auf den Webserver (IIS) .
  3. Scrollen Sie im Bereich Webserver (IIS) zum Abschnitt "Rollendienste ", und klicken Sie dann auf "Rollendienstehinzufügen".
  4. Wählen Sie auf der Seite Rollendienste auswählen des Assistenten zum Hinzufügen von Rollendiensten die Authentifizierung durch IIS-Clientzertifikatszuordnung, und klicken Sie dann auf Weiter.
    Screenshot of the Add Roles Services Wizard showing the highlighted I I S Client Certificate Mapping Authentication.
  5. Klicken Sie auf der Seite Installationsauswahl bestätigen auf Installieren.
  6. Klicken Sie auf der Seite Ergebnisse auf Schließen.

Windows Vista oder Windows 7

  1. Klicken Sie auf der Taskleiste auf "Start" und dann auf "Systemsteuerung".
  2. Klicken Sie in der Systemsteuerungauf Programmeund dann auf Windows-Features aktivieren oder deaktivieren.
  3. Erweitern Sie Internetinformationsdienste, wählen Sie dann Authentifizierung durch IIS-Clientzertifikatszuordnung, und klicken Sie dann auf OK.
    Screenshot of the expanded Security folder, showing the highlighted I I S Client Certificate Mapping Authentication folder.

Gewusst wie

Es gibt keine Benutzeroberfläche zum Konfigurieren der Authentifizierung durch IIS-Clientzertifikatszuordnung für IIS 7. Beispiele für die programmgesteuerte Konfiguration der Authentifizierung durch IIS-Clientzertifikatszuordnung finden Sie im Abschnitt Codebeispiele dieses Dokuments.

Konfiguration

Attribute

Keine

Untergeordnete Elemente

Element Beschreibung
add Optionales Element.

Fügt der Auflistung von manyToOneMappings eine Zuordnung hinzu.
clear Optionales Element.

Entfernt alle Verweise auf Zuordnungen aus der AuflistungmanyToOneMappings.

Konfigurationsbeispiel

Im folgenden Konfigurationsbeispiel werden die folgenden Aktionen für die Standardwebsite ausgeführt:

  • Aktiviert die Authentifizierung zur IIS-Clientzertifikatszuordnung mithilfe der n:1-Zertifikatzuordnung.
  • Erstellt eine n:1-Zertifikatzuordnungsregel für ein Benutzerkonto basierend auf dem Organisationsfeld im Feld Antragsteller des Clientzertifikats, das Contoso entspricht.
  • Konfiguriert die Site so, dass SSL erforderlich ist und Clientzertifikate ausgehandelt werden.
<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>

Beispielcode

Die folgenden Codebeispiele führen die folgenden Aktionen für die Standardwebsite aus:

  • Aktiviert die Authentifizierung der IIS-Clientzertifikatszuordnung mithilfe der n:1-Zertifikatzuordnung.
  • Erstellt eine n:1-Zertifikatzuordnungsregel für ein Benutzerkonto basierend auf dem Organisationsfeld im Feld Antragsteller des Clientzertifikats, das Contoso entspricht.
  • Konfiguriert die Website so, dass SSL erforderlich ist und Clientzertifikate ausgehandelt werden.

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

Hinweis

Sie müssen unbedingt den Commitparameterapphost festlegen, wenn Sie AppCmd.exe verwenden, um diese Einstellungen zu konfigurieren. Dadurch werden die Konfigurationseinstellungen auf den entsprechenden Speicherortabschnitt in der Datei ApplicationHost.config festgelegt.

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()