Konfigurieren von n:1-Clientzertifikatzuordnungen für IIS 7.0 und 7.5
In diesem Artikel wird erläutert, wie Sie das Konfigurations-Editor-Feature in Microsoft-Internetinformationsdienste (IIS) verwenden, um n:1-Clientzertifikatzuordnungen zu konfigurieren.
Ursprüngliche Produktversion: Internetinformationsdienste 7.0, 7.5
Ursprüngliche KB-Nummer: 2026113
Einführung
Die N:1-Clientzertifikatzuordnung wird von IIS verwendet, um einen Endbenutzer einem Windows Konto zuzuordnen, wenn das Clientzertifikat für die Benutzerauthentifizierung verwendet wird. Die Sitzung des Benutzers wird im Kontext dieses zugeordneten Windows-Kontos von IIS ausgeführt. Um wie erwartet zu funktionieren, müssen Sie sicherstellen, dass die Zertifikat-zu-Konto-Zuordnung in IIS ordnungsgemäß konfiguriert ist.
In IIS 6.0 hatten Benutzer die Möglichkeit, die N:1-Clientzertifikatzuordnung über die IIS-Manager-Benutzeroberfläche zu konfigurieren. In IIS 7.0 und 7.5 ist diese Schnittstelle weder für 1:1- noch n:1-Zuordnungen vorhanden. In diesem Artikel wird die Verwendung des Konfigurations-Editor-Features von IIS zum Konfigurieren von n:1-Clientzertifikatzuordnungen behandelt.
Hinweis
Informationen zur Verwendung des Konfigurations-Editors zum Konfigurieren von 1:1-Clientzertifikatzuordnungen finden Sie unter Konfigurieren von 1:1-Clientzertifikatzuordnungen.
IIS 7.0/7.5-Schema
Dies ist das Schema für das IiS-Clientzertifikatzuordnungs-Authentifizierungsfeature in IIS 7.0 und IIS 7.5:
<sectionSchema name="system.webServer/security/authentication/iisClientCertificateMappingAuthentication">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="manyToOneCertificateMappingsEnabled" type="bool" defaultValue="true" />
...
<element name="manyToOneMappings">
<collection addElement="add" clearElement="clear">
<attribute name="name" type="string" required="true" isUniqueKey="true"
validationType="nonEmptyString" />
<attribute name="description" type="string" />
<attribute name="enabled" type="bool" defaultValue="true"/>
<attribute name="permissionMode" type="enum" defaultValue="Allow">
<enum name="Allow" value="1"/>
<enum name="Deny" value="2" />
</attribute>
<element name="rules">
<collection addElement="add" clearElement="clear">
<attribute name="certificateField" type="enum" required="true" isCombinedKey="true">
<enum name="Subject" value="1" />
<enum name="Issuer" value="2" />
</attribute>
<attribute name="certificateSubField" type="string" caseSensitive="true"
required="true" isCombinedKey="true" />
<attribute name="matchCriteria" type="string" caseSensitive="true"
required="true" isCombinedKey="true" />
<attribute name="compareCaseSensitive" type="bool" isCombinedKey="true" defaultValue="true" />
</collection>
</element>
<attribute name="userName" type="string" validationType="nonEmptyString" />
<attribute name="password" type="string" caseSensitive="true" encrypted="true"
defaultValue="[enc:AesProvider::enc]" />
</collection>
</element>
...
</sectionSchema>
Voraussetzungen
Hier sind die Voraussetzungen, die für diese exemplarische Vorgehensweise erforderlich sind:
Sie haben das IIS-Clientzertifikatzuordnungsmodul auf dem IIS-Server installiert.
Eine Website ist mit einer HTTPS-Bindung (Hypertext Transfer Protocol Secure) konfiguriert, die SSL-Verbindungen (Secure Sockets Layer) akzeptieren kann.
Auf dem Client ist ein Clientzertifikat installiert.
Das IIS 7 Administration Pack wird auf dem IIS 7.0-Server installiert.
Hinweis
Der Konfigurations-Editor wird standardmäßig in IIS 7.5 ausgeliefert.
Konfigurieren der Zertifikatzuordnung mithilfe des Konfigurations-Editors
Starten Sie den IIS-Manager, und wählen Sie die Website aus, die für die Clientzertifikatauthentifizierung konfiguriert werden soll.
Wählen Sie in der Featuresansicht im Abschnitt "Verwaltung" den Konfigurations-Editor aus.
Wechseln Sie
system.webServer/security/authentication/iisClientCertificateMappingAuthenticationzum Dropdownfeld wie unten dargestellt:
Hier sehen Sie ein Fenster zum Konfigurieren von N:1- oder 1:1-Zertifikatzuordnungen. Dies ist die über den Konfigurations-Editor bereitgestellte Benutzeroberfläche, auf der Sie alle Zuordnungskonfigurationen einrichten können.
Ändern Sie die Eigenschaften über diese grafische Benutzeroberfläche (GUI).
- Aktiviert auf True.
- Legen Sie manyToOneCertificateMappingsEnabled auf True fest.
- Wählen Sie "manyToOneMappings" aus, und klicken Sie auf die Schaltfläche mit den Auslassungspunkten, um ein neues Fenster zum Konfigurieren von Zuordnungen zu starten.
Wählen Sie unter diesem neuen Fenster aus, um ein neues Element hinzuzufügen. Sie können die Eigenschaften innerhalb des Fensters wie unten dargestellt ändern:
Klicken Sie auf die Schaltfläche mit den Auslassungspunkten für Regeln, sodass Sie mehrere Muster für den Abgleich basierend auf den Zertifikateigenschaften hinzufügen können.
In diesen Beispielbildern gibt es zwei Einträge für Regeln zum Zuordnen des Zertifikats.
Zunächst sind die Felder "Antragsteller" und "Aussteller" im Zertifikat enthalten. Zweitens gibt es die Matchcriteria-Eigenschaft, um das Zertifikat dem Konto "mydomain\testuser" zuzuordnen.
In der abbildung unten wird die endgültige Zuordnung für ein bestimmtes Windows-Konto veranschaulicht. Wie Sie sehen können, gibt es zwei Einträge für Regeln für dieses Konto.
Auf ähnliche Weise können Sie andere Zuordnungen für die Konten basierend auf den Feldern Aussteller und Betreff im Zertifikat haben.
Konfigurieren der Zertifikatzuordnung nach APPCMD.exe
Bisher wurde gezeigt, dass der Konfigurations-Editor verwendet wird, der eine grafische Oberfläche zum einfachen Festlegen der Konfiguration bereitstellt. Sie können dasselbe mithilfe von APPCMD.exe Befehlen erreichen, und tatsächlich führt der Konfigurations-Editor dasselbe im Hintergrund aus und fügt diese Einstellungen in die ApplicationHost.config Datei ein.
Der Konfigurations-Editor bietet Ihnen auch die Möglichkeit, diese Befehle manuell auszuführen, und generiert die Skripts, um dies über die Benutzeroberfläche selbst zu erreichen:
Dies sind die Codeausschnitte, um die gleichen Schritte wie oben zum Konfigurieren der Zertifikatzuordnung auszuführen. Sie wurden mithilfe des Skriptgenerierungsfeatures des Konfigurations-Editors generiert.
AppCmd-Befehle
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='My 1st Mapping',description='1st User Mapping',userName='mydomain\testuser',password='abcdef']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /+"manyToOneMappings.[name='My 1st Mapping',description='1st User Mapping',userName='mydomain\testuser',password='abcdef'].rules.[certificateField='Subject',certificateSubField='CN',matchCriteria='Test User']" /commit:apphost
C#-Code
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"] = @"My 1st Mapping";
addElement["description"] = @"1st User Mapping";
addElement["userName"] = @"mydomain\testuser";
addElement["password"] = @"abcdef";
ConfigurationElementCollection rulesCollection = addElement.GetCollection("rules");
ConfigurationElement addElement1 = rulesCollection.CreateElement("add");
addElement1["certificateField"] = @"Subject";
addElement1["certificateSubField"] = @"CN";
addElement1["matchCriteria"] = @"Test User";
rulesCollection.Add(addElement1);
manyToOneMappingsCollection.Add(addElement);
serverManager.CommitChanges();
}
}
}
Scripting (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 = "My 1st Mapping";
addElement.Properties.Item("description").Value = "1st User Mapping";
addElement.Properties.Item("userName").Value = "mydomain\\testuser";
addElement.Properties.Item("password").Value = "abcdef";
var rulesCollection = addElement.ChildElements.Item("rules").Collection;
var addElement1 = rulesCollection.CreateNewElement("add");
addElement1.Properties.Item("certificateField").Value = "Subject";
addElement1.Properties.Item("certificateSubField").Value = "CN";
addElement1.Properties.Item("matchCriteria").Value = "Test User";
rulesCollection.AddElement(addElement1);
manyToOneMappingsCollection.AddElement(addElement);
adminManager.CommitChanges();