Configurar os mapeamentos de certificado de cliente um para um

por Robert Lucero

Tela de fundo

O IIS 6 tinha uma Interface do Usuário para configurar e mapear um para um certificados para autenticação. Ele permitiu que os usuários selecionassem o certificado do cliente de validação e atribuíssem as credenciais de usuário autorizadas. Não há uma interface do usuário semelhante no IIS 7 e superior. Este passo a passo foi projetado para instruir os usuários a configurar um para um certificados de cliente usando o Editor de Configuração do Pacote de Administração. Os usuários que não têm esse complemento podem exibir a seção de apêndice para argumentos do AppCmd e exemplos de código C#, para executar este passo a passo.

Esquema do IIS 7 e acima

Esse é o esquema para o recurso de autenticação de mapeamento de certificado do cliente IIS no IIS 7 e posteriores.

<sectionSchema name="system.webServer/security/authentication/iisClientCertificateMappingAuthentication">
  <attribute name="enabled" type="bool" defaultValue="false" />
  <attribute name="oneToOneCertificateMappingsEnabled" type="bool" defaultValue="true" />
  <element name="oneToOneMappings">
    <collection addElement="add" clearElement="clear">
      <attribute name="enabled" type="bool" defaultValue="true" />
      <attribute name="userName" type="string" />
      <attribute name="password" type="string" encrypted="true" />
      <attribute name="certificate" type="string" required="true" isUniqueKey="true" />
    </collection>
  </element>
</sectionSchema>

Pré-requisitos

Esses são os pré-requisitos necessários para este passo a passo. Não vou abordar como criar ou fazer esses procedimentos.

  1. Módulo de mapeamento de certificado do cliente do IIS instalado
  2. Um site com uma associação do HTTPS, configurada corretamente
  3. Um certificado Base-64 (arquivo .cer). [Observação: pode ser qualquer certificado válido de 64 bits, mas deve estar no formulário de arquivo]
  4. Instalado um certificado de cliente em um cliente
  5. Instalação da Visualização técnica 2 do Pacote de Administração do IIS 7

Etapa 1: obter o blob de certificado

O item de coleção oneToOneMappings tem um atributo chamado certificado. O valor necessário para esse atributo não é o certificado, mas o blob de certificado real. Veja como extraí-lo.

  1. Clique com o botão direito do mouse no arquivo .cer.

  2. Selecione Abrir com... no menu de contexto

  3. Selecione o Bloco de Notas na lista de Outros Programas e selecione OK. [Observação: o bloco de notas pode estar oculto abaixo de uma lista suspensa no modo de exibição de lista do Vista/Windows 2008]

  4. Isso é o que deve ser exibido no bloco de notas:

    -----BEGIN CERTIFICATE----- 
    MIIEfjCCA2agAwIBAgIKFW1IXAAAAAAAAjANBgkqhkiG9w0BAQUFADAbMRkwFwYD 
    VQQDExBJSVNSZW1vdGVNZ3JUZXN0MB4XDTA4MDIxMTIxNTk1NloXDTA5MDIxMTIy 
    MDk1NlowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV 
    BAcTB1JlZG1vbmQxDTALBgNVBAoTBE1TRlQxDDAKBgNVBAsTA0lJUzEVMBMGA1UE 
    AxMMUkxVQ0VSTzItSUlTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3611j 
    34q2qQgHa7ao11TcQMDYlJMrqET05MWFY1/Vso+leujLoIGTfdHOuz4IBVoeUE+y 
    mlL8r53s2BQeVFROnDtg4Jko1zJsz7AUAnQNBk/GYA1AHYmhY79Z0p1KXW/wSTJB 
    tdUn732GQOqYf4wY8jOD2zUJDUG4HXm6ib8ajwIDAQABo4IB+TCCAfUwDgYDVR0P 
    AQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUFBwMBMHgGCSqGSIb3DQEJDwRrMGkw 
    DgYIKoZIhvcNAwICAgCAMA4GCCqGSIb3DQMEAgIAgDALBglghkgBZQMEASowCwYJ 
    YIZIAWUDBAEtMAsGCWCGSAFlAwQBAjALBglghkgBZQMEAQUwBwYFKw4DAgcwCgYI 
    KoZIhvcNAwcwHQYDVR0OBBYEFHbHA+HwZcIrslklj1W3O23UFrBgMB8GA1UdIwQY 
    MBaAFMxzlGbmkp2+phhDg7TPfi83d7UVMHMGA1UdHwRsMGowaKBmoGSGL2h0dHA6 
    Ly9paXNzYjMwNS9DZXJ0RW5yb2xsL0lJU1JlbW90ZU1nclRlc3QuY3JshjFmaWxl 
    Oi8vXFxpaXNzYjMwNVxDZXJ0RW5yb2xsXElJU1JlbW90ZU1nclRlc3QuY3JsMIGe 
    BggrBgEFBQcBAQSBkTCBjjBEBggrBgEFBQcwAoY4aHR0cDovL2lpc3NiMzA1L0Nl 
    cnRFbnJvbGwvaWlzc2IzMDVfSUlTUmVtb3RlTWdyVGVzdC5jcnQwRgYIKwYBBQUH 
    MAKGOmZpbGU6Ly9cXGlpc3NiMzA1XENlcnRFbnJvbGxcaWlzc2IzMDVfSUlTUmVt 
    b3RlTWdyVGVzdC5jcnQwDQYJKoZIhvcNAQEFBQADggEBAEsSkcx0re36IL80UphJ 
    w/srR3LBsy8sfwqxBMzMTdF7k6jYtUVpn3D2Dd4JXXVOaEVud9YNn9pr6xJL4t79 
    Zh+hJzIPA5pQLbccx4vjWB4cWEYxzcoKYCuUdZrfPFXO1a5kQAj8IZ0/6bhMceyR 
    Z7dRDoaIuAGQLFAlC/KjIBCemDi54MlWtvATQ8bmiRuEOWeneK2Vd2e0fxyezk05 
    dRqa8DEC74CQN4rQuz395ECm+M/hQnN+dHOygV8n9swd0bdNq8qypwfVUes5HIpj 
    LFmKTuGyFSVj7jv+64oTxvxtYX2QFp9q6Bi+qj0uyrX8Xjxy5rPSVPEfnxPCBg58 
    RCI= 
    -----END CERTIFICATE-----
    
  5. Remova -----CERTIFICADO INICIAL----- e -----CERTIFICADO FINAL----

  6. Formate o blob de certificado para ser uma única linha.

  7. Salve esse arquivo como clientCertBlob.txt

