El Protocolo de Seguridad de la Capa de Transporte (TLS) y su predecesor, Secure Sockets Layer (SSL), son protocolos criptográficos que proporcionan seguridad e integridad de los datos para las comunicaciones a través de redes TCP/IP como Internet. Varias versiones de los protocolos son comunes en aplicaciones como la navegación web, el correo electrónico, el fax por Internet, la mensajería instantánea y la voz sobre IP (VoIP).
¿Qué proporcionan TLS y SSL?
En términos prácticos, estos protocolos aportan tres propiedades básicas a una conexión de red:
- Confidencialidad: cifrado de los datos para que terceros no puedan leer la información transmitida.
- Integridad: detección de modificaciones accidentales o maliciosas en los datos durante su tránsito.
- Autenticación: verificación de la identidad del servidor (y opcionalmente del cliente) mediante certificados digitales.
Componentes y funcionamiento básico
TLS está formado por varios subprotocolos. Los más relevantes son:
- Handshake: intercambio inicial entre cliente y servidor para acordar versiones, suites criptográficas y para autenticar al servidor mediante un certificado. En el handshake se realiza el intercambio de claves (mediante RSA, DH, ECDH/ECDHE u otros) y se derivan las claves de sesión.
- Record protocol: encapsula, fragmenta, comprime (opcional) y cifra los datos de aplicación usando las claves de sesión. También aplica códigos de autenticación (MAC) o algoritmos AEAD (como AES-GCM o ChaCha20-Poly1305).
- Alertas: mensajes que indican errores o el cierre correcto de la conexión.
El flujo típico del handshake incluye: ClientHello → ServerHello → envío del certificado del servidor → comprobación y acuerdo del método de intercambio de claves → generación de claves de sesión → establecimiento del canal cifrado y envío de datos de aplicación cifrados.
Certificados y autoridades de certificación (CA)
TLS usa certificados X.509 para probar la identidad de un servidor. Un certificado contiene la clave pública del servidor, el nombre del sujeto, la entidad emisora (CA) y fechas de validez. Para que un certificado sea confiable, normalmente debe encadenarse hasta un certificado raíz de confianza emitido por una Autoridad de Certificación (CA) incluida en la lista de confianza del sistema o navegador.
Mecanismos relacionados:
- Cadena de certificados: incluye certificados intermedios que conectan el certificado del servidor con una CA raíz.
- Revocación: comprobación de que un certificado no haya sido revocado mediante CRL (listas de revocación) u OCSP (Online Certificate Status Protocol). El OCSP stapling permite al servidor adjuntar la respuesta OCSP para mejorar rendimiento y privacidad.
- Autofirmados: certificados firmados por uno mismo son útiles en entornos de desarrollo o internos, pero no son confiables por defecto en navegadores públicos.
Versiones y evolución
- SSL 2.0 y 3.0: antiguas versiones ahora consideradas inseguras. SSL 3.0 fue reemplazada por TLS y está deshabilitada en sistemas actuales por vulnerabilidades como POODLE.
- TLS 1.0 y 1.1: versiones ya obsoletas y desaconsejadas; muchos servicios las han desactivado por problemas de seguridad y por mejores alternativas.
- TLS 1.2: ampliamente usado y todavía seguro cuando está correctamente configurado (cifrados modernos, AEAD, ECDHE).
- TLS 1.3: simplifica y acelera el handshake, elimina características inseguras (por ejemplo, suites de cifrado obsoletas), mejora la privacidad y reduce la latencia; recomendado si es compatible con clientes.
Vulnerabilidades históricas y lecciones
A lo largo de los años se han descubierto ataques significativos que llevaron a cambios en protocolos y configuraciones:
- POODLE: exploit contra SSL 3.0 que terminó su uso generalizado.
- BEAST, CRIME, TIME: ataques que afectaron implementaciones y modos de cifrado específicos.
- Heartbleed: vulnerabilidad en OpenSSL que permitía leer memoria del servidor.
- FREAK, Logjam, DROWN: ataques que explotaban soporte de cifrados débiles o compatibilidad con protocolos antiguos.
Estas incidencias subrayan la importancia de mantener software actualizado, deshabilitar protocolos y cifrados inseguros y auditar regularmente la configuración TLS.
Buenas prácticas de configuración
- Usar TLS 1.2 como mínimo y preferir TLS 1.3 cuando sea posible.
- Habilitar cifras modernas: AEAD (AES-GCM, ChaCha20-Poly1305) y ECDHE para proporcionar perfect forward secrecy.
- Deshabilitar SSL 2.0/3.0 y TLS 1.0/1.1; eliminar RC4, DES, 3DES y cifrados basados en MD5.
- Configurar certificados válidos, con cadenas completas y renovarlos antes de su expiración.
- Habilitar OCSP stapling, HSTS (HTTP Strict Transport Security) y, cuando corresponda, certificate pinning con cautela.
- Proteger las claves privadas (por ejemplo, usando HSM) y aplicar políticas de rotación de claves.
- Usar pruebas y escaneos (p. ej. herramientas de evaluación de TLS) para verificar la configuración y detectar problemas.
Usos comunes en aplicaciones
- HTTPS: navegación segura sobre HTTP (puerto 443).
- Correo electrónico: SMTPS/STARTTLS, IMAPS y POP3S para proteger el correo.
- Servicios de directorio y FTP: LDAP sobre TLS, FTPS, etc.
- VoIP y mensajería: cifrado de señales y medios (SIP/TLS, SRTP con claves negociadas por TLS).
- APIs y microservicios: comunicación entre servicios internos mediante TLS para confidencialidad y autenticidad.
Cómo comprobar y diagnosticar TLS
- En navegadores, hacer clic en el candado de la barra de direcciones para ver el certificado y la versión TLS.
- Usar herramientas de línea de comando como openssl s_client o curl -v para inspeccionar handshakes y certificados.
- Servicios de análisis externos (por ejemplo, evaluadores de configuración TLS) permiten comprobar la compatibilidad, cadenas y puntuación de seguridad.
En resumen, TLS (y anteriormente SSL) es la base de la seguridad de las comunicaciones en Internet. Mantenerse al día con las versiones, configuraciones y prácticas recomendadas es esencial para proteger datos y garantizar la confianza entre clientes y servidores.