Hoy en día, uno de los aspectos más importantes de la transferencia segura de información es el cifrado. Los datos transmitidos desde el cliente al servidor se cifran con un certificado SSL. Un certificado es una clave pública certificada por una autoridad de certificación.
Todos los certificados SSL, por regla general, se emiten por un período limitado, después del cual caducan y deben volver a emitirse. Sin embargo, hay ocasiones en que un certificado puede ser revocado antes de la fecha de vencimiento. Hay muchas razones para revocar el certificado SSL, la más común de ellas es que la clave privada se perdió o se vio comprometida, los datos de registro de la empresa cambiaron, etc.
Hay 2 formas alternativas de verificar si un certificado SSL está en las listas de revocación:
- CRL (Lista de revocación de certificados): verifica la presencia del número de serie del certificado en la lista de revocación.
- OCSP (Protocolo de estado del certificado en línea): el certificado se envía a un servidor especializado, donde se verifica su estado.
Veamos ambos métodos con más detalle usando la consola de Ubuntu. Y como ejemplo, revisemos el certificado del dominio habr.com para su revisión.
CRL
Descargue el certificado del dominio que nos interesa:
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
Gracias a Legioner por la sugerencia de agregar el parámetro -servername : es necesario para la selección correcta del certificado si hay varias direcciones IP (SNI) instaladas.Nos fijamos en los detalles del certificado:
openssl x509 -noout -text -in /tmp/habr.com.crt
Aquí nos interesa la sección "Nombre completo" de los puntos de distribución de XRL9v3 CRL.
Descargue la lista CLR desde este enlace:
wget http://crl.comodoca.com/COMODORSADomainValidationSecureServerCA.crl
Seleccionamos el número de serie del certificado:
openssl x509 -in /tmp/habr.com.crt -noout -serial
Buscamos si este número está en la lista de CRL:
openssl crl -inform DER -text -in COMODORSADomainValidationSecureServerCA.crl | grep "90E58B0601C3AD98F07AEE092041C437"
Si no se encuentra nada, el certificado no se revoca.
OCSP
Mostraremos el certificado del dominio que nos interesa y la cadena de certificados intermedios:
echo -n | openssl s_client -connect habr.com:443 -showcerts
Guarde el certificado de dominio y el certificado intermedio (el código entre las líneas ----- BEGIN CERTIFICATE ----- y ----- END CERTIFICATE -----) en los archivos:
/tmp/habr.com.crt /tmp/intermediate.crt
Definir un servidor OCSP:
openssl x509 -in /tmp/habr.com.crt -noout -ocsp_uri
Enviaremos una solicitud al servidor OCSP para verificar el certificado de revocación:
openssl ocsp -url http://ocsp.comodoca.com -issuer /tmp/intermediate.crt -cert /tmp/habr.com.crt -text
Si todo se especifica correctamente, el servidor OCSP debería devolver información en el certificado.
Aquí están las últimas líneas de interés:
Response verify OK /tmp/habr.com.crt: good
La ausencia de un certificado en la lista de revocados se indica mediante el valor "bueno", si el certificado fue revocado, el valor será "revocado".
Automatización
La comprobación manual de los certificados SSL para la revocación no siempre es conveniente, por lo que el proceso de verificación se puede automatizar.
Para hacer esto, tomamos el script ssl-check-revoc.sh con
Github , que verifica los certificados utilizando el método CRL:
wget https://raw.githubusercontent.com/o-pod/security/master/ssl-check-revoc.sh
A continuación, haga que el script sea ejecutable:
chmod a+x ssl-check-revoc.sh
Ahora puede verificar tanto los certificados ya instalados para el dominio como los almacenados localmente en archivos (opción -f):
./ssl-check-revoc.sh habr.com -v
Zabbix
El script ssl-check-revoc.sh puede verificar los certificados no solo desde la consola, también es muy adecuado como un verificador para Zabbix, por lo que todo el trabajo sucio de los certificados de seguimiento que llegan a la lista de revocación puede confiarse al sistema de monitoreo.
Entramos en la configuración de Zabbix /etc/zabbix/zabbix_server.conf y vemos dónde se encuentran los scripts para verificaciones externas:
ExternalScripts=/etc/zabbix/externalscripts
Copiamos nuestro script a este directorio y reiniciamos Zabbix:
sudo cp ssl-check-revoc.sh /etc/zabbix/externalscripts/ sudo systemctl restart zabbix-server
Entramos en la interfaz web y creamos una plantilla (Configuración >> Plantillas >> Crear plantilla). Para el nombre de la plantilla, especifique "Comprobación de SSL de plantilla". Luego, dentro de la plantilla, cree un elemento "Certificado SSL en la Lista de revocación" (Elemento), especifique "ssl-check-revoc.sh [{HOST.NAME}]" como la clave, con el tipo de verificación es "Verificación externa". El intervalo de inspección se puede establecer a su discreción, dependiendo de la importancia del proyecto.

También necesitarás dos disparadores:
1. Para indicar la revocación del certificado "El certificado para el dominio {HOST.NAME} está en la lista de revocación"
Expresión: "{Comprobación SSL de plantilla personalizada: ssl-check-revoc.sh [{HOST.NAME}]. Last ()} = 1"

2. Para indicar un error en caso de que algo salga mal (por ejemplo, hay problemas con el servidor CLR, etc.) "Error al verificar el certificado para el dominio {HOST.NAME}"
Expresión: "{Comprobación SSL de plantilla personalizada: ssl-check-revoc.sh [{HOST.NAME}]. Last ()} = 2"

No olvide en las acciones (Configuración >> Acciones) configurar el método de notificación en caso de disparadores.
Ahora queda crear hosts, cuyos certificados verificaremos regularmente (Configuración >> Hosts >> Crear host). En la pestaña Plantillas, enlace nuestra plantilla Plantilla de verificación SSL.

¡Y eso es todo! Puede dormir tranquilo: si el certificado SSL de su dominio por cualquier motivo cae en la lista de revocados, Zabbix le informará de inmediato.