Compartir a través de


Autenticación de asignación de certificados de cliente de IIS <iisClientCertificateMappingAuthentication>

Información general

El elemento <iisClientCertificateMappingAuthentication> del elemento <authentication> especifica la configuración de autenticación de asignación de certificados de cliente mediante IIS.

Hay dos métodos diferentes para asignar certificados de cliente mediante IIS:

  • Asignaciones uno a uno: estas asignaciones hacen coincidir certificados de cliente individuales con cuentas de usuario individuales de uno a uno; cada certificado de cliente se asigna a una cuenta de usuario.
  • Asignaciones de varios a uno: estas asignaciones coinciden con varios certificados en una cuenta de usuario en función de los subcampos de los certificados de cliente.

Nota:

La autenticación de asignación de certificados de cliente con IIS difiere de la asignación de certificados de cliente mediante Active Directory en los siguientes aspectos:

  • Autenticación de asignación de certificados de cliente mediante Active Directory: este método de autenticación requiere que el servidor IIS 7 y el equipo cliente sean miembros de un dominio de Active Directory y las cuentas de usuario estén almacenadas en Active Directory. Este método de autenticación de asignación de certificados de cliente tiene un rendimiento reducido debido a la ida y vuelta al servidor de Active Directory.
  • Autenticación de asignación de certificados de cliente de IIS: este método de autenticación no requiere Active Directory y, por tanto, funciona con servidores independientes. Este método de autenticación de asignación de certificados de cliente ha aumentado el rendimiento, pero requiere más configuración y acceso a los certificados de cliente para crear asignaciones.

Para obtener más información, consulte Configuración de la autenticación en IIS 7.0 en el sitio web de Microsoft TechNet.

Compatibilidad

Versión Notas
IIS 10.0 El elemento <iisClientCertificateMappingAuthentication> no se modificó en IIS 10.0.
IIS 8.5 El elemento <iisClientCertificateMappingAuthentication> no se modificó en IIS 8.5.
IIS 8.0 El elemento <iisClientCertificateMappingAuthentication> no se modificó en IIS 8.0.
IIS 7.5 El elemento <iisClientCertificateMappingAuthentication> no se modificó en IIS 7.5.
IIS 7.0 El elemento <iisClientCertificateMappingAuthentication> del elemento <authentication> se introdujo en IIS 7.0.
IIS 6,0 El elemento <iisClientCertificateMappingAuthentication> reemplaza el objeto de metabase IIS 6.0 IIsCertMapper.

Configuración

El elemento <iisClientCertificateMappingAuthentication> no está disponible en la instalación predeterminada de IIS 7 y versiones posteriores. Para instalarlo, siga estos pasos.

Windows Server 2012 o Windows Server 2012 R2

  1. En la barra de tareas, haga clic en Administrador del servidor.
  2. En Administrador del servidor, haga clic en el menú Administrar y, después, haga clic en Agregar roles y características.
  3. En el asistente para Agregar roles y características, haga clic en Siguiente. Seleccione el tipo de instalación y haga clic en Siguiente. Seleccione el servidor de destino y haga clic en Siguiente.
  4. En la página Roles de servidor, expanda Servidor web (IIS), expanda Servidor web, expanda Seguridad y, a continuación, seleccione Autenticación de asignación de certificado de cliente IIS. Haga clic en Next.
    Screenshot of the I I S Client Certificate Mapping Authentication option being highlighted and selected.
  5. En la página Seleccionar características, haz clic en Siguiente.
  6. En la página Confirmar selecciones de instalación, haga clic en Instalar.
  7. En la página Resultados , haga clic en Cerrar.

Windows 8 o Windows 8.1

  1. En la pantalla Inicio, mueva el puntero hasta la esquina inferior izquierda, haga clic con el botón derecho en el botón Inicio y, a continuación, haga clic en Panel de control.
  2. En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.
  3. Expanda Internet Information Services, expanda Servicios World Wide Web, expanda Seguridad y, a continuación, seleccione Autenticación de asignación de certificados de cliente de IIS.
    Screenshot of the I I S Client Certificate Mapping Authentication folder being highlighted and selected.
  4. Haga clic en OK.
  5. Haga clic en Cerrar.

