Como validar a cadeia de certificados

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Neste documento, explicamos como validar uma cadeia de certificados antes de fazer upload do certificado para um keystore ou um truststore no Apigee Edge. O processo depende do kit de ferramentas OpenSSL para validar a cadeia de certificados e é aplicável em qualquer ambiente em que o OpenSSL esteja disponível.

Antes de começar

Antes de seguir as etapas deste documento, é importante entender os seguintes tópicos:

  • Se você não conhece uma cadeia de certificados, leia Cadeia de confiança.
  • Se você não conhece a biblioteca OpenSSL, leia OpenSSL.
  • Para usar os exemplos de linha de comando neste guia, instale ou atualize para a versão mais recente do cliente OpenSSL.
  • Verifique se os certificados estão no formato PEM. Se os certificados não estiverem no formato PEM, use as instruções em Como converter certificados em formato compatível para convertê-los em PEM.

Como validar o assunto e o emissor do certificado para toda a cadeia

Para validar a cadeia de certificados usando comandos OpenSSL, conclua as etapas descritas nas seções a seguir:

Como dividir a cadeia de certificados

Antes de validar o certificado, você precisa dividir a cadeia de certificados em certificados separados seguindo estas etapas:

  1. Faça login no servidor em que o cliente OpenSSL existe.
  2. Divida a cadeia de certificados nos seguintes certificados (se ainda não tiver feito isso):
    • Certificado da entidade:entity.pem
    • Certificado intermediário: intermediate.pem
    • Certificado raiz: root.pem

A figura a seguir mostra um exemplo de cadeia de certificados:

Fluxo da cadeia de certificados: do certificado de identidade para o certificado intermediário para o certificado raiz

Como verificar o assunto e o emissor do certificado

Nesta seção, descrevemos como conseguir o assunto e o emissor dos certificados e verificar se você tem uma cadeia de certificados válida.

  1. Execute o seguinte comando OpenSSL para receber o Subject e o Issuer de cada certificado na cadeia de entity a root e verifique se eles formam uma cadeia de certificados adequada:
    openssl x509 -text -in certificate | grep -E '(Subject|Issuer):'
        

    Em que certificate é o nome do certificado.

  2. Verifique se os certificados na cadeia aderem às seguintes diretrizes:
    • Subject de cada certificado corresponde ao Issuer do certificado anterior na cadeia (exceto o Entity).
    • Subject e Issuer são as mesmas para o certificado raiz.

    Se os certificados da cadeia aderirem a essas diretrizes, a cadeia de certificados será considerada completa e válida.

    Exemplo de validação da cadeia de certificados

    O exemplo a seguir é a saída dos comandos OpenSSL para um exemplo de cadeia que contém três certificados:

    Certificado da entidade

    openssl x509 -text -in entity.pem | grep -E '(Subject|Issuer):'
    
    Issuer: C = US, O = Google Trust Services, CN = GTS CA 1O1
    Subject: C = US, ST = California, L = Mountain View, O = Google LLC, CN = *.enterprise.apigee.com
            

    Certificado intermediário

    openssl x509 -text -in intermediate.pem  | grep -E '(Subject|Issuer):'
    
    Issuer: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
    Subject: C = US, O = Google Trust Services, CN = GTS CA 1O1
            

    Certificado raiz

    openssl x509 -text -in root.pem | grep -E '(Subject|Issuer):'
    
    Issuer: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
    Subject: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
            

    No exemplo mostrado acima, observe o seguinte:

    • O Subject do certificado intermediário corresponde ao Issuer do certificado da entidade.
    • O Subject do certificado raiz corresponde ao Issuer do certificado intermediário.
    • O Subject e o Issuer são os mesmos no certificado raiz.

    No exemplo acima, você pode confirmar que o exemplo de cadeia de certificados é válido.

Como verificar o assunto e o hash do emissor do certificado

Nesta seção, explicamos como conseguir o hash do assunto e do emissor dos certificados e verificar se você tem uma cadeia de certificados válida.

É sempre bom verificar a sequência de hash dos certificados, já que isso pode ajudar a identificar problemas como o nome comum (CN, na sigla em inglês) do certificado com espaços ou caracteres especiais indesejados.

  1. Execute o seguinte comando OpenSSL para receber a sequência hash de cada certificado na cadeia de entity a root e verifique se eles formam uma cadeia de certificados adequada.
  2. openssl x509 -hash -issuer_hash -noout -in certificate
        

    Em que certificate é o nome do certificado.

  3. Verifique se os certificados na cadeia seguem as seguintes diretrizes:
    • Subject de cada certificado corresponde ao Issuer do certificado anterior na cadeia (exceto o Entity).
    • Subject e Issuer são as mesmas para o certificado raiz.

    Se os certificados da cadeia aderirem a essas diretrizes, a cadeia de certificados será considerada completa e válida.

    Exemplo de validação da cadeia de certificados usando a sequência de hash

    O exemplo a seguir é a saída dos comandos OpenSSL para uma cadeia de certificados de amostra que contém três certificados:

    openssl x509 -in entity.pem -hash -issuer_hash -noout
    c54c66ba #this is subject hash
    99bdd351 #this is issuer hash
        
    openssl x509 -in intermediate.pem -hash -issuer_hash -noout
    99bdd351
    4a6481c9
        
    openssl x509 -in root.pem -hash -issuer_hash -noout
    4a6481c9
    4a6481c9
        

    No exemplo mostrado acima, observe o seguinte:

    • O subject hash do certificado intermediário corresponde ao issuer hash do certificado da entidade.
    • O subject hash do certificado raiz corresponde ao issuer hash do certificado do emissor.
    • O subject e o issuer hash são os mesmos no certificado raiz.

    No exemplo acima, você pode confirmar que o exemplo de cadeia de certificados é válido.

Como verificar a validade do certificado

Nesta seção, explicamos como verificar se todos os certificados na cadeia estão expirados usando os métodos a seguir:

  • Encontre a data de início e de término do certificado.
  • Mostra o status de expiração.

Datas de início e término

Execute o comando OpenSSL a seguir para conferir a data de início e término de cada certificado na cadeia de entity a root, e verifique se todos os certificados na cadeia estão em vigor (a data de início é anterior a hoje) e não estão expirados.

Exemplo de validação de validade do certificado até datas de início e término

openssl x509 -startdate -enddate -noout -in entity.pem
notBefore=Feb  6 21:57:21 2020 GMT
notAfter=Feb  4 21:57:21 2021 GMT
openssl x509 -startdate -enddate -noout -in intermediate.pem
notBefore=Jun 15 00:00:42 2017 GMT
notAfter=Dec 15 00:00:42 2021 GMT
openssl x509 -startdate -enddate -noout -in root.pem
notBefore=Apr 13 10:00:00 2011 GMT
notAfter=Apr 13 10:00:00 2022 GMT

Status de vencimento

Execute o seguinte comando OpenSSL para verificar se o certificado já expirou ou vai expirar na próxima N seconds. Retorna o status de expiração do certificado no contexto da data atual do sistema.

openssl x509 -checkend <N Seconds> -noout -in certificate

Em que certificate é o nome do certificado.

Exemplo de validação de validade do certificado usando a opção de checkend

O comando a seguir usa 0 seconds para verificar se o certificado já expirou ou não:

openssl x509 -checkend 0 -noout -in entity.pem
Certificate will not expire
openssl x509 -checkend 0 -noout -in intermediate.pem
Certificate will not expire
openssl x509 -checkend 0 -noout -in root.pem
Certificate will not expire

Neste exemplo, a mensagem Certificate will not expire indica que o certificado ainda não expirou.