Etapa 2: habilitar a Autenticação de mapeamento de certificados de cliente do IIS e o Mapeamento de certificado um para um para um site

As próximas etapas abordarão como habilitar o recurso autenticação de mapeamento de certificado do cliente, mapeamento de certificado um para um e adicionar uma entrada de mapeamento.

  1. Inicie o Inetmgr, a interface do usuário do Gerenciador do IIS
  2. Selecione o site do SSL que está sendo configurado e abra o Editor de Configuração
  3. Digite “system.webServer/security/authentication/iisClientCertificateMappingAuthentication” na caixa suspensa Seção.
  4. Selecione o campo habilitado e altere o valor para verdadeiro
  5. Selecione a entrada de grade de propriedade oneToOneCertificateMappingsEnabled e altere o valor para verdadeiro
  6. Selecione a entrada da grade de propriedades oneToOneMappings e selecione Editar Itens... no Painel de Tarefas Ações
  7. Selecione Adicionar na lista de tarefas do Editor de Coleção
  8. Copie o blob de certificado de cadeia de caracteres único acima e cole-o no campo de certificado
  9. Defina o nome de usuário e a senha como os clientes serão autenticados.
  10. Definir o campo habilitado como verdadeiro
  11. Fechar o Editor de Coleção
  12. Selecione Aplicar no Painel de Tarefas Ações [Observação:selecione Geração de Script antes de selecionar Aplicar, para obter scripts para este processo]

Após concluir isto, o servidor será configurado para lidar com a autenticação de mapeamento de certificado do cliente do IIS com uma única entrada de mapeamento de certificado.

Etapa 3: habilitar a autenticação de certificado do cliente para um site usando o SSL

Após criar um mapeamento e o recurso tiver sido habilitado, um site deverá ser configurado para usar certificados de cliente.

  1. A partir do Inetmgr, a interface do usuário do Gerenciador do IIS, selecione o site do SSL que você deseja usar certificados do cliente
  2. Selecione o módulo de interface do usuário do SSL
  3. Em Certificados do cliente: selecione o botão de opção Aceitar
  4. Selecione Aplicar no Painel de Tarefas Ações

Agora, o site está configurado para aceitar e autenticar clientes com base em certificados de cliente.

Etapa 4: verificar se tudo funciona

O cliente que está tentando acessar a página da Web SSL precisa do certificado do cliente instalado corretamente. Se um cliente tentar solicitar uma página sem o certificado, um 401 será atendido. Após o certificado do cliente estiver instalado corretamente, a página será atendida normalmente.

Execute com diferentes combinações de regras de autorização para atender às suas necessidades.

Resumo

Agora você configurou mapeamentos de certificado do cliente do IIS e um único mapeamento de certificado um para um.

Apêndice

Estes são os Snippets de Código para executar as etapas passo a passo 2 e 3. Tudo isso foi gerado usando a Geração de Script do Editor de Configuração.

Instruções específicas do AppCmd

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication 
    /enabled:"True" /oneToOneCertificateMappingsEnabled:"True"  /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication 
    /+"oneToOneMappings.[userName='testUser',password='securePassWord!1',certificate='CERTIFICATE_BLOB']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/access /sslFlags:"Ssl, SslNegotiateCert, Ssl128"  /commit:apphost

Código em 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["userName"] = @"testUser";
            addElement["password"] = @"securePassWord!1";
            addElement["certificate"] = @"CERTIFICATE_BLOB";
            oneToOneMappingsCollection.Add(addElement);
            
            serverManager.CommitChanges();
        }
    }
}

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 accessSection = config.GetSection("system.webServer/security/access", "Default Web Site");
            accessSection["sslFlags"] = @"Ssl, SslNegotiateCert, Ssl128";
            
            serverManager.CommitChanges();
        }
    }
}