Authentification par mappage de certificat client IIS <iisClientCertificateMappingAuthentication>
Vue d’ensemble
L’élément <iisClientCertificateMappingAuthentication>
de l’élément <authentication>
spécifie les paramètres de l’authentification par mappage de certificat client avec IIS.
Il existe deux méthodes différentes pour mapper des certificats clients à l’aide d’IIS :
- Mappages un-à-un : ces mappages associent des certificats clients individuels à des comptes d’utilisateur individuels ; chaque certificat client est mappé à un compte d’utilisateur.
- Mappages plusieurs-à-un : ces mappages associent plusieurs certificats à un compte d’utilisateur en fonction des sous-champs des certificats clients.
Remarque
L’authentification par mappage de certificat client à l’aide d’IIS diffère de l’authentification par mappage de certificat client à l’aide d’Active Directory des manières suivantes :
- Authentification par mappage de certificat client à l’aide d’Active Directory : cette méthode d’authentification nécessite que le serveur IIS 7 et l’ordinateur client soient membres d’un domaine Active Directory et que les comptes d’utilisateur soient stockés dans Active Directory. Cette méthode d’authentification par mappage de certificat client a réduit les performances en raison de l’aller-retour au serveur Active Directory.
- Authentification par mappage de certificat client IIS : cette méthode d’authentification ne nécessite pas Active Directory et fonctionne donc avec des serveurs autonomes. Cette méthode d’authentification par mappage de certificat client a augmenté les performances, mais nécessite davantage de configuration et l’accès aux certificats clients pour créer des mappages.
Pour plus d’informations, consultez Configuration de l’authentification dans IIS 7.0 sur le site web Microsoft TechNet.
Compatibilité
Version | Notes |
---|---|
IIS 10.0 | L’élément <iisClientCertificateMappingAuthentication> n’a pas été modifié dans IIS 10.0. |
IIS 8.5 | L’élément <iisClientCertificateMappingAuthentication> n’a pas été modifié dans IIS 8.5. |
IIS 8.0 | L’élément <iisClientCertificateMappingAuthentication> n’a pas été modifié dans IIS 8.0. |
IIS 7.5 | L’élément <iisClientCertificateMappingAuthentication> n’a pas été modifié dans IIS 7.5. |
IIS 7.0 | L’élément <iisClientCertificateMappingAuthentication> de l’élément <authentication> a été introduit dans IIS 7.0. |
IIS 6.0 | L’élément <iisClientCertificateMappingAuthentication> 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
- 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 par mappage de certificat client IIS. 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 par mappage de certificat client IIS.
- 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 par mappage de certificat client IIS, 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, puis sélectionnez Authentification par mappage de certificat client IIS, puis cliquez sur OK.
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
L’élément <iisClientCertificateMappingAuthentication>
de l’élément <authentication>
peut être configuré au niveau du serveur et du site.
Attributs
Attribut | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
defaultLogonDomain |
Attribut String facultatif. Spécifie le domaine par défaut que le serveur utilise pour authentifier les utilisateurs. |
||||||||||
enabled |
Attribut booléen facultatif. Spécifie si l’authentification par mappage de certificat client à l’aide d’IIS est activée. Par défaut, il s’agit de false . |
||||||||||
logonMethod |
Attribut enum facultatif. L’attribut logonMethod peut être l’une des valeurs possibles suivantes. (Pour plus d’informations sur ces valeurs, consultez LogonUser.) Par défaut, il s’agit de ClearText .
|
||||||||||
manyToOneCertificateMappingsEnabled |
Attribut booléen facultatif. Spécifie si le mappage plusieurs-à-un est activé La valeur par défaut est true . |
||||||||||
oneToOneCertificateMappingsEnabled |
Attribut booléen facultatif. Spécifie si le mappage un-à-un est activé La valeur par défaut est true . |
Éléments enfants
Élément | Description |
---|---|
manyToOneMappings |
Élément facultatif. Mappe les certificats clients à un ensemble de critères génériques qui authentifient les certificats et attribuent un compte d’utilisateur. |
oneToOneMappings |
Élément facultatif. Spécifie des mappages de certificats clients un-à-un. |
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>
L’exemple de configuration suivant active l’authentification par mappage de certificat client IIS à l’aide d’un mappage de certificat un-à-un pour le site web par défaut, crée un mappage de certificat un-à-un pour un compte d’utilisateur et configure le site pour exiger SSL et négocier des certificats clients.
<location path="Default Web Site">
<system.webServer>
<security>
<access sslFlags="Ssl, SslNegotiateCert" />
<authentication>
<windowsAuthentication enabled="false" />
<anonymousAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<basicAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="true"
oneToOneCertificateMappingsEnabled="true">
<oneToOneMappings>
<add enabled="true"
userName="administrator"
password="[enc:57686f6120447564652c2049495320526f636b73:enc]"
certificate="Base64-Encoded-Certificate-Data" />
</oneToOneMappings>
</iisClientCertificateMappingAuthentication>
</authentication>
</security>
</system.webServer>
</location>
Comment récupérer une chaîne encodée en base 64 à partir d’un certificat client
Remarque
Pour récupérer des données de certificat encodées en base 64 pour tous les exemples de cette rubrique, vous pouvez exporter un certificat en procédant comme suit :
Cliquez sur Démarrer, puis sur Exécuter.
Entrez MMC, puis cliquez sur OK.
Quand Microsoft Management Console s’ouvre, cliquez sur Fichier, puis sur Ajouter ou supprimer des composants logiciels enfichables.
Dans la boîte de dialogue Ajouter ou supprimer des composants logiciels enfichables :
- Mettez en surbrillance Certificats dans la liste des composants logiciels enfichables disponibles, puis cliquez sur Ajouter.
- Choisissez de gérer les certificats pour Mon compte d’utilisateur, puis cliquez sur Terminer.
- Cliquez sur OK pour fermer la boîte de dialogue.
Dans Microsoft Management Console :
- Développez Certificats - Utilisateur actuel, puis Personnel, puis Certificats.
- Dans la liste des certificats, cliquez avec le bouton droit sur le certificat que vous souhaitez exporter, puis cliquez sur Toutes les tâches et sur Exporter.
Quand l’Assistant Exportation de certificat s’ouvre :
- Sélectionnez Suivant.
- Choisissez Non, ne pas exporter la clé privée, puis cliquez sur Suivant.
- Choisissez X.509 9 encodé en base 64 (. CER) pour le format d’exportation, puis cliquez sur Suivant.
- Choisissez d’enregistrer le certificat sur votre bureau en tant que MyCertificate.cer, puis cliquez sur Suivant.
- Cliquez sur Terminer ; vous devez voir une boîte de dialogue indiquant que l’exportation a réussi.
Fermez Microsoft Management Console.
Ouvrez le fichier MyCertificate.cer que vous avez exporté à l’aide du Bloc-notes Windows :
- Supprimez « -----BEGIN CERTIFICATE----- » au début du texte.
- Supprimez « -----END CERTIFICATE----- » à la fin du texte.
- Concaténez toutes les lignes en une seule ligne de texte : il s’agit des données de certificat encodées en base 64 que vous utiliserez pour tous les exemples de cette rubrique.
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()
Les exemples de code suivants activent l’authentification par mappage de certificat client IIS à l’aide d’un mappage de certificat un-à-un pour le site web par défaut, créent un mappage de certificat un-à-un pour un compte d’utilisateur et configurent le site pour exiger SSL et négocier des certificats clients.
Remarque
Pour récupérer les données de certificat encodées en base 64 pour les exemples de code répertoriés ci-dessous, vous pouvez exporter un certificat en suivant les étapes listées dans la section Détails de la configuration de ce document.
AppCmd.exe
Remarque
En raison de caractères dans des chaînes de certificat qui ne peuvent pas être analysés par AppCmd.exe, vous ne devez pas utiliser AppCmd.exe pour configurer des mappages de certificats un-à-un IIS.
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["oneToOneCertificateMappingsEnabled"] = true;
ConfigurationElementCollection oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("oneToOneMappings");
ConfigurationElement addElement = oneToOneMappingsCollection.CreateElement("add");
addElement["enabled"] = true;
addElement["userName"] = @"Username";
addElement["password"] = @"Password";
addElement["certificate"] = @"Base-64-Encoded-Certificate-Data";
oneToOneMappingsCollection.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("oneToOneCertificateMappingsEnabled") = True
Dim oneToOneMappingsCollection As ConfigurationElementCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("oneToOneMappings")
Dim addElement As ConfigurationElement = oneToOneMappingsCollection.CreateElement("add")
addElement("enabled") = True
addElement("userName") = "Username"
addElement("password") = "Password"
addElement("certificate") = "Base-64-Encoded-Certificate-Data"
oneToOneMappingsCollection.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("oneToOneCertificateMappingsEnabled").Value = true;
var oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("oneToOneMappings").Collection;
var addElement = oneToOneMappingsCollection.CreateNewElement("add");
addElement.Properties.Item("enabled").Value = true;
addElement.Properties.Item("userName").Value = "Username";
addElement.Properties.Item("password").Value = "Password";
addElement.Properties.Item("certificate").Value = "Base-64-Encoded-Certificate-Data";
oneToOneMappingsCollection.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("oneToOneCertificateMappingsEnabled").Value = True
Set oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("oneToOneMappings").Collection
Set addElement = oneToOneMappingsCollection.CreateNewElement("add")
addElement.Properties.Item("enabled").Value = True
addElement.Properties.Item("userName").Value = "Username"
addElement.Properties.Item("password").Value = "Password"
addElement.Properties.Item("certificate").Value = "Base-64-Encoded-Certificate-Data"
oneToOneMappingsCollection.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()