Como configurar o IIS Express para solicitar certificado de cliente

8

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.

Marko
fonte
1
Fechar? A maioria das configurações IIS Express são configurados no Visual Studio e depuração de um programa é definitivamente relacionadas com programação ...
Marko
Em seguida, uma pergunta como "como instalar o Visual Studio?" seria regular? :)
9/09/09
2
Não quero discutir aqui, mas o FYI IIS Express é usado principalmente para depuração de aplicativos ASP.NET, pois oferece funcionalidades que o servidor de desenvolvimento ASP.NET não suporta. Minha pergunta está relacionada à depuração. Mas para depurar, preciso configurá-lo primeiro. Eu acho que é mais provável que isso já seja feito por algum desenvolvedor e não por um administrador do sistema, pois eles usariam o IIS real de qualquer maneira.
Marko
Eu não saberia como exigir programaticamente o certificado de cliente para acessar. No entanto, aqui está um recurso do qual encontrei ajuda. Espero que isso ajude
rahuL:
Este artigo faz exatamente o que você deseja com as etapas detalhadas (não copio / colo aqui), vá para dcdevs.blogspot.com/2017/06/… HTH!
Dotnetftw # 22/17

Respostas:

5

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>
Mufasa
fonte
Não é realmente uma resposta relevante.
Azimute
1

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.)

  1. Mude o elemento

<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.

  1. 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)

  2. 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.

  1. Copie esse URL SSL e volte para a página de propriedades do projeto e cole-o como o novo URL do projeto. Eu bati em "Criar diretório virtual" neste momento, embora alguns blogs digam que não é necessário que você só precise salvar o projeto e executá-lo na depuração.

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).

user1161391
fonte
0

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.configarquivos foi alterado no Visual Studio 2015 e superior.

Aqui está um resumo do que diz:

  1. Instale o certificado (observe que a chave privada é necessária apenas no lado do cliente) na máquina de desenvolvimento (ela deve estar visível nas listas de certificados do navegador em suas configurações)
  2. Usando o Visual Studio, crie um novo aplicativo Web
  3. Habilite o SSL para seu projeto : visualize as propriedades do projeto (F4) -> SSL Enabledpara True(observe que a SSL URLpropriedade é preenchida)
  4. Defina seu projeto para iniciar no modo SSL : Vá para Propriedades do projeto (Alt + Enter), selecione a guia Web e modifique o URL do projeto para o da etapa 3. Por exemplo,https://localhost:44300
  5. Localize o arquivo de configuração do IIS Express 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\
  6. Modifique o arquivo applicationhost.config : Defina <access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />e<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
  7. Agora, o certificado está disponível no código da Request.ClientCertificatepropriedade e deve ser solicitado quando você abrir sua página no navegador.
Aske B.
fonte