Tengo varios certificados SSL y me gustaría recibir una notificación cuando un certificado haya expirado.
Mi idea es crear un cronjob, que ejecuta un comando simple todos los días.
Sé que el openssl
comando en Linux se puede usar para mostrar la información del certificado del servidor remoto, es decir:
openssl s_client -connect www.google.com:443
Pero no veo la fecha de vencimiento en esta salida. Además, tengo que terminar este comando con CTRL+ c.
¿Cómo puedo verificar la caducidad de un certificado remoto de un script (preferiblemente usando openssl
) y hacerlo en "modo por lotes" para que se ejecute automáticamente sin interacción del usuario?
-servername www.google.com
servidores habilitados para SNI. Para evitar la necesidad de la terminación, envíe / dev / null< /dev/null
Respuestas:
Su comando ahora esperaría una solicitud http como,
GET index.php
por ejemplo. Use esto en su lugar:true
: simplemente no dará ninguna entrada seguida de eof, de modo que openssl salga después de conectarse.openssl ...
: el comando de tu pregunta2>/dev/null
: la salida de error será ignorada.openssl x509
: activa la gestión de datos del certificado X.509.-noout
: Suprime toda la salida del certificado-checkend 0
: compruebe si el certificado caducó en los próximos 0 segundosfuente
-checkend
¡mucho más fácil que el script que encontré que hacía aritmética de fechas!Te da el certificado, pero no lo decodifica. Como eso sería necesario si quieres la fecha, no la ves. Entonces, lo que se necesita es que lo conecte a la
x509
aplicación de OpenSSL para decodificar el certificado:Esto le dará el certificado descodificado completo en stdout, incluidas sus fechas de validez.
fuente
Si necesita verificar la fecha de vencimiento, gracias a esta publicación de blog , encontró una manera de encontrar esta información con otra información relevante con una sola llamada:
El resultado incluye el emisor, el sujeto (a quien se expide el certificado), la fecha de emisión y finalmente la fecha de vencimiento :
fuente