Solução de Problemas relacionados ao SSL (Certificado do Servidor)

Aplica-se a: Serviços de Informações da Internet

Visão geral

Este artigo ajuda você a solucionar problemas de SSL (Secure Sockets Layer) relacionados apenas aos Serviços de Informações da Internet (IIS). Ele abrange certificados de servidor usados para autenticação de servidor, não certificados de cliente.

Se a seção Certificados do cliente estiver definida como Exigir e você encontrar problemas, este artigo não será o que você deve consultar. Este artigo destina-se apenas à solução de problemas de certificados do servidor SSL.

É importante saber que todo certificado compreende uma chave pública (usada para criptografia) e uma chave privada (usada para descriptografia). A chave privada é conhecida apenas pelo servidor.

A porta padrão para HTTPS é 443. Supõe-se que você seja bem versado no Handshake SSL e no processo de autenticação do servidor durante o handshake SSL.

Ferramentas usadas nesta solução de problemas

As ferramentas usadas para solucionar problemas nos vários cenários são:

  • Monitor de Rede 3.4
  • Wireshark

Cenários

Você vê a seguinte mensagem de erro ao navegar em um site por HTTPS:

Captura de tela de uma página do navegador mostrando a mensagem, a conexão para este site não é segura.

O primeiro pré-requisito que deve ser verificado é se o site pode ser acessado por HTTP. Se não for, provavelmente há um problema separado que não é abordado neste artigo. Antes de usar este solucionador de problemas, você deve ter o site operacional em HTTP.

Agora, vamos supor que o site esteja acessível por HTTP e a mensagem de erro anterior seja mostrada quando você tentar navegar por HTTPS. A mensagem de erro é mostrada porque o handshake SSL falhou. Pode haver muitos motivos detalhados nos próximos cenários.

Cenário 1

Verifique se o certificado do servidor tem a chave privada correspondente a ele. Consulte a seguinte captura de tela da caixa de diálogo Certificado:

Duas capturas de tela da caixa de diálogo Certificado. Não se tem uma chave privada. O outro mostra uma mensagem informando que a chave privada corresponde ao certificado.

Solução

Se a chave privada estiver ausente, você precisará obter um certificado que contenha a chave privada, que é essencialmente um arquivo . PFX . Aqui está um comando que você pode tentar executar para associar a chave privada ao certificado:

C:\>certutil - repairstore my "906c9825e56a13f1017ea40eca770df4c24cb735"

Captura de tela do console de comando mostrando a sintaxe certutil.

Se a associação for bem-sucedida, você verá a seguinte janela:

Captura de tela do console de comando mostrando uma mensagem informando que o comando foi concluído com êxito.

Neste exemplo, 906c9825e56a13f1017ea40eca770df4c24cb735 é a impressão digital do certificado. Para obter a impressão digital, siga estas etapas:

  1. Abra o certificado.
  2. Selecione a guia Detalhes.
  3. Role para baixo para encontrar a seção de impressão digital.
  4. Selecione a seção de impressão digital e selecione o texto abaixo dela.
  5. Faça um Ctrl+A e depois Ctrl+C para selecioná-lo e copiá-lo.

Captura de tela da caixa de diálogo Certificado mostrando a guia Detalhes. O valor da impressão digital é realçado.

Observação

O certutil comando nem sempre pode ser bem-sucedido. Se isso falhar, você precisará obter um certificado contendo a chave privada da autoridade de certificação (CA).

Cenário 2

Nesse cenário, considere que você tem um certificado de servidor que contém a chave privada instalada no site. No entanto, você continua a ver o erro mostrado no cenário 1. Você ainda não pode acessar o site por HTTPS.

Solução

Se você tiver um certificado que contém a chave privada, mas não puder acessar o site, também poderá ver o seguinte aviso SChannel nos logs de eventos do sistema:

Event Type: Error 
Event Source: Schannel 
Event Category: None 
Event ID: 36870 
Date: 2/11/2012 
Time: 12:44:55 AM 
User: N/A 
Computer: 
Description: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x80090016. 

Esse evento ou erro indica que houve um problema ao adquirir a chave privada do certificado. Para resolver o aviso, siga estas etapas:

  1. Verifique as permissões na pasta MachineKeys . Todas as chaves privadas são armazenadas na pasta MachineKeys , portanto, certifique-se de ter as permissões necessárias.

  2. Se as permissões estiverem em vigor e se o problema ainda não tiver sido corrigido, pode haver um problema com o certificado. Pode ter sido corrompido. Você pode ver um código de erro no seguinte log de 0x8009001a eventos SChannel:

    Event Type: Error 
    Event Source: Schannel 
    Event Category: None 
    Event ID: 36870 
    Date: 2/11/2012 
    Time: 12:44:55 AM 
    User: N/A 
    Computer: 
    A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x8009001a. 
    
  3. Verifique se o site funciona com um certificado de teste.

  4. Faça um backup do certificado existente e substitua-o por um certificado autoassinado.

  5. Tente acessar o site usando HTTPS.

    Se funcionar, o certificado usado anteriormente foi corrompido e deve ser substituído por um novo certificado de trabalho. Às vezes, o problema pode não estar no certificado, mas no emissor. Durante a verificação da cadeia de certificados, você poderá ver o erro CERT_E_UNTRUSTEDROOT (0x800b0109) se o certificado de autoridade de certificação raiz não for raiz confiável.

  6. Para corrigir esse erro, adicione o certificado da autoridade de certificação ao repositório da autoridade de certificação raiz confiável em Minha conta de computador no servidor. Durante a verificação da cadeia de certificados, você também pode receber o erro -2146762480(0x800b0110).

  7. Para resolver o erro, siga estas etapas para verificar o tipo de uso do certificado:

    1. Abra o certificado.
    2. Selecione a guia Detalhes.
    3. Selecione Editar propriedades.
    4. Na guia Geral, certifique-se de que a opção Habilitar todas as finalidades para este certificado esteja selecionada e, o mais importante, a Autenticação do servidor deve estar presente na lista.

    A captura de tela mostra uma parte da caixa de diálogo Propriedades do certificado em que a opção Habilitar todas as finalidades para este certificado está selecionada.

