Autenticação do mapeamento de certificado do cliente IIS <iisClientCertificateMappingAuthentication>

Visão geral

O elemento <iisClientCertificateMappingAuthentication> do elemento <authentication> especifica as configurações para autenticação de Mapeamento do Certificado do Cliente usando o IIS.

Há dois métodos diferentes para mapear certificados do cliente usando o IIS:

  • Mapeamentos Um para Um - Esses mapeamentos correspondem a certificados de cliente individuais com contas de usuário individuais em uma base um para um; cada certificado do cliente é mapeado para uma conta de usuário.
  • Mapeamentos Muitos para Um - Esses mapeamentos fazem a correspondência de vários certificados a uma conta de usuário com base em subcampos em certificados do cliente.

Observação

A autenticação de Mapeamento de Certificado do Cliente usando o IIS difere do Mapeamento de Certificado do Cliente usando o Active Directory das seguintes maneiras:

  • Autenticação de Mapeamento de Certificado do Cliente usando o Active Directory - esse método de autenticação requer que o servidor IIS 7 e o computador cliente sejam membros de um domínio do Active Directory e que as contas de usuário sejam armazenadas no Active Directory. Esse método de autenticação de mapeamento de certificado do cliente reduziu o desempenho devido à viagem de ida e volta ao servidor do Active Directory.
  • Autenticação de Mapeamento de Certificado do Cliente IIS - Esse método de autenticação não requer o Active Directory e, portanto, funciona com servidores autônomos. Esse método de autenticação de mapeamento de certificado do cliente aumentou o desempenho, mas exige mais configuração e acesso a certificados do cliente para criar mapeamentos.

Para obter mais informações, consulte Configurando a autenticação no IIS 7.0 no site Microsoft TechNet.

Compatibilidade

Versão Observações
IIS 10.0 O elemento <iisClientCertificateMappingAuthentication> não foi modificado no IIS 10.0.
IIS 8.5 O elemento <iisClientCertificateMappingAuthentication> não foi modificado no IIS 8.5.
IIS 8.0 O elemento <iisClientCertificateMappingAuthentication> não foi modificado no IIS 8.0.
IIS 7.5 O elemento <iisClientCertificateMappingAuthentication> não foi modificado no IIS 7.5.
IIS 7.0 O elemento <iisClientCertificateMappingAuthentication> do elemento <authentication> foi introduzido no IIS 7.0.
IIS 6,0 O elemento <iisClientCertificateMappingAuthentication> substitui o objeto de metabase IIsCertMapper do IIS 6.0.

Instalação

O elemento <iisClientCertificateMappingAuthentication> não está disponível na instalação padrão do IIS 7 e posterior. Para instalar, use as etapas a seguir.

Windows Server 2012 R2 ou Windows Server 2012

  1. Na barra de tarefas, clique em Gerenciador do Servidor.
  2. No Gerenciador do Servidor, clique no menu Gerenciar e clique em Adicionar Funções e Recursos.
  3. No assistente Adicionar Funções e Recursos, clique em Avançar. Selecione o tipo de instalação e clique em Avançar. Selecione o servidor de destino e clique em Avançar.
  4. Na página Funções de Servidor, expanda Servidor Web (IIS), Servidor Web, expanda Segurança e selecione Autenticação de Mapeamento de Certificado de Cliente IIS. Clique em Avançar.
    Screenshot of the I I S Client Certificate Mapping Authentication option being highlighted and selected.
  5. Na página Selecionar recursos, clique em Avançar.
  6. Na página Confirmar seleções de instalação, clique em Instalar.
  7. Na página Resultados , clique em Fechar.

