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

  1. Client Hello: Cliente inicia conexión
  2. Server Hello: Servidor responde
  3. Certificate: Servidor envía certificado
  4. Server Key Exchange: Intercambio de claves
  5. Server Hello Done: Servidor termina
  6. Client Key Exchange: Cliente envía clave
  7. Change Cipher Spec: Cambio a cifrado
  8. Finished: Verificación mutua

Handshake TLS 1.3 (Simplificado)

  1. Client Hello: Cliente inicia con claves
  2. Server Hello: Servidor responde con claves
  3. Certificate: Servidor envía certificado
  4. 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