GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo habilitar TLS 1.3 en Nginx en Ubuntu 18.04 y 16.04

HTTPS ahora es más rápido y seguro gracias al lanzamiento de TLS 1.3 por parte de IETF (RFC 8446) en agosto de 2018. TLS 1.3 es ahora la última versión del protocolo TLS. Este tutorial le mostrará cómo habilitar TLS 1.3 en el servidor web Nginx en Ubuntu 18.04 y Ubuntu 16.04.

Actualizar :Hay una manera más fácil de habilitar TLS 1.3. Consulte este artículo:Cómo habilitar fácilmente TLS 1.3 en Nginx en Ubuntu 18.10, 18.04, 16.04, 14.04

TLS 1.3: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. Como tales, los administradores de servidores ya no pueden agregar conjuntos de cifrado antiguos en TLS 1.3 para apaciguar a los usuarios de navegadores web antiguos. Esto, por supuesto, es una explicación demasiado simplificada. CloudFlare tiene una buena explicación detallada de TLS 1.3.

Habilite TLS 1.3 en Nginx en Ubuntu 18.04, Ubuntu 16.04

Hay dos requisitos cuando se trata de habilitar TLS 1.3 con Nginx.

  1. Su versión de Nginx debe ser compatible con TLS 1.3. Eso significa nginx 1.13 o superior.
  2. Nginx debe compilarse con OpenSSL 1.1.1+ o ejecutarse con OpenSSL 1.1.1+.

El segundo requisito puede sonar confuso, así que déjame darte dos ejemplos.

  • Ubuntu 18.04 viene con OpenSSL 1.1.0. Reemplazar la biblioteca de OpenSSL del sistema no es una buena idea, pero puede descargar el código fuente de OpenSSL 1.1.1 y compilar Nginx con el código fuente de OpenSSL 1.1.1 para habilitar TLS 1.3.
  • Arch Linux actualmente viene con OpenSSL 1.1.1, pero el paquete Nginx en el repositorio de Arch en realidad está construido con OpenSSL 1.1.0. En este caso, Nginx no está construido con OpenSSL 1.1.1, pero se ejecuta con OpenSSL 1.1.1.

Ahora veamos cómo compilar Nginx con OpenSSL 1.1.1 en Ubuntu 18.04 y Ubuntu 16.04.

1. Agregar el repositorio oficial de Nginx

En lugar de descargar el tarball fuente y compilarlo con make , agregaré el repositorio oficial de Nginx a mi servidor Ubuntu y luego crearé un paquete deb a partir del código fuente. De esta manera, no necesito agregar manualmente una larga lista de parámetros de configuración a configure dominio. También habrá un útil archivo de servicio systemd dentro del paquete deb.

Primero obtenga la clave Nginx GPG e impórtelo a Ubuntu.

wget http://nginx.org/keys/nginx_signing.key

sudo apt-key add nginx_signing.key

A continuación, cree un archivo de lista de origen para el repositorio de Nginx.

sudo nano /etc/apt/sources.list.d/nginx.list

Agregue las siguientes dos líneas en el archivo. El deb-src line nos permite descargar paquetes fuente de Nginx con apt source dominio. Bonic es el nombre en clave de Ubuntu 18.04. Si está utilizando Ubuntu 16.04, reemplácelo con xenial . (Nota:este repositorio no es compatible con SO de 32 bits).

deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx

Para guardar un archivo en el editor de texto Nano, presione Ctrl+O , luego presione Entrar para confirmar. Para salir, presiona Ctrl+X . Luego actualice el índice de paquetes local.

sudo apt update

Ahora el repositorio oficial de Nginx se agrega al servidor de Ubuntu.

2. Descarga el código fuente de Nginx y OpenSSL

Haremos un nginx directorio bajo /usr/local/src/ para almacenar las fuentes de Nginx y luego cd en ese directorio.

sudo mkdir /usr/local/src/nginx
 
cd /usr/local/src/nginx/

Descargue el paquete fuente de Nginx con el siguiente comando:

sudo apt install dpkg-dev

sudo apt source nginx

Echa un vistazo a los archivos descargados.

ls

Salida:

nginx-1.15.3                               nginx_1.15.3-1~bionic.dsc
nginx_1.15.3-1~bionic.debian.tar.xz        nginx_1.15.3.orig.tar.gz

Luego, clone el repositorio OpenSSL github.

cd /usr/local/src

sudo apt install git

sudo git clone https://github.com/openssl/openssl.git

cd openssl

A continuación, enumere todas las ramas y cambie a la rama estable 1.1.1.

git branch -a

sudo git checkout OpenSSL_1_1_1-stable

3. Editar reglas de compilación de Nginx

Edite el archivo de reglas de compilación de Nginx.

sudo nano /usr/local/src/nginx/nginx-1.15.3/debian/rules

Busque config.status.nginx: config.env.nginx sección. Agregue el siguiente texto al final de la línea CFLAGS. Tenga en cuenta que el siguiente texto no es una línea por sí mismo.

--with-openssl=/usr/local/src/openssl

Guarde y cierre el archivo.

4. Compilar Nginx

Asegúrese de estar en el directorio fuente de Nginx.

cd /usr/local/src/nginx/nginx-1.15.3/

Instale dependencias para construir nuestro paquete deb de Nginx.

sudo apt build-dep nginx

Ahora use el siguiente comando para compilar el paquete deb.

sudo dpkg-buildpackage -b

Si ve el siguiente error,

missing initializer for field 'md_ctrl' of 'EVP_MD {aka const struct evp_md_st}

Luego edite el auto/cc/gcc archivo.

sudo nano /usr/local/src/nginx/nginx-1.15.3/auto/cc/gcc