Windows 8 ou Windows 8.1

  1. Na tela Iniciar, mova o ponteiro até o canto inferior esquerdo, clique com o botão direito do mouse no botão Iniciar e clique em Painel de Controle.
  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar recursos do Windows.
  3. Expanda Serviços de Informações da Internet, expanda Serviços da World Wide Web, expanda Segurança e, em seguida, selecione Autenticação de Mapeamento de Certificado do Cliente IIS.
    Screenshot of the I I S Client Certificate Mapping Authentication folder being highlighted and selected.
  4. Clique em OK.
  5. Clique em Fechar.

Windows Server 2008 R2 ou Windows Server 2008

  1. Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador do Servidor.
  2. No painel de hierarquia do Gerenciador do Servidor, expanda Funções e clique em Servidor Web (IIS).
  3. No painel Servidor Web (IIS), role até a seção Serviços de Função e clique em Adicionar Serviços de Função.
  4. Na página Selecionar Serviços de Função do Assistente para Adicionar Serviços de Função, selecione Autenticação do Mapeamento de Certificado do Cliente IIS e clique em Avançar.
    Screenshot of the Add Role Services Wizard with the I I S Client Certificate Mapping Authentication option being highlighted.
  5. Na página Confirmar Seleções de Instalação, clique em Instalar.
  6. Na página Resultados , clique em Fechar.

Windows Vista ou Windows 7

  1. Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar Recursos do Windows.
  3. Expanda Serviços de Informações da Internet, selecione Autenticação do Mapeamento de Certificado do Cliente IIS e clique em OK.
    Screenshot of the Security folder being expanded, showing the highlighted I I S Client Certificate Mapping Authentication folder.

Instruções

Não há uma interface do usuário para configurar a autenticação de Mapeamento de Certificado de Cliente do IIS para IIS 7. Para obter exemplos de como configurar a autenticação de Mapeamento de Certificado de Cliente IIS programaticamente, confira a seção Exemplos de Código deste documento.

Configuração

O elemento <iisClientCertificateMappingAuthentication> do elemento <authentication> pode ser configurado no nível do servidor e do site.

Atributos

Atributo Descrição
defaultLogonDomain Atributo String opcional.

Especifica o domínio padrão que o servidor usa para autenticar usuários.
enabled Atributo booliano opcional.

Especifica se a autenticação do Mapeamento de Certificado do Cliente usando o IIS está habilitada.

O padrão é false.
logonMethod Atributo de enumeração opcional.

O atributo logonMethod pode ser um dos valores possíveis a seguir. (Para obter mais informações sobre esses valores, consulte LogonUser.)

O padrão é ClearText.
Valor Descrição
Batch Esse tipo de logon destina-se a servidores em lote, onde os processos podem ser executados em nome de um usuário sem sua intervenção direta.

O valor numérico é 1.
ClearText Esse tipo de logon preserva o nome e a senha no pacote de autenticação, o que permite que o servidor faça conexões com outros servidores de rede enquanto representa o cliente.

O valor numérico é 3.
Interactive Esse tipo de logon destina-se a usuários que usarão interativamente o computador.

O valor numérico é 0.
Network Esse tipo de logon é indicado para servidores de alto desempenho na autenticação de senhas em texto não criptografado. As credenciais não são armazenadas em cache para esse tipo de logon.

O valor numérico é 2.
manyToOneCertificateMappingsEnabled Atributo booliano opcional.

Especifica se o mapeamento de muitos para um está habilitado

O valor padrão é true.
oneToOneCertificateMappingsEnabled Atributo booliano opcional.

Especifica se o mapeamento de um para um está habilitado

O valor padrão é true.

Elementos filho

Elemento Descrição
manyToOneMappings Elemento opcional.

Mapeia certificados do cliente para um conjunto de critérios curinga que autenticam os certificados e atribuem uma conta de usuário.
oneToOneMappings Elemento opcional.

Especifica mapeamentos de certificado do cliente um para um.

Exemplo de configuração