Windows Server 2008 o Windows Server 2008 R2

  1. En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, luego, haga clic en Administrador del servidor.
  2. En el panel de jerarquía del Administrador del servidor, expanda Roles y, luego, haga clic en Servidor web (IIS).
  3. En el panel Servidor web (IIS), desplácese hasta la sección Servicios de rol y, luego, haga clic en Agregar servicios de rol.
  4. En la página Seleccionar servicios de rol del Asistente para agregar servicios de rol, seleccione Autenticación de asignación de certificados de cliente de IIS y, a continuación, haga clic en Siguiente.
    Screenshot of the Add Role Services Wizard with the I I S Client Certificate Mapping Authentication option being highlighted.
  5. En la página Confirmar selecciones de instalación, haz clic en Instalar.
  6. En la página Resultados , haga clic en Cerrar.

Windows Vista o Windows 7

  1. En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
  2. En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.
  3. Expanda Internet Information Services, seleccione Autenticación de asignación de certificados de cliente de IIS y, a continuación, haga clic en Aceptar.
    Screenshot of the Security folder being expanded, showing the highlighted I I S Client Certificate Mapping Authentication folder.

Procedimientos

No hay ninguna interfaz de usuario para configurar la autenticación de asignación de certificados de cliente de IIS en IIS 7. Para obtener ejemplos de cómo configurar la autenticación de asignación de certificados de cliente de IIS con programación, consulte la sección Código de ejemplo de este documento.

Configuración

El elemento <iisClientCertificateMappingAuthentication> del elemento <authentication> se puede configurar en el nivel de servidor y sitio.

Atributos

Atributo Descripción
defaultLogonDomain Atributo String opcional.

Especifica el dominio predeterminado que usa el servidor para autenticar a los usuarios.
enabled Atributo Boolean opcional.

Especifica si está activada la autenticación de asignación de certificados de cliente mediante IIS.

El valor predeterminado es false.
logonMethod Atributo enum opcional.

El atributo logonMethod puede ser uno de los siguientes valores posibles. (Para obtener más información sobre estos valores, consulte LogonUser).

El valor predeterminado es ClearText.
Valor Descripción
Batch Este tipo de inicio de sesión está pensado para servidores por lotes, donde los procesos se pueden ejecutar en nombre de un usuario sin su intervención directa.

El valor numérico es 1.
ClearText Este tipo de inicio de sesión conserva el nombre y la contraseña en el paquete de autenticación, lo que permite al servidor realizar conexiones a otros servidores de red al suplantar al cliente.

El valor numérico es 3.
Interactive Este tipo de inicio de sesión está pensado para los usuarios que van a usar interactivamente el equipo.

El valor numérico es 0.
Network Este tipo de inicio de sesión está diseñado para servidores de alto rendimiento para autenticar contraseñas de texto no cifrado. Las credenciales no se almacenan en caché para este tipo de inicio de sesión.

El valor numérico es 2.
manyToOneCertificateMappingsEnabled Atributo Boolean opcional.

Especifica si la asignación de varios a uno está habilitada

El valor predeterminado es true.
oneToOneCertificateMappingsEnabled Atributo Boolean opcional.

Especifica si la asignación uno a uno está habilitada

El valor predeterminado es true.

Elementos secundarios

Elemento Descripción
manyToOneMappings Elemento opcional.

Asigna certificados de cliente a un conjunto de criterios de caracteres comodín que autentican los certificados y asignan una cuenta de usuario.
oneToOneMappings Elemento opcional.

Especifica asignaciones de certificados de cliente de uno a uno.

Ejemplo de configuración

En el siguiente ejemplo de configuración se realizan las siguientes acciones para el sitio web predeterminado:

  • Habilita la autenticación de asignación de certificados de cliente de IIS mediante la asignación de certificados de varios a uno.
  • Crea una regla de asignación de certificados de varios a uno para una cuenta de usuario según el campo de la organización del asunto del certificado de cliente que coincida con Contoso.
  • Configura el sitio para requerir SSL y negociar los certificados de cliente.
