TLS/HTTPS por dentro: handshake, certificados y cadena de confianza
Introducción
Sabemos que HTTPS cifra la comunicación, pero muchas veces se queda en eso. En producción, entender TLS marca la diferencia entre “funciona en mi máquina” y una plataforma confiable.
Este artículo recorre el flujo real: handshake, certificados, confianza y fallos típicos.
HTTP vs HTTPS: qué cambia (y qué no)
- HTTP y HTTPS siguen usando el mismo modelo petición-respuesta.
- Lo que cambia es el canal: con HTTPS, HTTP viaja dentro de un túnel TLS cifrado.
- HTTPS protege datos en tránsito, pero no corrige problemas de lógica de negocio, XSS o permisos mal diseñados.
TLS handshake paso a paso (versión moderna)
Cuando cliente y servidor se conectan:
- ClientHello: el cliente propone versión TLS, cifrados soportados y envía SNI (dominio).
- ServerHello: el servidor elige parámetros y responde con su certificado.
- Verificación de certificado: el cliente valida dominio, fechas, emisor y cadena de confianza.
- Intercambio de claves: ambas partes derivan una clave de sesión efímera.
- Canal cifrado activo: ya puede circular HTTP de forma segura.
En TLS 1.3, este flujo es más corto y rápido que en versiones antiguas.
Certificados y cadena de confianza
Un certificado X.509 afirma: “este dominio corresponde a esta clave pública”.
Elementos clave:
- CN/SAN: nombres de dominio válidos.
- Issuer: autoridad certificadora (CA) que lo firma.
- Validez: fecha
not beforeynot after. - Cadena: certificado del sitio + intermedios + raíz confiable en el sistema.
Si falta un intermedio, muchos clientes fallarán aunque el certificado “parezca correcto”.
SNI y ALPN: dos detalles críticos
- SNI permite que un mismo servidor entregue el certificado correcto según dominio.
- ALPN negocia el protocolo de aplicación (por ejemplo HTTP/1.1 o HTTP/2).
Cuando SNI no llega bien (proxy mal configurado), aparecen errores de certificado inesperados.
Errores comunes en producción
- Certificado expirado.
- Dominio no incluido en SAN.
- Cadena incompleta (faltan intermedios).
- Hora del servidor o cliente desfasada.
- TLS obsoleto o suites inseguras.
Síntomas típicos: NET::ERR_CERT_COMMON_NAME_INVALID, CERT_DATE_INVALID, SSL_ERROR_HANDSHAKE_FAILURE.
Checklist mínimo para un HTTPS sano
- Forzar TLS moderno (1.2+; ideal 1.3 habilitado).
- Renovación automática de certificados.
- Redirección 301 de HTTP a HTTPS.
- HSTS una vez validada la configuración.
- Monitoreo de expiración y alertas.
- Pruebas externas periódicas (por ejemplo SSL Labs).
Cierre
HTTPS no es solo “poner un candado”. Es una cadena de decisiones técnicas que deben estar bien afinadas. Si dominas handshake, certificados y validación, depuras incidencias más rápido y reduces riesgo real.