En un artículo anterior, expliqué los pasos para compilar el código fuente de Nginx con OpenSSL 1.1.1 para habilitar el protocolo TLS 1.3, que se lanzó oficialmente en agosto de 2018. En este tutorial, le mostraré una forma más sencilla de habilitar TLS 1.3 en Ubuntu 20.04, 18.04 y 16.04
TLS 1.3 ofrece rendimiento y seguridad mejorados
En cuanto al rendimiento, TLS 1.2 necesita dos viajes de ida y vuelta para establecer una conexión HTTPS. Con TLS 1.3, solo se requiere un viaje de ida y vuelta. TLS 1.3 también es compatible con el modo de ida y vuelta cero (reanudación de la sesión 0-RTT), lo que permite a los clientes que se han conectado previamente a su sitio web enviar una solicitud HTTP en el primer mensaje al servidor. Esto marca una gran diferencia para los usuarios de redes móviles o en ubicaciones muy distantes.
En términos de seguridad, TLS 1.3 eliminó la compatibilidad con conjuntos de cifrado antiguos, que son responsables de vulnerabilidades como el ataque ROBOT. Esto, por supuesto, es una explicación demasiado simplificada. CloudFlare tiene una buena explicación detallada de TLS 1.3.
Requisitos para habilitar TLS 1.3
Hay dos requisitos cuando se trata de habilitar TLS 1.3 con Nginx.
- Su versión de Nginx debe ser compatible con TLS 1.3. Eso significa Nginx 1.13 o superior.
- Nginx debe compilarse con OpenSSL 1.1.1 o superior.
Ubuntu 18.04 y 20.04 se envía con OpenSSL 1.1.1
OpenSSL 1.1.1 está incluido en el repositorio de Ubuntu 18.10 y 20.04 y el paquete Nginx del repositorio de Ubuntu 18.10/20.04 está construido con OpenSSL 1.1.1.
Cuando salió Ubuntu 18.04 por primera vez, solo venía con OpenSSL 1.0.2. Sin embargo, OpenSSL 1.1.1 se retroportó a Ubuntu 18.04.3.
Si aún usa Ubuntu 18.04.2, simplemente ejecute los siguientes comandos para actualizar a 18.04.3.
sudo apt update sudo apt upgrade
Instalar la última versión de Nginx compilado con OpenSSL 1.1.1 en Ubuntu 16.04
El paquete Nginx del repositorio de Ubuntu 16.04 no está construido con OpenSSL 1.1.1. Puede compilar manualmente Nginx con OpenSSL 1.1.1, pero lleva más tiempo y debe volver a compilar cuando sale una nueva versión de Nginx. Afortunadamente, podemos instalar Nginx desde un PPA (archivo de paquetes personales) de Ondřej Surý, un desarrollador de Debian y una figura importante en la comunidad DNS. Mantiene muchos paquetes para el repositorio de Debian, incluidos Apache, BIND, MariaDB, PHP, etc. También es uno de los mantenedores del PPA oficial de certbot. Así que confío en su PPA y lo uso en mis servidores.
Si ha agregado previamente otro repositorio de Nginx (como nginx.org), desactívelo. Por ejemplo, tengo otro repositorio de Nginx definido en /etc/apt/sources.list.d/nginx-repo.list
expediente. Simplemente comento todas las líneas de ese archivo para desactivarlo.
Para agregar Ondřej Surý Nginx PPA en Ubuntu, ejecute el siguiente comando.
sudo add-apt-repository ppa:ondrej/nginx sudo apt update
Luego elimine su paquete Nginx existente. (Sus archivos de configuración de Nginx no se eliminarán).
sudo apt remove nginx
Si usa iRedMail y Nginx, ejecute sudo apt remove nginx-full
para eliminar Nginx.
E instala Nginx desde PPA.
sudo apt install nginx
Cuando se le pregunte si desea instalar una nueva versión del archivo de configuración, elija N
. Su complemento certbot Nginx podría eliminarse junto con Nginx, así que vuelva a instalarlo.
sudo apt install python3-certbot-nginx
Ahora comprueba la versión de Nginx.
sudo nginx -V
Debería ver que Nginx está construido con OpenSSL 1.1.1.
nginx version: nginx/1.14.1 built with OpenSSL 1.1.1 11 Sep 2018 (running with OpenSSL 1.1.0g 2 Nov 2017) TLS SNI support enabled
Este PPA también proporciona OpenSSL 1.1.1 para Ubuntu 16.04. Si su Nginx en Ubuntu 16.04 aún se ejecuta con OpenSSL 1.1.0, debe actualizar su paquete OpenSSL.
sudo apt upgrade
Tenga en cuenta que si está utilizando el motor de cómputo de Google, verá el siguiente mensaje mientras ejecuta el comando anterior.
The following packages have been kept back: libssl1.1 openssl
Esto se debe a que el paquete OpenSSL 1.1.1 está en conflicto con algunos paquetes del motor de cómputo de Google. Deberá ejecutar el siguiente comando para actualizar OpenSSL.
sudo apt dist-upgrade
Habilite TLS 1.3 en Nginx Virtual Host en Ubuntu 20.04, 18.04 y 16.04
Una vez que tenga Nginx con OpenSSL 1.1.1, abra su archivo de host virtual Nginx.
sudo nano /etc/nginx/conf.d/site.conf
o
sudo nano /etc/nginx/sites-enabled/site.conf
Para habilitar TLS 1.3, simplemente agregue TLSv1.3
a ssl_protocols
directiva en el bloque del servidor SSL.
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
Si está utilizando el certificado Let's Encrypt, su configuración SSL se puede establecer en /etc/letsencrypt/options-ssl-nginx.conf
expediente. Por cierto, certbot habilita de forma predeterminada TLSv1
, que es inseguro, puede eliminarlo. Si está utilizando iRedMail y Nginx, debe editar las configuraciones de SSL en /etc/nginx/templates/ssl.tmpl
archivo.
Guarde y cierre el archivo. Luego reinicie Nginx para que el cambio surta efecto.
sudo systemctl restart nginx
Comprobación de la versión de TLS en el navegador web
Con Firefox 63 o superior, vuelva a cargar su página web, haga clic derecho en un área en blanco y seleccione View Page Info
en el menú contextual. Ve a Security
y verá que se está utilizando TLS 1.3.
Con Google Chrome 70 o superior, vuelva a cargar una página web en su sitio. Luego presiona Ctrl+Alt+I
para abrir Herramientas para desarrolladores. Ve a Security
y verá que se está utilizando TLS 1.3.
¿Se está utilizando TLSv1.3 entre Cloudflare y su servidor de origen?
Sí. Cloudflare es compatible con TLS 1.3 en el servidor front-end y también usa TLSv1.3 cuando se conecta a su servidor de origen. Para verificar qué versión de TLS se está utilizando, puede crear un formato de registro personalizado en /etc/nginx/nginx.conf
archivo.
sudo nano /etc/nginx/nginx.conf
Agrega el siguiente texto en el http
contexto.
log_format combined_ssl '$remote_addr - $remote_user [$time_local] ' '$ssl_protocol/$ssl_cipher ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
Guarde y cierre el archivo. Luego agregue un access_log
directiva en su SSL server
contexto. El registro está en combined_ssl
formato.
access_log /var/log/nginx/your-site.access.log combined_ssl;
Guarde y cierre el archivo. Luego recarga Nginx. En el archivo de registro de acceso, verá algo como a continuación, que indica que se está utilizando TLS 1.3.
172.68.132.115 - - [25/Feb/2020:16:07:26 +0800] TLSv1.3/TLS_AES_256_GCM_SHA384 "GET / HTTP/1.1"
Siguiente paso
Espero que este tutorial le haya ayudado a habilitar TLS 1.3 en Nginx en Ubuntu 20.04, Ubuntu 18.04 y Ubuntu 16.04. También es posible que desee configurar el firewall de la aplicación web ModSecurity para proteger su sitio web contra la piratería.
- Cómo configurar ModSecurity con Nginx en Debian/Ubuntu
Como siempre, si encuentra útil esta publicación, suscríbase a nuestro boletín gratuito para obtener más consejos y trucos. Cuídate 🙂