Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero
![]()
El protocolo TLS 1.3 introdujo la capacidad de enviar Early Data (0-RTT), lo que permite a los clientes enviar datos al servidor durante la fase inicial del handshake TLS. Esto reduce la latencia en aplicaciones web críticas, especialmente aquellas que requieren conexiones repetitivas. Nginx, a partir de la versión 1.19, soporta esta característica mediante la directiva ssl_early_data.
Este artículo explica cómo configurar TLS 1.3 Early Data en un entorno Nginx con múltiples sitios (sites-enabled), incluyendo soporte para HTTP/2 y HTTP/3, y las consideraciones de seguridad asociadas.
Requisitos previos
- Nginx ≥ 1.19 con soporte para TLS 1.3 y HTTP/3.
- Certificados TLS válidos (por ejemplo, emitidos con Let's Encrypt y gestionados por Certbot).
- Acceso a los archivos de configuración de Nginx (
nginx.confy/etc/nginx/sites-enabled/*).
Configuración de un sitio con TLS 1.3 Early Data
- Editar el bloque
serveren el archivo del sitio, por ejemplo/etc/nginx/sites-enabled/misitio.com:
server {
listen 443 ssl http2;
listen 443 quic reuseport;
http3 on;
server_name misitio.com;
ssl_certificate /etc/letsencrypt/live/misitio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/misitio.com/privkey.pem;
# Configuración TLS recomendada
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_early_data on; # Habilita 0-RTT
# Logs
access_log /var/log/nginx/misitio_access.log;
error_log /var/log/nginx/misitio_error.log;
location / {
root /var/www/misitio;
index index.html;
}
# Alt-Svc para HTTP/3
add_header Alt-Svc 'h3=":443"; ma=86400' always;
}
- Notas importantes:
ssl_early_data on;solo funciona con TLS 1.3.- Cada bloque
serverpuede tener esta directiva de manera independiente, permitiendo habilitar Early Data solo en los sitios deseados. - Si se desea, se puede habilitar de manera global dentro del bloque
http { }denginx.conf, aunque esto es menos flexible.
Consideraciones de seguridad
- Riesgo de replay attacks: Early Data puede ser reenviado por un atacante si la aplicación no maneja correctamente solicitudes idempotentes.
- Compatibilidad de clientes: Algunos navegadores o librerías TLS antiguos no soportan 0-RTT. Esto no genera errores, simplemente ignoran Early Data.
- Solo para TLS 1.3: Asegúrese de no habilitarlo en protocolos anteriores.
Configuración de múltiples sitios (sites-enabled)
Para un servidor Nginx con varios dominios, cada sitio SSL puede habilitar Early Data de manera independiente:
server {
listen 443 ssl http2;
server_name sitio1.com;
ssl_certificate /etc/letsencrypt/live/sitio1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sitio1.com/privkey.pem;
ssl_protocols TLSv1.3;
ssl_early_data on;
}
server {
listen 443 ssl http2;
server_name sitio2.com;
ssl_certificate /etc/letsencrypt/live/sitio2.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sitio2.com/privkey.pem;
ssl_protocols TLSv1.3;
ssl_early_data on;
}De esta manera, cada dominio puede beneficiarse de conexiones de baja latencia sin afectar la configuración de los demás.
Pruebas y validación
- Reiniciar Nginx tras los cambios:
sudo nginx -t && sudo systemctl reload nginx- Verificar la negociación TLS con OpenSSL:
openssl s_client -connect misitio.com:443 -tls1_3 -early_data "GET / HTTP/1.1\r\nHost: misitio.com\r\n\r\n"- Comprobar compatibilidad HTTP/3 usando herramientas como Cloudflare TLS/HTTP3 test o navegadores modernos.
Conclusión
Habilitar TLS 1.3 Early Data (0-RTT) en Nginx permite reducir la latencia en sitios web críticos y es compatible con arquitecturas modernas que usan HTTP/2 y HTTP/3. Con la configuración correcta por sitio, se obtiene un equilibrio entre rendimiento y seguridad, permitiendo que cada dominio gestione sus propios certificados y políticas TLS.



