Transport Layer Security (TLS) es un protocolo criptográfico que cifra y autentica los datos que intercambian las aplicaciones en red, sobre todo entre navegadores y sitios web mediante HTTPS.
Cómo funciona TLS
TLS sucedió al protocolo SSL de Netscape: TLS 1.0 se publicó en 1999, TLS 1.2 en 2008 (RFC 5246) y TLS 1.3 en 2018 (RFC 8446). Todas las versiones de SSL y TLS 1.0/1.1 están obsoletas (RFC 8996). Cada conexión empieza con un handshake:
- cliente y servidor acuerdan la versión del protocolo y la suite de cifrado;
- el servidor demuestra su identidad con un certificado digital, que el cliente valida;
- ambos derivan las claves de sesión, en TLS 1.3 siempre mediante Diffie-Hellman efímero, que aporta secreto perfecto hacia adelante;
- los datos de la aplicación se cifran y protegen en integridad con cifrados autenticados como AES-GCM o ChaCha20-Poly1305.
TLS 1.3 eliminó algoritmos obsoletos y redujo el handshake a un solo viaje de ida y vuelta.
Por qué importa TLS
TLS protege HTTPS, el transporte de correo (SMTP, IMAP), las VPN, las API e innumerables aplicaciones frente a la escucha y la manipulación. Su historia muestra los principales riesgos:
- Errores de implementación: Heartbleed (CVE-2014-0160) en OpenSSL filtraba memoria del servidor, incluidas claves privadas, en 2014.
- Debilidades del protocolo: BEAST (2011) y POODLE (2014) atacaron versiones antiguas; FREAK y Logjam (2015) fueron ataques de degradación a criptografía débil «de exportación».
- Uso por atacantes: hoy la mayoría del malware y de los sitios de phishing también usa TLS, por lo que los defensores recurren a la inspección TLS y a huellas como JA3/JA4 para detectar conexiones maliciosas.
Buenas prácticas
- Permitir solo TLS 1.2 y 1.3 y desactivar las suites de cifrado heredadas.
- Automatizar la renovación de certificados y proteger las claves privadas.
- Validar correctamente los certificados en las aplicaciones y no desactivar nunca la verificación en el código.
- Probar la configuración con regularidad con herramientas como SSL Labs o testssl.sh.