Blog Agility

Verificando se a cadeia do certificado é válida

Verificando se a cadeia do certificado é válida

Levante a mão quem nunca recebeu uma mensagem de erro associada a um certificado SSL inválido? Esta é uma das situações mais conhecidas ao acessar uma página na web, principalmente, em ambientes de homologação que utilizam certificados temporários ou auto assinados.

Esse artigo não tem como objetivo apresentar todos os conceitos relacionados a chave simétrica / assimétrica ou mesmo a conceitos de Public Key Infrastructure (PKI), mas sim apresentar comandos simples para verificar se um certificado é válido  em um determinado período ou no momento de sua verificação.

Existem três principais motivos para um certificado não ser/estar válido (abaixo uma breve descrição destes erros bem como as mensagens de erro associadas em uma das versões do Internet Explorer em português e inglês):

  1. Não ser assinado por uma Certified Authority (CA) válida ou a cadeia de certificados é inválida;
  2. O certificado de segurança apresentado pelo site não foi emitido por uma autoridade de certificação confiável. 
  3. The security certificate presented by this website was not issued by a trusted certificate authority

 

  1. Estar fora do período de validade;
  2. O certificado de segurança apresentado pelo site expirou ou ainda não é válido.
  3. The security certificate presented by this website has expired or is not yet valid

 

  1. O Common Name (CN) difere daquele apresentado na URL solicitada.
  2. O certificado de segurança apresentado pelo site foi emitido para outro endereço.
  3. The security certificate presented by this website was issued for a different website’s address

Erros desse tipo fazem com que muito tempo seja investido em troubleshootings seja na comunicação entre aplicação e usuário ou mesmo entre comunicação entre aplicações diferentes. Prevenir e diagnosticar situações como essa permite economizar boas horas de sono.

Nesse artigo será abordado o primeiro grupo de erros relacionados a entidade certificadora ou certificados intermediários. Para tanto, é importante definir os seguintes conceitos:

  • Caminho de certificação (Certification Path) – Também conhecido como Cadeia de Certificados (Certification Chain), trata-se de uma lista ordenada de certificados onde o Emissor (subject entity) de um dos certificados é idêntico ao Requerente (issuing entity) do certificado seguinte na cadeia.

 

  • Entidade Certificadora Raiz (Root Certified Authority) – Entidade de credibilidade pública que delega ou emite certificados e controla sua validade / revogação. A característica de um certificado raiz é que ele é auto assinado, ou seja, o Emissor é o mesmo que o Requerente.

 

  • Entidade Certificadora Intermediária (Intermediate Certified Authority) – Tipo de Entidade Certificadora que recebeu poderes da Entidade Certificadora Raiz para assinar certificados.

Para que um certificado seja válido é importante que o mesmo tenha sido assinado por Certificados Intermediários válidos até o início da cadeia onde a Entidade Certificadora Raiz seja válida.

O seguinte exemplo mostra uma cadeia de certificados:

  • Certificado 1 – Requerido por: exemplo.com; Emitido por: CA Intermediária 1
  • Certificado 2 – Requerido por: CA Intermediária 1; Emitido por: CA Intermediária 2
  • Certificado 3 – Requerido por: CA Intermediária 2; Emitido por: CA Intermediária 3
  • Certificado 4 – Requerido por: CA Intermediária 3; Emitido por: CA Raiz

Como uma imagem pode falar mais do que mil palavras, o exemplo abaixo mostra uma cadeia de certificados com o Emissor e Requerente de cada certificado em destaque (informações obtidas dentro de cada um dos certificados).

 

Cadeia_de_Certificados1

  • No primeiro nível o emissor é igual ao requerente – Certificado Raiz.
  • Já no segundo nível o emissor é a Entidade Raiz que emite o certificado do requerente – Certificado Intermediário.
  • No último nível, o emissor é a Entidade Certificadora Intermediária que emite o certificado do servidor/usuário.

 

A partir da implementação OpenSSL utilizada na maioria dos dispositivos de rede que implementam alguma forma de criptografia, é possível validar se o certificado é válido no que se refere a sua cadeia.

 

Validando se o certificado raiz é válido:

> openssl verify -CAfile <root.crt> <root.crt>

root.crt: OK

 

Validando se toda uma cadeia de certificado é válida:

> openssl verify -CAfile <root.crt> -untrusted <intermediate.crt> <certificate.crt>

certificate.crt: OK

 

Se a cadeia de certificados intermediária contiver mais de um certificado, deve-se primeiro unir todos os certificados intermediários em uma arquivo para, na sequência, validá-lo:

# exemplo do comando em Linux

> cat <intermediateCA_1.crt> <intermediateCA_2.crt> > <intermediates.crt>

> openssl verify -CAfile <root.crt> -untrusted <intermediates.crt> <certificate.crt>

certificate.crt: OK

 

Qualquer mensagem diferente de OK indicará que o certificado tem uma falha. Normalmente, as falhas de cadeia relacionadas ao certificado indicam a falta de um dos certificados intermediários, ou seja, incapaz de validar o certificado emissor (unable to get local issuer certificate).

Quando uma situação como essa ocorrer, o importante é verificar quem foi o emissor do certificado em questão e procurá-lo nos sites das empresas que estão autorizadas a assinar certificados. Os certificados intermediários públicos podem ser facilmente encontrados realizando uma busca pelo nome do emissor.

Por exemplo, se tiver um certificado foi assinado por: “VeriSign Class 3 International Server CA – G3” e for realizada uma busca no site da VeriSign ou mesmo em uma ferramenta de busca, facilmente será possível encontrar esse certificado digital. É necessário o cuidado de copiar exatamente o mesmo nome do emissor e baixa-lo de um site confiável.

Para ajudar nessa tarefa, uma lista das principais entidades certificadoras (Certificate Provider) e seus respectivos certificados intermediários pode ser obtida em http://www.sslshopper.com/ssl-certificate-not-trusted-error.html [visitado em 07/05/2013].

Entender como funciona a cadeia de certificado e saber validá-la é útil em diferentes tipos de produtos e soluções que se utilizam de uma infraestrutura de certificado digital. Ter o conhecimento desses conceitos e ferramentas simples para validar os certificados, pode ajudar na resoluções de problemas nas mais diversas áreas de segurança da informação.

Referência: http://www.herongyang.com/crypto/openssl_verify.html [visitado em 07/05/2013].