Verificación de Certificados SSL desde la Línea de Comandos

Artículos Guías Manuales Sistemas Linux Windows Binario 0

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.