Revise certificados SSL para revogação

Atualmente, um dos aspectos mais importantes da transferência segura de informações é a criptografia. Os dados transmitidos do cliente para o servidor são criptografados usando um certificado SSL. Um certificado é uma chave pública certificada por uma autoridade de certificação.

Todos os certificados SSL, como regra, são emitidos por um período limitado, após o qual expiram e devem ser reemitidos. No entanto, há momentos em que um certificado pode ser revogado antes da data de validade. Há muitas razões para revogar o certificado SSL, sendo a mais comum a perda ou comprometimento da chave privada, a alteração dos dados de registro da empresa etc.

Existem 2 maneiras alternativas de verificar se um certificado SSL está nas listas de revogação:

  • CRL (Lista de revogação de certificados) - verifica a presença do número de série do certificado na lista de revogação.
  • OCSP (Online Certificate Status Protocol) - o certificado é enviado para um servidor especializado, onde seu status é verificado.

Vejamos esses dois métodos em mais detalhes usando o console do Ubuntu. E, como exemplo, vamos verificar o certificado do domínio habr.com para revisão.

CRL


Faça o download do certificado do domínio em que estamos interessados:

echo -n | openssl s_client -connect habr.com:443 -servername habr.com 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/habr.com.crt 

Graças ao legioner, pela dica para adicionar o parâmetro -servername - é necessário selecionar corretamente o certificado se houver vários (SNI) instalados no mesmo endereço IP.

Examinamos os detalhes do certificado:

 openssl x509 -noout -text -in /tmp/habr.com.crt 

Aqui estamos interessados ​​na seção "Pontos de distribuição da CRL X509v3" item "Nome completo".

Faça o download da lista CLR neste link:

 wget http://crl.comodoca.com/COMODORSADomainValidationSecureServerCA.crl 

Escolhemos o número de série do certificado:

 openssl x509 -in /tmp/habr.com.crt -noout -serial 

Olhamos para ver se esse número está na lista da CRL:

 openssl crl -inform DER -text -in COMODORSADomainValidationSecureServerCA.crl | grep "90E58B0601C3AD98F07AEE092041C437" 

Se nada foi encontrado, o certificado não é revogado.

OCSP


Exibiremos o certificado do domínio de seu interesse e a cadeia de certificados intermediários:

 echo -n | openssl s_client -connect habr.com:443 -showcerts 

Salve o certificado de domínio e o certificado intermediário (o código entre as linhas ----- BEGIN CERTIFICATE ----- e ----- END CERTIFICATE -----) nos arquivos:

 /tmp/habr.com.crt /tmp/intermediate.crt 

Defina um servidor OCSP:

 openssl x509 -in /tmp/habr.com.crt -noout -ocsp_uri 

Enviaremos uma solicitação ao servidor OCSP para verificar a revogação do certificado:

 openssl ocsp -url http://ocsp.comodoca.com -issuer /tmp/intermediate.crt -cert /tmp/habr.com.crt -text 

Se tudo estiver especificado corretamente, o servidor OCSP deve retornar informações no certificado.

Aqui estão as últimas linhas de interesse:

 Response verify OK /tmp/habr.com.crt: good 

A ausência de um certificado na lista de revogados é indicada pelo valor "bom"; se o certificado foi revogado, o valor será "revogado".

Automação


A verificação manual de revogação de certificados SSL nem sempre é conveniente, portanto o processo de verificação pode ser automatizado.

Para fazer isso, pegamos o script ssl-check-revoc.sh pronto com o Github , que verifica os certificados usando o método CRL:

 wget https://raw.githubusercontent.com/o-pod/security/master/ssl-check-revoc.sh 

Em seguida, torne o script executável:

 chmod a+x ssl-check-revoc.sh 

Agora você pode verificar os certificados já instalados para o domínio e os armazenados localmente nos arquivos (opção -f):

 ./ssl-check-revoc.sh habr.com -v 

Zabbix


O script ssl-check-revoc.sh pode verificar certificados não apenas no console, mas também é bastante adequado como verificador para o Zabbix; portanto, todo o trabalho sujo de rastreamento de certificados que entram na lista de revogação pode ser confiado ao sistema de monitoramento.

Entramos no Zabbix config /etc/zabbix/zabbix_server.conf e vemos onde estão localizados os scripts para verificações externas:

 ExternalScripts=/etc/zabbix/externalscripts 

Copiamos nosso script para este diretório e reiniciamos o Zabbix:

 sudo cp ssl-check-revoc.sh /etc/zabbix/externalscripts/ sudo systemctl restart zabbix-server 

Entramos na interface da web e criamos um modelo (Configuração >> Modelos >> Criar modelo). Para o nome do modelo, especifique "Verificação SSL do modelo". Em seguida, dentro do modelo, crie um item "Certificado SSL na lista de revogação" (Item), especifique "ssl-check-revoc.sh [{HOST.NAME}]" como a chave, com o tipo de verificação como "Verificação externa". O intervalo de inspeção pode ser definido a seu critério, dependendo da criticidade do projeto.



Você também precisará de dois gatilhos:

1. Para sinalizar a revogação do certificado "O certificado para o domínio {HOST.NAME} está na lista de revogação"
Expressão: "{Verificação SSL personalizada do modelo: ssl-check-revoc.sh [{HOST.NAME}]. Last ()} = 1"



2. Para sinalizar um erro caso algo dê errado (por exemplo, há problemas com o servidor CLR, etc.) "Erro ao verificar o certificado do domínio {HOST.NAME}"
Expressão: "{Verificação SSL personalizada do modelo: ssl-check-revoc.sh [{HOST.NAME}]. Last ()} = 2"



Não se esqueça nas ações (Configuração >> Ações) para configurar o método de notificação no caso de gatilhos.

Agora resta criar hosts, cujos certificados iremos verificar regularmente (Configuração >> Hosts >> Criar host). Na guia Modelos, vincule nosso modelo de Verificação SSL do modelo.



E é isso aí! Você pode dormir em paz: se o certificado SSL do seu domínio, por qualquer motivo, estiver na lista de certificados revogados, o Zabbix o informará imediatamente.

Source: https://habr.com/ru/post/pt417521/


All Articles