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
- Klicken Sie auf der Taskleiste auf Server-Manager.
- Klicken Sie im Server-Manager auf Verwalten und dann auf Rollen und Features hinzufügen.
- 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.
- 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.
- Klicken Sie auf der Seite Features auswählen auf Weiter.
- Klicken Sie auf der Seite Installationsauswahl bestätigen auf Installieren.
- Klicken Sie auf der Seite Ergebnisse auf Schließen.
Windows 8 oder Windows 8.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.
- Klicken Sie in der Systemsteuerungauf Programme und dann auf „Windows-Features aktivieren oder deaktivieren“.
- Erweitern Sie Internetinformationsdienste, erweitern Sie World Wide Web Services, erweitern Sie Sicherheit, und wählen Sie dann die Authentifizierung durch IIS-Clientzertifikatszuordnung.
- Klicken Sie auf OK.
- Klicken Sie auf Schließen.
Windows Server 2008 oder Windows Server 2008 R2
- Klicken Sie auf der Taskleiste auf Start, zeigen Sie auf Verwaltungstools, und klicken Sie dann auf Server-Manager.
- Erweitern Sie im Hierarchiebereich des Server-Managers die Rollenund klicken Sie dann auf den Webserver (IIS) .
- Scrollen Sie im Bereich Webserver (IIS) zum Abschnitt "Rollendienste ", und klicken Sie dann auf "Rollendienstehinzufügen".
- 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.
- Klicken Sie auf der Seite Installationsauswahl bestätigen auf Installieren.
- Klicken Sie auf der Seite Ergebnisse auf Schließen.
Windows Vista oder Windows 7
- Klicken Sie auf der Taskleiste auf "Start" und dann auf "Systemsteuerung".
- Klicken Sie in der Systemsteuerungauf Programmeund dann auf Windows-Features aktivieren oder deaktivieren.
- Erweitern Sie Internetinformationsdienste, wählen Sie dann Authentifizierung durch IIS-Clientzertifikatszuordnung, und klicken Sie dann auf OK.
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()