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.
- Módulo de mapeamento de certificado do cliente do IIS instalado
- Um site com uma associação do HTTPS, configurada corretamente
- 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]
- Instalado um certificado de cliente em um cliente
- 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.
Clique com o botão direito do mouse no arquivo .cer.
Selecione Abrir com... no menu de contexto
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]
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-----
Remova -----CERTIFICADO INICIAL----- e -----CERTIFICADO FINAL----
Formate o blob de certificado para ser uma única linha.
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.
- Inicie o Inetmgr, a interface do usuário do Gerenciador do IIS
- Selecione o site do SSL que está sendo configurado e abra o Editor de Configuração
- Digite “system.webServer/security/authentication/iisClientCertificateMappingAuthentication” na caixa suspensa Seção.
- Selecione o campo habilitado e altere o valor para verdadeiro
- Selecione a entrada de grade de propriedade oneToOneCertificateMappingsEnabled e altere o valor para verdadeiro
- Selecione a entrada da grade de propriedades oneToOneMappings e selecione Editar Itens... no Painel de Tarefas Ações
- Selecione Adicionar na lista de tarefas do Editor de Coleção
- Copie o blob de certificado de cadeia de caracteres único acima e cole-o no campo de certificado
- Defina o nome de usuário e a senha como os clientes serão autenticados.
- Definir o campo habilitado como verdadeiro
- Fechar o Editor de Coleção
- 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.
- 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
- Selecione o módulo de interface do usuário do SSL
- Em Certificados do cliente: selecione o botão de opção Aceitar
- 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();
}
}
}