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

- Link: https://binariocero.com/linux/verificacion-de-certificados-ssl-desde-la-linea-de-comandos
- Published: 2025-01-13T17:17:28+01:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

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:

    ```wp-block-preformatted
    openssl x509 -in certificado.pem -noout -enddateSalida 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:

    ```wp-block-preformatted
    echo | openssl s_client -connect ejemplo.com:443 2>/dev/null | openssl x509 -noout -datesSalida esperada:notBefore=Nov 15 00:00:00 2024 GMTnotAfter=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:

    ```wp-block-preformatted
    echo | openssl s_client -connect ejemplo.com:443 2>/dev/null | openssl x509 -noout -dates -issuer -fingerprintSalida esperada:notBefore=Nov 15 00:00:00 2024 GMTnotAfter=Nov 15 23:59:59 2025 GMTissuer= /C=US/ST=California/O=Let's Encrypt/CN=R3SHA1 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:

    ```wp-block-preformatted
    echo | openssl s_client -connect ejemplo.com:443 2>/dev/null | openssl x509Salida 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:

    ```wp-block-preformatted
    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.
