Los problemas con los certificados SSL son uno de los problemas técnicos más perturbadores que puede tener un sitio. Un certificado caducado bloquea a todos los visitantes con una advertencia en el navegador. Un certificado mal configurado provoca fallas silenciosas. Un certificado emitido para el dominio incorrecto rompe los subdominios. Y a diferencia de la mayoría de los problemas, los problemas con los certificados ocurren según un cronograma (caducan), por lo que se pueden prevenir por completo si sabe dónde buscar.

A continuación se explica cómo verificar cualquier certificado SSL, qué significa cada campo y qué hacer cuando algo anda mal.

La verificación rápida: su navegador

Para cualquier sitio que visites, la verificación SSL más rápida está directamente en tu navegador.

Cromo/Borde: Haga clic en el icono de candado (o en el texto "La conexión es segura") junto a la URL → El certificado es válido → Detalles del certificado

Firefox: Haga clic en el icono de candado → Conexión segura → Más información → Ver certificado

Esto te muestra:

  • A quién se emitió el certificado (el dominio)
  • Quién lo emitió (la Autoridad Certificadora)
  • Válido desde / Válido hasta fechas
  • Número de serie y huella digital del certificado

Para una verificación rápida de integridad (si este certificado es válido y pertenece al dominio correcto), todo lo que necesita es la interfaz de usuario del navegador.

La verificación exhaustiva: herramienta en línea

Para obtener un análisis completo de un certificado, incluidos los conjuntos de cifrado, la validez de la cadena, la configuración HSTS y las vulnerabilidades conocidas, utilice el Herramienta de verificación SSL. Ingrese cualquier dominio y ejecutará un análisis completo sin necesidad de instalar nada.

Esto es especialmente útil para:

  • Certificados en servidores a los que no puedes acceder directamente
  • Verificación de un nuevo certificado después de la instalación
  • Verificar los certificados antes de que estén a punto de caducar
  • Auditoría de la solidez del conjunto de cifrado (TLS 1.0/1.1 debe estar deshabilitado)

La línea de comando: openssl

Para desarrolladores y administradores de sistemas, openssl le brinda inspección directa del certificado desde la terminal.

Verifique el certificado de un servidor remoto:

Comando
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -text

Esto devuelve los detalles completos del certificado. Campos clave a tener en cuenta:

Fecha de caducidad:

Comando
openssl s_client -connect example.com:443 -servername example.name </dev/null 2>/dev/null | openssl x509 -noout -dates

Salida:

Comando
notBefore=Jan  1 00:00:00 2025 GMT
notAfter=Jan  1 00:00:00 2026 GMT

Verifique un archivo de certificado local:

Comando
openssl x509 -in certificate.crt -noout -text
openssl x509 -in certificate.crt -noout -dates
openssl x509 -in certificate.crt -noout -subject -issuer

Verificar una cadena de certificados:

Comando
openssl verify -CAfile chain.pem certificate.crt

Verificar días hasta el vencimiento (programable):

Comando
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2 | xargs -I{} date -d {} +%s | xargs -I{} expr \( {} - $(date +%s) \) / 86400

Devuelve el número de días restantes. Útil para monitorear scripts.

Qué significa cada campo de certificado

Asunto/Nombre común (CN): El dominio para el que se emitió el certificado. Debe coincidir con el dominio que estás visitando o el navegador mostrará una advertencia. Para certificados comodín, esto es *.example.com.

Nombres alternativos de sujeto (SAN): La lista de todos los dominios que cubre el certificado. Los certificados modernos utilizan SAN en lugar de solo CN. Un certificado podría cubrir example.com, www.example.com, y api.example.com : todos enumerados aquí. Esto es lo que realmente comprueba el navegador.

Emisor: La Autoridad Certificadora (CA) que firmó el certificado. Los más comunes: Let's Encrypt, DigiCert, Sectigo, Google Trust Services, Amazon. El propio certificado del emisor está firmado por una CA raíz en la que confían los navegadores.

Período de validez: Fechas ni antes ni después. Los certificados caducan: los certificados de Let's Encrypt caducan cada 90 días (con renovación automática). Los certificados comerciales suelen tener una duración de 1 año.

Algoritmo y tamaño clave: RSA 2048 bits es el mínimo; Los de 4096 bits o EC P-256 son más potentes. Los certificados EC (curva elíptica) ofrecen una seguridad equivalente con claves de menor tamaño, lo que mejora marginalmente el rendimiento.

