Nosso objetivo é hospedar um site ASP.NET Core 9.0 no IIS e usar o certificado de cliente para autenticação . O aplicativo web ASP.NET Core está funcionando bem: ao executar diretamente do Kestrel, tudo funciona conforme o esperado, ou seja, o usuário é solicitado a escolher um certificado válido que será usado para autenticá-lo.
O documento diz que a configuração do IIS é limitada a 3 etapas:
- Selecione o site nas guias de conexões
- Clique duas vezes na opção Configurações SSL
- clique na caixa de seleção exigir ssl e selecione o botão de opção exigir na seção de certificados do cliente
Infelizmente, não funciona. Ativamos o Failed Requests Tracing e, com essa configuração, o ASP.NET Core Module sempre encerrará a solicitação com o erro request is not supported:
Observe que o usuário final sempre verá uma página de erro 500 e nem terá a chance de escolher o certificado que será usado para autenticação.
Então, para simplificar as coisas, decidimos remover o aplicativo principal do aspnet da equação e ter um site simples, com uma única página index.html, e ver se pelo menos podemos configurá-lo para que o navegador permita que o usuário escolha um certificado.
Ativamos apenas a vinculação https no site:
E também alterei as configurações SSL padrão:
Também ativamos o Failed request tracing para obter mais informações sobre o que está acontecendo. Esta configuração inicial terminou com o tradicional erro 500:
E aqui está a saída do arquivo de rastreamento de solicitação com falha:
Depois de mais algumas escavações, também encontramos este post . Mais uma vez, atualizamos nosso web.config para que ficasse assim (tivemos que desbloquear as subseções de autenticação no nível raiz):
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="true" />
</authentication>
</security>
Os resultados ainda são os mesmos. Então, fomos em frente e adicionamos um mapeamento de um certificado para um usuário existente (usamos o gerenciador do IIS para fazer as coisas direito):
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="true">
<oneToOneMappings>
<add userName="XXX"
password="[enc:IISCngProvider:wX....]"
certificate="MIIFTDCCBDSgAwIBAgITdQAAEJsn8Q3PLgZ4iwAAAAAQm..." />
</oneToOneMappings>
</iisClientCertificateMappingAuthentication>
</authentication>
</security>
Mais uma vez, ainda não funciona (ou seja, o usuário nunca tem uma mudança para escolher um certificado). Depois de mais algumas pesquisas, encontramos algumas postagens que dizem que o Windows Auth deve ser habilitado para que funcione. Então, nós o ativamos:
<windowsAuthentication enabled="true" />
Mas não, ainda não está funcionando. Carregar a página nunca me dá a chance de escolher um certificado.
Então, alguém pode me indicar um documento válido que mostre como configurar o IIS para exigir que o cliente apresente um certificado ao navegar em um site?