Condividi tramite


Autenticazione <del mapping dei certificati client IISClientCertificateMappingAuthentication>

Panoramica

L'elemento <iisClientCertificateMappingAuthentication> dell'elemento <authentication> specifica le impostazioni per l'autenticazione del mapping dei certificati client tramite IIS.

Esistono due metodi diversi per il mapping dei certificati client tramite IIS:

  • Mapping uno-a-uno : questi mapping corrispondono a singoli certificati client a singoli account utente uno-a-uno; viene eseguito il mapping di ogni certificato client a un account utente.
  • Mapping molti-a-uno : questi mapping corrispondono a più certificati a un account utente in base ai sottocampi nei certificati client.

Nota

L'autenticazione di mapping dei certificati client tramite IIS differisce dal mapping dei certificati client usando Active Directory nei modi seguenti:

  • Autenticazione mapping certificati client tramite Active Directory : questo metodo di autenticazione richiede che il server IIS 7 e il computer client siano membri di un dominio Active Directory e che gli account utente siano archiviati in Active Directory. Questo metodo di autenticazione del mapping dei certificati client ha ridotto le prestazioni a causa del round trip al server Active Directory.
  • Autenticazione del mapping dei certificati client IIS : questo metodo di autenticazione non richiede Active Directory e pertanto funziona con i server autonomi. Questo metodo di autenticazione del mapping dei certificati client ha migliorato le prestazioni, ma richiede più configurazione e accesso ai certificati client per creare mapping.

Per altre informazioni, vedere Configurazione dell'autenticazione in IIS 7.0 nel sito Web Microsoft TechNet.

Compatibilità

Versione Note
IIS 10.0 L'elemento <iisClientCertificateMappingAuthentication> non è stato modificato in IIS 10.0.
IIS 8,5 L'elemento <iisClientCertificateMappingAuthentication> non è stato modificato in IIS 8.5.
IIS 8,0 L'elemento <iisClientCertificateMappingAuthentication> non è stato modificato in IIS 8.0.
IIS 7,5 L'elemento <iisClientCertificateMappingAuthentication> non è stato modificato in IIS 7.5.
IIS 7.0 L'elemento <iisClientCertificateMappingAuthentication> dell'elemento <authentication> è stato introdotto in IIS 7.0.
IIS 6.0 L'elemento <iisClientCertificateMappingAuthentication> sostituisce l'oggetto metabase IIS 6.0 IIsCertMapper .

Installazione

L'elemento <iisClientCertificateMappingAuthentication> non è disponibile nell'installazione predefinita di IIS 7 e versioni successive. Per installarlo, seguire questa procedura.

Windows Server 2012 o Windows Server 2012 R2

  1. Sulla barra delle applicazioni fare clic su Server Manager.
  2. In Server Manager fare clic sul menu Gestisci e quindi su Aggiungi ruoli e funzionalità.
  3. Nella procedura guidata Aggiungi ruoli e funzionalità fare clic su Avanti. Selezionare il tipo di installazione e fare clic su Avanti. Selezionare il server di destinazione e fare clic su Avanti.
  4. Nella pagina Ruoli server espandere Server Web (IIS), server Web, sicurezzae quindi selezionare Autenticazione mapping certificati client IIS. Fare clic su Avanti.
    Screenshot dell'opzione I S Client Certificate Mapping Authentication evidenziata e selezionata.
  5. Nella pagina Selezione funzionalità fare clic su Avanti.
  6. Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
  7. Nella pagina Risultati fare clic su Chiudi.

Windows 8 o Windows 8.1

  1. Nella schermata Start spostare il puntatore fino all'angolo inferiore sinistro, fare clic con il pulsante destro del mouse sul pulsante Start e quindi scegliere Pannello di controllo.
  2. In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
  3. Espandere Internet Information Services, servizi Web a livello mondiale, sicurezza, quindi selezionare Autenticazione mapping certificati client IIS.
    Screenshot della cartella I S Client Certificate Mapping Authentication evidenziata e selezionata.
  4. Fare clic su OK.
  5. Fare clic su Close.