O exemplo de configuração a seguir executa as seguintes ações para o site padrão:

  • Habilita a autenticação de Mapeamento de Certificado de Cliente do IIS usando o mapeamento de certificado de muitos para um.
  • Cria uma regra de mapeamento de certificado de muitos para um para uma conta de usuário com base no campo da organização no assunto do certificado de cliente correspondente a Contoso.
  • Configura o site para exigir SSL e negociar 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>

O exemplo de configuração a seguir habilita a autenticação de Mapeamento de Certificado de Cliente IIS usando mapeamento de certificado um para um para o Site Padrão, cria um único mapeamento de certificado um para um para uma conta de usuário e configura o site para exigir SSL e 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>

Como recuperar a cadeia de caracteres codificada em Base-64 de um certificado de cliente

Observação

Para recuperar dados de certificado codificados em Base-64 para todos os exemplos neste tópico, você pode exportar um certificado usando as seguintes etapas:

  1. Clique em Iniciar e, em seguida, em Executar.

  2. Digite MMC e clique em OK.

  3. Quando o Console de Gerenciamento Microsoft for aberto, clique em Arquivoe, em seguida, Adicionar/Remover Snap-ins.

  4. N caixa de diálogo Adicionar ou Remover Snap-ins:

    • Realce Certificados na lista de snap-ins disponíveis e clique em Adicionar.
    • Escolha gerenciar certificados na Minha conta de usuário e clique em Concluir.
    • Clique em OK para fechar a caixa de diálogo.
  5. No Console de Gerenciamento Microsoft:

    • Expanda Certificados - Usuário Atual, Pessoal e Certificados.
    • Na lista de certificados, clique com o botão direito do mouse no certificado que você deseja exportar e clique em Todas as Tarefas e, em seguida, Exportar.
  6. Quando o Assistente para Exportação de Certificados abrir:

    • Clique em Avançar.
    • Escolha Não exporte a chave privadae clique em Próximo.
    • Escolha X.509 9 codificado em Base-64 (.CER) como o formato de exportação e, em seguida, clique em Avançar.
    • Escolha salvar o certificado na área de trabalho como MyCertificate.cer e clique em Avançar.
    • Clique em Concluir. Uma caixa de diálogo será exibida informando que a exportação foi bem-sucedida.
  7. Feche o Microsoft Management Console.

  8. Abra o arquivo MyCertificate.cer que você exportou usando o Bloco de notas do Windows:

    • Remova "-----BEGIN CERTIFICATE-----" do início do texto.
    • Remova "-----END CERTIFICATE-----" do final do texto.
    • Concatene todas as linhas em uma única linha de texto - esses são os dados de certificado codificados em Base-64 que você usará para todos os exemplos neste tópico.

Exemplo de código

Os exemplos de código a seguir executam as seguintes ações para o Site Padrão:

  • Habilite a autenticação de Mapeamento de Certificado de Cliente do IIS usando o mapeamento de certificado de muitos para um.
  • Crie uma regra de mapeamento de certificado de muitos para um para uma conta de usuário com base no campo da organização no assunto do certificado de cliente correspondente a Contoso.
  • Configure o site para exigir SSL e negociar 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

Observação

Defina o parâmetro commit para apphost quando usar AppCmd.exe para definir essas configurações. Isso confirma as definições de configuração para a seção de local apropriado no arquivo 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()

Os exemplos de código a seguir habilitam a autenticação de Mapeamento de Certificado de Cliente IIS usando mapeamento de certificado um para um para o Site Padrão, criam um único mapeamento de certificado um para um para uma conta de usuário e configuram o site para exigir SSL e negociar certificados de cliente.

Observação

Para recuperar os dados de certificado codificados em Base-64 para os exemplos de código listados abaixo, você pode exportar um certificado usando as etapas listadas na seção Detalhes de Configuração deste documento.

AppCmd.exe

Observação

Devido aos caracteres em cadeias de caracteres de certificado que não podem ser analisados por AppCmd.exe, você não deve usar AppCmd.exe para configurar mapeamentos de certificado um para um do 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()