TLS
TLS (Transport Layer Security) es un protocolo criptográfico que proporciona comunicaciones seguras en redes de computadoras, siendo la evolución de SSL (Secure Sockets Layer).
¿Qué es TLS/SSL?
TLS es un protocolo que opera en la capa de transporte del modelo OSI, proporcionando cifrado, autenticación e integridad para las comunicaciones de red.
Historia y Versiones
SSL (Secure Sockets Layer)
- SSL 1.0: Nunca publicado (vulnerabilidades)
- SSL 2.0: 1995, obsoleto
- SSL 3.0: 1996, obsoleto (POODLE)
TLS (Transport Layer Security)
- TLS 1.0: 1999, obsoleto
- TLS 1.1: 2006, obsoleto
- TLS 1.2: 2008, ampliamente usado ✅
- TLS 1.3: 2018, más reciente ✅ Recomendado
Características Principales
Seguridad
- Cifrado: Datos cifrados en tránsito
- Autenticación: Verificar identidad del servidor
- Integridad: Detectar modificaciones
- No repudio: Prueba de comunicación
Rendimiento
- Handshake: Establecimiento de conexión
- Cifrado simétrico: Datos cifrados eficientemente
- Compresión: Compresión opcional
- Session resumption: Reutilización de sesiones
Arquitectura del Protocolo
Capas TLS
Application Data
├── TLS Record Protocol
│ ├── Handshake Protocol
│ ├── Change Cipher Spec Protocol
│ ├── Alert Protocol
│ └── Application Data Protocol
└── TCP/IP
Handshake TLS 1.2
- Client Hello: Cliente inicia conexión
- Server Hello: Servidor responde
- Certificate: Servidor envía certificado
- Server Key Exchange: Intercambio de claves
- Server Hello Done: Servidor termina
- Client Key Exchange: Cliente envía clave
- Change Cipher Spec: Cambio a cifrado
- Finished: Verificación mutua
Handshake TLS 1.3 (Simplificado)
- Client Hello: Cliente inicia con claves
- Server Hello: Servidor responde con claves
- Certificate: Servidor envía certificado
- Finished: Verificación mutua
Algoritmos Criptográficos
Cifrado Simétrico
- AES: Advanced Encryption Standard
- ChaCha20: Cifrado de flujo
- Camellia: Alternativa a AES
- 3DES: Triple DES (obsoleto)
Cifrado Asimétrico
- RSA: Rivest-Shamir-Adleman
- ECDHE: Elliptic Curve Diffie-Hellman
- DHE: Diffie-Hellman Ephemeral
- ECDSA: Elliptic Curve Digital Signature
Funciones Hash
- SHA-256: Secure Hash Algorithm
- SHA-384: SHA con 384 bits
- SHA-512: SHA con 512 bits
- MD5: Obsoleto, no seguro
Modos de Cifrado
- CBC: Cipher Block Chaining
- GCM: Galois/Counter Mode ✅ Recomendado
- CCM: Counter with CBC-MAC
- Poly1305: Autenticación con ChaCha20
Configuración de Servidor
Apache
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # Configuración TLS en Apache
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/private.key
SSLCertificateChainFile /path/to/chain.crt
# Configuración de seguridad
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on
SSLSessionTickets off
</VirtualHost>
|
Nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # Configuración TLS en Nginx
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
ssl_trusted_certificate /path/to/chain.crt;
# Configuración de seguridad
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_session_tickets off;
# Headers de seguridad
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
}
|
OpenSSL
1
2
3
4
5
6
7
8
| # Generar certificado autofirmado
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
# Verificar certificado
openssl x509 -in cert.pem -text -noout
# Probar conexión TLS
openssl s_client -connect example.com:443 -servername example.com
|
Certificados Digitales
Tipos de Certificados
- DV (Domain Validated): Validación de dominio
- OV (Organization Validated): Validación de organización
- EV (Extended Validated): Validación extendida
- Wildcard: Para subdominios
- Multi-Domain: Múltiples dominios
Autoridades Certificadoras
- Let’s Encrypt: Gratuita, automatizada
- DigiCert: Comercial, amplia aceptación
- Sectigo: Comercial, múltiples opciones
- GlobalSign: Comercial, internacional
Renovación Automática
1
2
3
4
5
6
7
8
| # Certbot para Let's Encrypt
certbot --apache -d example.com
# Renovación automática
certbot renew --dry-run
# Configurar cron para renovación
0 12 * * * /usr/bin/certbot renew --quiet
|
Seguridad y Mejores Prácticas
Configuración Segura
- Protocolos: Usar solo TLS 1.2 y 1.3
- Cifrados: Preferir cifrados fuertes
- Perfect Forward Secrecy: Usar DHE/ECDHE
- HSTS: HTTP Strict Transport Security
Monitoreo
- Expiración: Monitorear certificados
- Renovación: Automatizar renovación
- Vulnerabilidades: Escanear vulnerabilidades
- Compliance: Verificar cumplimiento
Herramientas de Análisis
- SSL Labs: Análisis de configuración
- Mozilla SSL Config: Configuraciones recomendadas
- OWASP: Guías de seguridad
- NIST: Estándares de seguridad
Aplicaciones
Web Security
- HTTPS: Sitios web seguros
- E-commerce: Transacciones seguras
- Banking: Banca en línea
- Government: Servicios gubernamentales
Email Security
- SMTPS: SMTP sobre TLS
- IMAPS: IMAP sobre TLS
- POP3S: POP3 sobre TLS
- S/MIME: Correo electrónico seguro
VPN y Túnel
- OpenVPN: VPN de código abierto
- IPsec: Seguridad a nivel de red
- WireGuard: VPN moderna
- Tunneling: Túneles seguros
API Security
- REST APIs: APIs REST seguras
- GraphQL: GraphQL sobre TLS
- WebSockets: WebSockets seguros
- gRPC: gRPC sobre TLS
Vulnerabilidades Comunes
Ataques Conocidos
- POODLE: Padding Oracle On Downgraded Legacy Encryption
- BEAST: Browser Exploit Against SSL/TLS
- CRIME: Compression Ratio Info-leak Made Easy
- BREACH: Browser Reconnaissance and Exfiltration via Adaptive Compression
Protecciones
- Actualización: Mantener versiones actualizadas
- Configuración: Configuración segura
- Monitoreo: Monitoreo continuo
- Testing: Pruebas de penetración
Herramientas de Testing
Análisis de Configuración
1
2
3
4
5
6
7
8
| # SSL Labs API
curl -s "https://api.ssllabs.com/api/v3/analyze?host=example.com"
# TestSSL.sh
./testssl.sh example.com
# Nmap SSL scripts
nmap --script ssl-enum-ciphers -p 443 example.com
|
Verificación de Certificados
1
2
3
4
5
6
7
8
| # Verificar cadena de certificados
openssl s_client -connect example.com:443 -showcerts
# Verificar fecha de expiración
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
# Verificar firma
openssl verify -CAfile ca-bundle.crt certificate.crt
|
Conceptos Relacionados
Referencias