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.