Versión TLS: Su servidor debe ser compatible con TLS 1.2 y TLS 1.3. TLS 1.0 y 1.1 están obsoletos y deberían desactivarse; los navegadores modernos rechazan las conexiones en estos.

Transparencia del certificado: Los certificados modernos se registran en registros públicos de transparencia de certificados. Esto es obligatorio para los certificados en los que Chrome confía. Permite a cualquiera auditar qué certificados se han emitido para un dominio, lo que resulta útil para detectar certificados no autorizados.

Problemas comunes de SSL y cómo solucionarlos

Certificado caducado El problema más común. Su navegador muestra "Su conexión no es privada" con error NET::ERR_CERT_DATE_INVALID.

Solución: renovar el certificado. Si está utilizando Let's Encrypt con Certbot, ejecute certbot renew. Si utiliza un certificado pago, compre una renovación a través de su CA e instálela. Configure el monitoreo para que le avise 30 días antes del vencimiento para que esto nunca suceda en producción.

El dominio del certificado no coincide El certificado fue emitido para example.com pero estás de visita www.example.com (o viceversa), y el certificado no incluye al otro como SAN.

Solución: obtenga un certificado que cubra ambos (la mayoría de los certificados deberían hacerlo) o redirija uno al otro de manera consistente.

Cadena de certificados incompleta Su servidor presenta su certificado pero no los certificados intermedios que lo conectan a una CA raíz confiable. Los navegadores que han almacenado en caché el intermediario pueden conectarse; otros ven un error.

Solución: Configure su servidor web para enviar la cadena completa. Con Nginx, use ssl_certificate apuntando a un archivo que incluye tanto su certificado como el paquete intermedio. Con Apache, use SSLCertificateChainFile.

Verifique este problema específicamente:

Comando
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | grep -A 1 "Certificate chain"

Deberías ver al menos 2 certificados en la cadena (tu certificado + intermedio).

Certificado autofirmado Los navegadores no confían en los certificados que no están firmados por una CA reconocida. Los certificados autofirmados están bien para el desarrollo interno, pero activarán advertencias para cualquier sitio público.

Solución: obtenga un certificado de una CA confiable. Let's Encrypt es gratuito y está automatizado para dominios públicos.

Conjunto de cifrado débil El servidor negocia una conexión TLS utilizando algoritmos obsoletos o débiles (RC4, DES, cifrados de grado de exportación, TLS 1.0/1.1).

Consulta con:

Comando
nmap --script ssl-enum-ciphers -p 443 example.com

Solución: actualice la configuración SSL de su servidor web únicamente a conjuntos de cifrado modernos. Mozilla Generador de configuración SSL genera configuraciones listas para pegar para Nginx, Apache y otros.

Monitoreo de certificados

La verificación manual de los certificados antes de que caduquen no escala. Opciones para monitoreo automatizado:

Renovación automática de Certbot: Si está utilizando Let's Encrypt, Certbot configura una tarea cron o un temporizador systemd que renueva automáticamente los certificados cuando les quedan menos de 30 días. Verifique que esté funcionando: certbot renew --dry-run

Servicios de monitoreo de tiempo de actividad: La mayoría de los monitores de tiempo de actividad (UptimeRobot, Freshping, Better Uptime) incluyen alertas de vencimiento de certificados. Establezca un umbral de advertencia de 30 días.

Script personalizado en cron: Un script bash simple que utiliza el openssl anterior puede verificar el vencimiento y enviar una alerta por correo electrónico. El comando

Comando
#!/bin/bash
DOMAIN="example.com"
DAYS_LEFT=$(echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2 | xargs -I{} python3 -c "from datetime import datetime; print((datetime.strptime('{}', '%b %d %H:%M:%S %Y %Z') - datetime.utcnow()).days)")
if [ "$DAYS_LEFT" -lt 30 ]; then
    echo "Certificate for $DOMAIN expires in $DAYS_LEFT days" | mail -s "SSL Warning" admin@example.com
fi

Conclusión

Los problemas de certificados son predecibles y prevenibles. Los principales (caducidad, falta de coincidencia de dominio, cadena incompleta) aparecen claramente en una verificación SSL.

Ejecute una verificación en cualquier dominio con el Herramienta de verificación SSL. Para servidores de producción, configure la supervisión de caducidad con al menos una ventana de alerta de 30 días. Y si todavía tiene TLS 1.0 o 1.1, desactívelos; cualquier servidor moderno debe ser solo TLS 1.2+.