En este tutorial aprenderás cómo permitir TLSv1.3 en NGINX. Qué significa TLSv 1.3, en que ayuda y por qué necesitas en el servidor web como TLS se puede activar. Para servidores con sistema de gestión VestaCP (CentOS o Ubuntu) es un poco más difícil Activar TLS 1.3 que en un servidor cPanel, pero no es imposible.
Contenido
¿Por qué es mejor? TLS 1.3 que TLS 1.2?
TLS (Transport Layer Security) es una protocolo criptográfico lo que asegura seguridad de conexion entre la computadora y una red de la cual forma parte. TLS se utiliza en aplicaciones tales como: email, mensajería, llamadas de voz y video (VoIP), pero especialmente en HTTPS. Garantizar una comunicación segura entre el ordenador o smartphone del usuario y el servidor web de la página accedida.
TLS 1.3 ofrece una mayor velocidad de conectar cliente – servidor y un Por otra parte la seguridad eliminando algunos algoritmos. Las diferencias entre TLSv1.2 y TLSv1.3.
acerca de HTTPS, SSL (Secure Sockets Layer) También dije en otros artículos:
- Cómo instalar el certificado SSL (HTTPS Conexión) para un sitio web alojado en un servidor NGINX sin cPanel o VestaCP
- Recompilar OpenSSL 1.1 y NGINX 1.25 para TLS 1.3 (CentOS 7)
- Cómo mover un blog o sitio web WordPress desde HTTP en HTTPS (Nginx)
- Eliminar dominios antiguos Certbot certificates (Vamos a cifrar el certificado)
Cómo activar TLS 1.3 en NGINX. Servidor con gestión de VestaCP / CentOS
Antes de ver cómo se activa TLSv1.3 en NGINX, debe considerar algunos requisitos mínimos para TLS 1.3.
- NGINX 1.13.x o posterior
- Un certificado TLS IMPORTANTE
- Nombre de dominio activo con DNS correctamente configurado: sea accesible en Internet
- Un certificado TLS / SSL válido. también puede ser Let’s Encrypt.
Pe VestaCP instalado hace mucho tiempo, solo tenemos disponible el protocolo TLS 1.2. He visto en muchos tutoriales que es suficiente como en nginx.conf
agreguemos la siguiente línea para ca TLS 1.3 para ser activado:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
root /var/www/example.com/public;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
Falso. Si servidor CentOS con la gerencia VestaCP, NGINX no ha sido compilado con la versión mínima OpenSSL 1.1.1.1, ssl_protocols TLSv1.2 TLSv1.3;
în nginx.conf
.. no ayuda en absoluto.
[root@north ~]# nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
Entonces, en el ejemplo anterior, Nginx 1.22.0 es una versión compatible TLS 1.3, pero la biblioteca no nos ayuda OpenSSL 1.0.2k-fips.
Activar TLSv1.3 en Nginx, primero debe instalar las bibliotecas secundarias y los paquetes de desarrollo. Development Tools. se ejecuta en CentOS 7 líneas de comando:
yum install gcc gcc-c++ pcre-devel zlib-devel make unzip gd-devel perl-ExtUtils-Embed libxslt-devel openssl-devel perl-Test-Simple
yum groupinstall 'Development Tools'
1. Instala la última versión OpenSSL
En este momento la última versión es OpenSSL 1.1.1p, pero por lo que he notado ya hay y OpenSSL 3. Puede encontrar las fuentes en OpenSSL.org.
cd /usr/src
wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz
tar xvf openssl-1.1.1p.tar.gz
mv openssl-1.1.1p openssl
cd openssl
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --libdir=/lib64 shared zlib-dynamic
make -j4
make test
make install
Muy importante para correr make test
antes de instalar la biblioteca. Si la prueba tiene errores, no la ejecute make install
hasta que se corrijan los errores.
En el siguiente paso hacemos una copia de seguridad del archivo binario actual openssl
y agregamos symlink
al nuevo.
mv /usr/bin/openssl /usr/bin/openssl-backup
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
En /usr/local/openssl/bin
ejecutar ldd
para comprobar las dependencias de openssl. Posiblemente también podamos comprobar la versión de openssl. Dominio openssl version
.
[root@north bin]# ldd openssl
linux-vdso.so.1 => (0x00007ffd20bd7000)
libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007fab09b62000)
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007fab09675000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fab09471000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fab09255000)
libc.so.6 => /lib64/libc.so.6 (0x00007fab08e87000)
/lib64/ld-linux-x86-64.so.2 (0x00007fab09df5000)
[root@north bin]# openssl version
OpenSSL 1.1.1p 21 Jun 2022
Actualmente tenemos instalada la última versión. OpenSSL que perdura TLSv1.3. Podemos comprobar las versiones. TLS / SSL apoyado por las librerías OpenSSL por orden:
[root@north bin]# openssl ciphers -v | awk '{print $2}' | sort | uniq
SSLv3
TLSv1
TLSv1.2
TLSv1.3
[root@north bin]#
Esto no significa que los sitios web alojados con la ayuda del administrador VestaCP tendrán inmediatamente TLS 1.3.
Aunque hemos instalado OpenSSL 1.1.1p, Nginx está compilado con la versión anterior OpenSSL 1.0.2k-fips.
[root@north bin]# nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
[root@north bin]# openssl version
OpenSSL 1.1.1p 21 Jun 2022
[root@north bin]#
2. Vuelva a compilar Nginx para el sistema VestaCP
En este paso necesitamos recompilar para OpenSSL versión de Nginx ya instalada en el sistema CentOS / VestaCP. Como decía más arriba, en mi caso se trata de nginx/1.22.0. Ya que estamos hablando de un servidor web que tiene VestaCP sistema de administración, antes de comenzar a recompilar, es bueno hacer una copia de seguridad de los archivos de configuración de nginx.
Copia de seguridad de Nginx actual en el sistema VestaCP
Archivar y guardar en algún lugar del servidor los directorios "/etc/nginx
"Y"/usr/local/vesta/nginx
".
CORRER nginx -V
y guarde los módulos existentes en un archivo.
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
Cómo recompilar Nginx para actualizar OpenSSL / CentOS 7
Repito. Si usted tiene VestaCP, descargue la versión de Nginx que ya tiene instalada. Puede encontrar todos los archivos con versiones de Nginx en nginx.org.
cd /usr/src
wget https://nginx.org/download/nginx-1.22.0.tar.gz
tar xvf nginx-1.22.0.tar.gz
cd nginx-1.22.0
Recompilamos los módulos de nginx:
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-openssl=/usr/src/openssl \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong \
--param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
make -j4
make install
Ahora tenemos Nginx instalado y compilado con la última versión de OpenSSL capaz de soportar TLSv1.3.
[root@north bin]# nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.1.1p 21 Jun 2022
TLS SNI support enabled
*si nginx ya estaba instalado en el servidor, deberá desinstalarlo. La compilación no funciona en la actualización de nginx.
Cómo activar TLSv1.3 para dominios en VestaCP
En el archivo /etc/nginx/nginx.conf
añadimos las siguientes líneas:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers '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';
A nivel de dominio, cambié algo en las plantillas. VestaCP y para habilitar HTTP/2. Entonces, cuando agrego un nuevo dominio (example.com) con Let's Encrypt habilitado, tengo el siguiente archivo de configuración para el SSL:
cat /home/vestacpuser/conf/web/example.com.nginx.ssl.conf
server {
listen IP.IP.IP.IP:443 ssl http2;
server_name example.com www.example.com;
root /home/vestacpuser/web/example.com/public_html;
index index.php index.html index.htm;
access_log /var/log/nginx/domains/example.com.log combined;
access_log /var/log/nginx/domains/example.com.bytes bytes;
error_log /var/log/nginx/domains/example.com.error.log error;
ssl_certificate /home/vestacpuser/conf/web/ssl.example.com.pem;
ssl_certificate_key /home/vestacpuser/conf/web/ssl.example.com.key;
....
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers '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';
Antes de reiniciar nginx, es bueno probar primero su configuración.
[root@north web]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@north web]# systemctl restart nginx
Espero que encuentre útil este tutorial y si tiene problemas con algo, deje los detalles del problema en los comentarios.