Windows Server 2008 o Windows Server 2008 R2

  1. Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Server Manager.
  2. Nel riquadro della gerarchia Server Manager espandere Ruoli, quindi fare clic su Server Web (IIS).
  3. Nel riquadro Server Web (IIS) scorrere fino alla sezione Servizi ruolo e quindi fare clic su Aggiungi servizi ruolo.
  4. Nella pagina Selezione servizi ruolo della Procedura guidata Aggiungi servizi ruolo selezionare Autenticazione mapping certificati client IIS e quindi fare clic su Avanti.
    Screenshot dell'Aggiunta guidata servizi ruolo con l'opzione Autenticazione mapping certificati client I S evidenziata.
  5. Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
  6. Nella pagina Risultati fare clic su Chiudi.

Windows Vista o Windows 7

  1. Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
  2. In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
  3. Espandere Internet Information Services, quindi selezionare Autenticazione mapping certificati client IIS, quindi fare clic su OK.
    Screenshot della cartella Sicurezza espansa, che mostra la cartella I S Client Certificate Mapping Authentication evidenziata.

Procedure

Non è disponibile alcuna interfaccia utente per la configurazione dell'autenticazione del mapping dei certificati client IIS per IIS 7. Per esempi di come configurare l'autenticazione di mapping dei certificati client IIS a livello di codice, vedere la sezione Esempi di codice di questo documento.

Configurazione

L'elemento <iisClientCertificateMappingAuthentication> dell'elemento <authentication> può essere configurato a livello di server e sito.

Attributi

Attributo Descrizione
defaultLogonDomain Attributo String facoltativo.

Specifica il dominio predefinito utilizzato dal server per autenticare gli utenti.
enabled Attributo booleano facoltativo.

Specifica se l'autenticazione di mapping dei certificati client tramite IIS è abilitata.

Il valore predefinito è false.
logonMethod Attributo di enumerazione facoltativo.

L'attributo logonMethod può essere uno dei valori possibili seguenti. Per altre informazioni su questi valori, vedere LogonUser.

Il valore predefinito è ClearText.
Valore Descrizione
Batch Questo tipo di accesso è destinato ai server batch, in cui i processi possono essere eseguiti per conto di un utente senza l'intervento diretto.

Il valore numerico è 1.
ClearText Questo tipo di accesso mantiene il nome e la password nel pacchetto di autenticazione, che consente al server di stabilire connessioni ad altri server di rete durante la rappresentazione del client.

Il valore numerico è 3.
Interactive Questo tipo di accesso è destinato agli utenti che usano il computer in modo interattivo.

Il valore numerico è 0.
Network Questo tipo di accesso è destinato ai server ad alte prestazioni per autenticare le password in testo non crittografato. Le credenziali non vengono memorizzate nella cache per questo tipo di accesso.

Il valore numerico è 2.
manyToOneCertificateMappingsEnabled Attributo booleano facoltativo.

Specifica se il mapping molti-a-uno è abilitato

Il valore predefinito è true.
oneToOneCertificateMappingsEnabled Attributo booleano facoltativo.

Specifica se è abilitato il mapping uno-a-uno

Il valore predefinito è true.

Elementi figlio

Elemento Descrizione
manyToOneMappings Elemento facoltativo.

Esegue il mapping dei certificati client a un set di criteri con caratteri jolly che autenticano i certificati e assegnano un account utente.
oneToOneMappings Elemento facoltativo.

Specifica i mapping dei certificati client uno a uno.

Esempio di configurazione

Nell'esempio di configurazione seguente vengono eseguite le azioni seguenti per il sito Web predefinito:

  • Abilita l'autenticazione del mapping dei certificati client IIS usando il mapping di certificati molti-a-uno.
  • Crea una regola di mapping dei certificati molti-a-uno per un account utente in base al campo dell'organizzazione nell'oggetto del certificato client corrispondente a Contoso.
  • Configura il sito per richiedere SSL e negoziare i certificati client.