<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>

En el siguiente ejemplo de configuración se habilita la autenticación de asignación de certificados de cliente de IIS mediante la asignación de certificados de uno a uno para el sitio web predeterminado, se crea una asignación de certificado de uno a uno para una cuenta de usuario y se configura el sitio para requerir SSL y negociar certificados de cliente.

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

Cómo recuperar una cadena codificada en Base-64 de un certificado de cliente

Nota:

Para recuperar datos de certificado codificados en Base-64 para todos los ejemplos de este tema, puede exportar un certificado mediante los siguientes pasos:

  1. Haga clic en Iniciar y, a continuación, Ejecutar.

  2. Escriba MMC y haga clic en Aceptar.

  3. Cuando se abra Microsoft Management Console, haga clic en Archivoy, a continuación, Agregar o quitar complementos.

  4. En el cuadro de diálogo Agregar o quitar complementos:

    • Resalte Certificados en la lista de complementos disponibles y haga clic en Agregar.
    • Elija administrar certificados para Mi cuenta de usuarioy haga clic en Finalizar.
    • Haga clic en Aceptar para cerrar el cuadro de diálogo.
  5. En Microsoft Management Console:

    • Expanda Certificados: usuario actual y, a continuación, Personaly, a continuación, Certificados.
    • En la lista de certificados, haga clic con el botón derecho en el certificado que desea exportar y, a continuación, haga clic en Todas las tareas y, a continuación, haga clic en Exportar.
  6. Cuando se abra el asistente para exportación de certificados:

    • Haga clic en Next.
    • Elija No, no exporte la clave privada y haga clic en Siguiente.
    • Elija X.509 9 codificado en Base-64 (.CER) para el formato de exportación y, a continuación, haga clic en Siguiente.
    • Elija guardar el certificado en el escritorio como MyCertificate.cer y haga clic en Siguiente.
    • Haga clic en Finalizar; debería ver un cuadro de diálogo que indica que la exportación se realizó correctamente.
  7. Cierre Microsoft Management Console.

  8. Abra el archivo MyCertificate.cer que exportó con el Bloc de notas de Windows:

    • Quite "-----BEGIN CERTIFICATE-----" del inicio del texto.
    • Quite "-----END CERTIFICATE-----" del final del texto.
    • Concatenar todas las líneas en una sola línea de texto: se trata de los datos de certificado codificados en Base-64 que usará para todos los ejemplos de este tema.

Código de ejemplo

Los siguientes códigos de ejemplo hacen las siguientes acciones en el sitio web predeterminado:

  • Habilita la autenticación de asignación de certificados de cliente de IIS mediante la asignación de certificados de varios a uno.
  • Crea una regla de asignación de certificados de varios a uno para una cuenta de usuario según el campo de la organización del asunto del certificado de cliente que coincida con Contoso.
  • Configura el sitio para requerir SSL y negociar los certificados de cliente.

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:

Debe asegurarse de establecer el parámetro de confirmación en apphost cuando use AppCmd.exe para configurar estas opciones. Esto confirma los valores de configuración en la sección de ubicación adecuada del archivo 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()

Los siguientes ejemplos de código habilitan la autenticación de asignación de certificados de cliente IIS mediante la asignación de certificados uno a uno para el sitio web predeterminado, crean una asignación de certificados uno a uno para una cuenta de usuario y configuran el sitio para que requiera SSL y negocie certificados de cliente.

Nota:

Para recuperar los datos de certificado codificados en Base-64 para los ejemplos de código que se enumeran a continuación, puede exportar un certificado siguiendo los pasos que aparecen en la sección Detalles de configuración de este documento.

AppCmd.exe

Nota:

Debido a los caracteres de las cadenas de certificado que no se pueden analizar mediante AppCmd.exe, no debe usar AppCmd.exe para configurar asignaciones de certificados uno a uno de 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()