Cómo conocer y verificar el vencimiento de certificados SSL mediante un script o comando que facilite la supervisión.
Una primera opción es utilizar el comando openssl
para revisar un certificado específico:
openssl x509 -in certificado.pem -noout -enddate
Salida esperada:
notAfter=Nov 15 23:59:59 2025 GMT
Este enfoque puede automatizarse a través de scripts. Sin embargo, podría resultar problemático si los certificados tienen nombres diferentes o están almacenados en directorios distintos, dependiendo del servicio.
Por lo tanto, una solución más flexible es usar openssl
para conectarse como cliente y verificar el vencimiento del certificado asociado a un servicio:
echo | openssl s_client -connect ejemplo.com:443 2>/dev/null | openssl x509 -noout -dates
Salida esperada:
notBefore=Nov 15 00:00:00 2024 GMT
notAfter=Nov 15 23:59:59 2025 GMT
El comando echo
inicial envía un "enter" al cliente de openssl
, permitiendo revisar una lista de servidores y puertos para toda una infraestructura.
Argumentos útiles de OpenSSL
openssl
ofrece diversos argumentos para obtener información detallada sobre certificados X509:
-dates
: Fechas del período de validez del certificado.-enddate
: Fecha de vencimiento.-subject
: Titular del certificado y CN.-issuer
: Autoridad emisora del certificado.-fingerprint
: Huella dactilar del certificado.-text
: Información completa del certificado.
Estos argumentos pueden combinarse para extraer múltiples datos en una sola consulta:
echo | openssl s_client -connect ejemplo.com:443 2>/dev/null | openssl x509 -noout -dates -issuer -fingerprint
Salida esperada:
notBefore=Nov 15 00:00:00 2024 GMT
notAfter=Nov 15 23:59:59 2025 GMT
issuer= /C=US/ST=California/O=Let's Encrypt/CN=R3
SHA1 Fingerprint=7A:11:45:BC:90:55:34:AD:FA:76:89:3E:FA:67:1B:12:77:BB:4D:12
Si se omite el argumento -noout
, el comando mostrará el certificado completo:
echo | openssl s_client -connect ejemplo.com:443 2>/dev/null | openssl x509
Salida esperada:
-----BEGIN CERTIFICATE-----
MIIFJjCCBA6gAwIBAgISA1Bh...
...D12PQwXCNE72hMFsdGHy7B3eX==
-----END CERTIFICATE-----
Uso de cURL para Consultas
Otra herramienta útil es curl
, que permite extraer información del certificado mediante una conexión HTTPS:
curl -s --insecure -v https://ejemplo.com | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'
Salida esperada:
* Rebuilt URL to: https://ejemplo.com/
* Trying 192.168.1.1...
* Connected to ejemplo.com (192.168.1.1) port 443 (#0)
* Server certificate:
* subject: CN=ejemplo.com
* start date: Nov 15 00:00:00 2024 GMT
* expire date: Nov 15 23:59:59 2025 GMT
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.
Estas herramientas facilitan la supervisión de certificados SSL en servidores y servicios, tanto manualmente como mediante automatización. Además, en ocasiones, puede ser práctico utilizar herramientas web.