<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>

Nell'esempio di configurazione seguente viene abilitata l'autenticazione del mapping dei certificati client IIS usando il mapping di certificati uno-a-uno per il sito Web predefinito, viene creato un mapping di certificati uno-a-uno per un account utente e viene configurato il sito per richiedere SSL e negoziare i certificati client.

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

Come recuperare la stringa con codifica Base 64 da un certificato client

Nota

Per recuperare i dati di un certificato con codifica Base 64 per tutti gli esempi in questo argomento, è possibile esportare un certificato seguendo questa procedura:

  1. Fare clic su Start, quindi su Esegui.

  2. Immettere MMC e quindi fare clic su OK.

  3. Quando si apre Microsoft Management Console, fare clic su File, quindi su Aggiungi/Rimuovi snap-in.

  4. Nella finestra di dialogo Aggiungi o Rimuovi snap-in :

    • Evidenziare Certificati nell'elenco degli snap-in disponibili, quindi fare clic su Aggiungi.
    • Scegliere di gestire i certificati per Account utente personale, quindi fare clic su Fine.
    • Fare clic su OK per chiudere la finestra di dialogo.
  5. In the Microsoft Management Console:

    • Espandere Certificati - Utente corrente, quindi Personale, quindi Certificati.
    • Nell'elenco dei certificati fare clic con il pulsante destro del mouse sul certificato da esportare, quindi scegliere Tutte le attività, quindi fare clic su Esporta.
  6. Quando si apre l'Esportazione guidata certificati :

    • Fare clic su Avanti.
    • Scegliere No, non esportare la chiave privata, quindi fare clic su Avanti.
    • Scegliere Base-64 con codifica X.509 9 (. CER) per il formato di esportazione, quindi fare clic su Avanti.
    • Scegliere di salvare il certificato sul desktop come MyCertificate.cer, quindi fare clic su Avanti.
    • Fare clic su Fine; verrà visualizzata una finestra di dialogo che indica che l'esportazione è riuscita.
  7. Chiudere Microsoft Management Console.

  8. Aprire il file MyCertificate.cer esportato usando Il Blocco note di Windows:

    • Rimuovere "-----BEGIN CERTIFICATE-----" dall'inizio del testo.
    • Rimuovere "-----END CERTIFICATE-----" dalla fine del testo.
    • Concatenare tutte le righe in una singola riga di testo: si tratta dei dati del certificato con codifica Base 64 che verranno usati per tutti gli esempi in questo argomento.

Codice di esempio

Gli esempi di codice seguenti eseguono le azioni seguenti per il sito Web predefinito:

  • Abilitare l'autenticazione del mapping dei certificati client IIS usando il mapping di certificati molti-a-uno.
  • Creare una regola di mapping dei certificati molti-a-uno per un account utente in base al campo dell'organizzazione nell'oggetto del certificato client corrispondente a Contoso.
  • Configurare il sito per richiedere SSL e negoziare i certificati client.

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

Nota

È necessario assicurarsi di impostare il parametro commit su apphost quando si usa AppCmd.exe per configurare queste impostazioni. In questo modo le impostazioni di configurazione vengono confermate nella sezione relativa al percorso appropriato nel file 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()

Gli esempi di codice seguenti consentono l'autenticazione del mapping dei certificati client IIS usando il mapping di certificati uno a uno per il sito Web predefinito, creare un unico mapping di certificati uno-a-uno per un account utente e configurare il sito per richiedere SSL e negoziare i certificati client.

Nota

Per recuperare i dati del certificato con codifica Base 64 per gli esempi di codice elencati di seguito, è possibile esportare un certificato seguendo i passaggi elencati nella sezione Dettagli configurazione di questo documento.

AppCmd.exe

Nota

A causa dei caratteri nelle stringhe di certificato che non possono essere analizzate da AppCmd.exe, non è consigliabile usare AppCmd.exe per configurare i mapping dei certificati uno-a-uno di 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()