Cenário 3

Os dois primeiros cenários ajudam a verificar a integridade do certificado. Depois de confirmar que não há problemas com o certificado, um problema considerável é resolvido. Mas, e se o site ainda não estiver acessível por HTTPS? Verifique as ligações HTTPS do site e determine em qual porta e IP ele está escutando.

Solução

  1. Execute o comando a seguir para garantir que nenhum outro processo esteja escutando na porta SSL usada pelo site.

    netstat -ano" or "netstat -anob"
    
  2. Se houver outro processo escutando nessa porta, verifique por que esse processo está usando essa porta.

  3. Tente alterar a combinação de porta IP para verificar se o site está acessível.

Cenário 4

Até agora, você pode ter certeza de que tem um certificado de trabalho adequado instalado no site e não há outro processo usando a porta SSL para este site. No entanto, você ainda pode ver o erro "A página não pode ser exibida" ao acessar o site por HTTPS. Quando um cliente se conecta e inicia uma negociação SSL, HTTP.sys pesquisa sua configuração SSL para o par "IP:Port" ao qual o cliente está conectado. A configuração SSL HTTP.sys deve incluir um hash de certificado e o nome do repositório de certificados antes que a negociação SSL seja bem-sucedida. O problema pode estar no .HTTP.SYS SSL Listener

O hash do certificado registrado com HTTP.sys pode ser NULL ou pode conter GUID inválido.

Solução

  1. Execute o comando a seguir:

    netsh http show ssl
    

    Aqui estão exemplos de cenários de trabalho e não trabalho:

    Cenário de trabalho

    Configuração Configuração
    IP:porta 0.0.0.0:443
    Hash de certificado c09b416d6b 8d615db22 64079d15638e96823d
    Application ID {4dc3e181-e14b-4a21-b022-59fc669b0914}
    Nome do repositório de certificados Meu
    Verificar a revogação do certificado do cliente Habilitado
    Tempo de atualização de revogação 0
    Tempo limite de recuperação de URL 0
    ...... ......

    Cenário de não funcionamento

    Configuração Configuração
    IP:porta 0.0.0.0:443
    Hash de certificado
    Application ID {00000000-0000-0000-0000-000000000000}
    CertStoreName Meu
    Verificar a revogação do certificado do cliente 0
    Tempo de atualização de revogação 0
    Tempo limite de recuperação de URL 0
    ...... ......

    O valor de hash visto no cenário de trabalho é a impressão digital do seu certificado SSL. Observe que o GUID é zero em um cenário de não trabalho. Você pode ver que o Hash tem algum valor ou está em branco. Mesmo se você remover o certificado do site e executar netsh http show sslo , o site ainda listará o GUID como todos os 0s. Se você vir o GUID como "{0000...............000}", há um problema.

  2. Remova essa entrada executando o seguinte comando:

    netsh http delete sslcert ipport=<IP Address>:<Port>
    

    Por exemplo:

    netsh http delete sslcert ipport=0.0.0.0:443
    
  3. Para determinar se algum endereço IP está listado, abra um prompt de comando e execute o seguinte comando:

    netsh http show iplisten
    

    Se o comando retornar uma lista de endereços IP, remova cada endereço IP na lista usando o seguinte comando:

    netsh http delete iplisten ipaddress=<IP Address>
    

    Observação

    Reinicie o IIS depois disso usando o net stop http /y comando.

Cenário 5

Apesar de tudo isso, se você ainda não conseguir navegar no site em HTTPS, capture um rastreamento de rede do cliente ou do servidor. Filtre o rastreamento por "SSL ou TLS" para examinar o tráfego SSL.

Aqui está um instantâneo de rastreamento de rede de um cenário que não funciona:

Captura de tela da janela Filtro de exibição mostrando o instantâneo de rastreamento.

Aqui está um instantâneo de rastreamento de rede de um cenário de trabalho:

Captura de tela da janela Filtro de Exibição mostrando um instantâneo de um rastreamento bem-sucedido.

Esse é o método de como você olha para um rastreamento de rede. Você precisa expandir os detalhes do quadro e ver qual protocolo e criptografia foram escolhidos pelo servidor. Selecione "Server Hello" na descrição para visualizar esses detalhes.

No cenário não funcionando, o cliente foi configurado para usar somente TLS 1.1 e TLS 1.2. No entanto, o servidor Web do IIS foi configurado para oferecer suporte até o TLS 1.0, portanto, o handshake falhou.

Verifique as chaves do Registro para determinar quais protocolos estão habilitados ou desabilitados. Este é o caminho:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

O DWORD habilitado deve ser definido como 1. Se estiver definido como 0, o protocolo será desabilitado.

Por exemplo, o SSL 2.0 está desabilitado por padrão.

Mais informações