Comente la siguiente línea. El -Werror hace que GCC trate las advertencias como errores.

CFLAGS="$CFLAGS -Werror"

Luego vuelva a ejecutar el comando de compilación. Una vez que se complete la compilación, habrá un paquete de deb de Nginx en /usr/local/src/nginx/ directorio. Si ha instalado Nginx anteriormente, es hora de eliminar la versión anterior y luego instalar la nueva versión.

sudo apt remove nginx nginx-common nginx-full

cd /usr/local/src/nginx/

sudo dpkg -i nginx_1.15.3-1~bionic_amd64.deb

Ahora comencemos con Nginx.

sudo systemctl start nginx

Si ve el siguiente mensaje de error.

Failed to start nginx.service: Unit nginx.service is masked.

Luego desenmascare nginx y emita el comando de inicio nuevamente.

sudo systemctl unmask nginx

Tenga en cuenta que el proceso de Nginx podría ejecutarse como usuario nginxwww-data . Esto se puede cambiar editando la primera línea en /etc/nginx/nginx.conf expediente. Solo asegúrese de que Nginx se ejecute como el mismo usuario con PHP-FPM.

Ahora revisa los argumentos de configuración de Nginx.

sudo nginx -V

Como puede ver, tenemos la última versión de Nginx construida con OpenSSL 1.1.1.

5. Habilite TLS 1.3 en el bloque del servidor Nginx

Ahora asumo que ya ha habilitado HTTPS para su bloque de servidor Nginx. La sintaxis para habilitar TLS 1.3 es bastante sencilla. Abra su archivo de bloque de servidor Nginx en /etc/nginx/conf.d/ directorio o /etc/nginx/sites-enabled/ directorio. Busque la siguiente línea.

ssl_protocols  TLSv1.2;

Agregue TLSv1.3 a la lista de protocolos.

ssl_protocols TLSv1.2 TLSv1.3;

Luego agregue los siguientes 3 conjuntos de cifrado a sus conjuntos de cifrado existentes.

TLS-CHACHA20-POLY1305-SHA256
TLS-AES-256-GCM-SHA384
TLS-AES-128-GCM-SHA256

así:

ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

Guarde y cierre el archivo. Luego pruebe la configuración de Nginx y vuelva a cargar.

sudo nginx -t

sudo systemctl reload nginx

Es poco probable que Ubuntu 18.04 cambie a OpenSSL 1.1.1, por lo que si actualiza Nginx con sudo apt upgrade comando, TLS 1.3 desaparecerá. Es una buena idea evitar que Nginx sea actualizado por apt con este comando:

sudo apt-mark hold nginx

Actualización:a partir de Nginx 1.15.4, puede habilitar 0-RTT con OpenSSL agregando la siguiente directiva en el contexto del servidor SSL. El valor predeterminado se establece en off . En la versión anterior 1.15.3, solo se puede usar con BoringSSL.

ssl_early_data on

Habilitar TLS 1.3 en Google Chrome

Actualmente, Firefox 62 y Chrome 69 solo admiten el borrador 28 de TLS 1.3. OpenSSL 1.1.1 es compatible con la versión final de TLS 1.3. Las implementaciones basadas en la versión preliminar y la versión final de RFC no interactúan entre sí.

Para probar nuestro servidor Nginx ahora, debemos instalar la versión beta de Google Chrome y habilitar la versión final de TLS 1.3. Una vez que haya instalado Chrome beta, ingrese chrome://flags/#tls13-variant en la barra de direcciones y cambia de default a Enabled (Final) . Luego reinicie Google Chrome para que el cambio surta efecto.

Ahora visite su sitio web habilitado para TLS 1.3 en Google Chrome beta y presione Ctrl+Shift+I para abrir la página de herramientas para desarrolladores. Ve a Security pestaña. Puede ver la versión de TLS en uso.

Se dice que Firefox enviará la versión final de TLS 1.3 en Firefox 63, programada para octubre de 2018. En Chrome 70, la versión final de TLS 1.3 estará habilitada para conexiones salientes.

Actualización:Chrome 70 agregó soporte para la versión final de TLS 1.3, pero de forma predeterminada todavía usa el borrador 28 de TLS 1.3.

Habilite TLS 1.3 con CloudFlare

Si está utilizando CloudFlare CDN (red de entrega de contenido), entonces su sitio web ya está utilizando TLS1.3. En el panel de control de CloudFlare, seleccione crypto pestaña y verá la opción para habilitar/deshabilitar TLS 1.3. También puede habilitar 0-RTT. CloudFlare admite tanto la versión preliminar 28 como la versión final.

¡Eso es todo! Espero que este tutorial le haya ayudado a habilitar TLS 1.3 en Nginx en Ubuntu 18.04 y Ubuntu 16.04. Cuídate.


Ubuntu
  1. Cómo habilitar SSH en Ubuntu 18.04

  2. Cómo instalar Nginx con PHP5 y MySQL en Ubuntu 11.10

  3. Ubuntu 20.04 – ¿Cómo habilitar Hwe?

  4. Cómo habilitar HTTP/2 en Nginx en Ubuntu y CentOS

  5. Cómo habilitar y deshabilitar Wayland en Ubuntu

Cómo instalar Docker en Ubuntu 20.04 y ejecutar Nginx Container

Cómo habilitar y deshabilitar interfaces de red en Ubuntu 20.04

Cómo habilitar fácilmente TLS 1.3 en Nginx en Ubuntu 20.04, 18.04, 16.04

Cómo habilitar TLS 1.3 en Apache y Nginx

Cómo instalar y configurar Nginx en Ubuntu 20.04 y Ubuntu 21.04

Cómo instalar Nginx en Ubuntu 15.04