Alguém sabe como configurar o IIS Express para exigir certificado de cliente para acesso? Estou tentando depurar um aplicativo ASP.NET problemático que usa certificados de cliente para autenticação.
Alguém sabe como configurar o IIS Express para exigir certificado de cliente para acesso? Estou tentando depurar um aplicativo ASP.NET problemático que usa certificados de cliente para autenticação.
Respostas:
Use a ferramenta Gerenciador do IIS e siga a Autenticação de Mapeamento de Certificado do Cliente IIS da documentação da Microsoft <iisClientCertificateMappingAuthentication> .
Exemplo de configuração:
<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>
Essas foram as instruções dadas por Jason Shavers em seu blog. (Mas essa página não existe mais.) Scott Hanselman também fala sobre a ativação do SSL em http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx . Mas em nenhum momento ele se refere a fazer o site exigir certificados de cliente.
Estas são as instruções que eu segui:
Alterar applicationhost.config (existem dois em MyDocuments \ IISExpress \ config e o outro em arquivos de programa \ IIS Express \ AppServer, por padrão, o do seu perfil é usado quando você executa um projeto no IISExpress no VS 2012 O outro pode ser executado usando a linha de comando que foi o que fiz na máquina de teste local.)
<access sslFlags = "None" /> para <access sslFlags = "SslNegotiateCert" />
E o elemento
<iisClientCertificateMappingAuthentication enabled = "false"> </ iisClientCertificateMappingAuthentication>
para
<iisClientCertificateMappingAuthentication enabled = "true"> </ iisClientCertificateMappingAuthentication>
As próximas duas etapas devem ser executadas no Visual Studio Por padrão, quando um novo projeto é criado no VS 2012, ele é criado como um projeto do IIS Express. Um projeto mais antigo transferido para o VS2012 pode precisar alterar essa configuração.
Na página de propriedades Projeto, na guia Web, altere Usar Servidor do Visual Studio Developer para Usar o servidor web local do IIS. (Deve haver uma caixa de seleção acinzentada que diz Usar o IIS Express se você não tiver uma instalação regular do IIS em sua máquina (o que não pode ser feito nessas máquinas NMCI.) Deve haver um URL do projeto dizendo algo como http: // Localhost: 62714 / (que deve ser a mesma porta definida como "porta específica" na configuração do Visual Studio Development Server (se estiver definida)
Em seguida, selecione o projeto no Solution Explorer e vá para a guia Propriedades. (Às vezes, isso deve ser feito algumas vezes antes das propriedades aparecerem.) Isso terá três propriedades: SSL Enable, cujo padrão é false; URL SSL, que está em branco com um novo projeto, e URL definido como URL em " URL do projeto "na guia de propriedades.
Altere a propriedade habilitada para SSL para true e uma nova URL SSL será criada.
No arquivo applicationhost.config no elemento "", uma nova entrada é feita quando o projeto é executado pela primeira vez antes de você ativar o SSL. Isso parecerá assim:
<site name="WebApplication1" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\users\edward.joell\documents\visual studio 2012\Projects\WebApplication1\WebApplication1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:61313:localhost" />
</bindings>
</site>
Quando você habilita o SSL em seu projeto, ele deve ficar assim:
<site name="WebApplication1" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\users\edward.joell\documents\visual studio 2012\Projects\WebApplication1\WebApplication1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:61313:localhost" />
<binding protocol="https" bindingInformation="*:44313:localhost" />
</bindings>
</site>
(todas as portas 443xx são reservadas para projetos SSL).
Encontrei um blog que detalhava como configurar solicitações de certificado de cliente para o IIS Express (usei o Visual Studio 2017, IISExpress 10.0). Aparentemente, o local dos applicationhost.config
arquivos foi alterado no Visual Studio 2015 e superior.
Aqui está um resumo do que diz:
SSL Enabled
para True
(observe que a SSL URL
propriedade é preenchida)https://localhost:44300
applicationhost.config
: em 2015 ou 2017, o arquivo está localizado [solution directory]\.vs\config\
- nas versões anteriores ele é encontrado em%UserProfile%\Documents\IISExpress\config\
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
e<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
Request.ClientCertificate
propriedade e deve ser solicitado quando você abrir sua página no navegador.