Cómo deshabilitar TLS 1.0 y TLS 1.1 en un servidor que esté ejecutando NGINX para servir contenido.
Transport Layer Security (TLS) es un protocolo de encriptación usado encima de la capa HTTP para generar conexiones HTTPS, es decir, conexiones seguras vía navegador web entre un cliente y un servidor (entre otros usos). TLS es el sucesor del protocolo SSL. A su vez, TLS ha ido evolucionando en diferentes versiones desde el año 1999 hasta la actualidad: TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3...
Compañías de la talla de Microsoft, Google o Mozilla han declarado que dejarán de ofrecer soporte para TLS 1.0 y TLS 1.1 en marzo de 2020, por lo que si tenemos un servidor web corriendo NGINX (tanto en modo servidor como en modo Reverse Proxy), sería recomendable deshabilitarlos, puesto que dejarán de ser un estándar. Las conexiones HTTPS se podrán seguir realizando con TLS 1.2 o superior.
Antes de deshabilitar TLS 1.0 y TLS 1.1 en una instalación de NGINX, deberíamos empezar por realizar un backup de la configuración actual de NGINX que se esté ejecutando en el servidor:
Para que NGINX solo negocie con TLS 1.2 o superior en todos los dominios que apuntan a él, debemos editar la directiva "server" general del servidor en el archivo /etc/nginx/nginx.conf y añadir (o modificar) la opción ssl_protocols para que quede tal que así:
Si ya disponemos de la directiva ssl_protocols, simplemente debemos eliminar los valores TLSv1 y TLSv1.1.
Puede que se de el caso de que usemos NGINX como Reverse Proxy y queramos que un dominio determinado sea accesible con TLS 1.0, por ejemplo, porque se conectan a él máquinas que tienen un sistema operativo antiguo embedido y solo pueden negociar conexiones HTTPS con TLSv1.
Para este tipo de casos, podemos configurar la entrada de tipo "server" que agrupa la configuración del dominio en cuestión (por ejemplo, dominio.net) para que este dominio funcione con TLS 1.0 de forma independiente a la configuración general. Para ello, especificamos en el bloque server del dominio los ssl_protocols que queremos que acepte (TLSv1, TLSv1.1, TLSv1.2, etc.):
Una vez configurados los protocolos, solo queda recargar la configuración de NGINX:
A partir de este momento, si realizamos un test de conexión HTTPS (con Qualys, nmap, etc.), observaremos que el servidor ya no negocia con TLS 1.0 ni TLS 1.1.
Transport Layer Security (TLS) es un protocolo de encriptación usado encima de la capa HTTP para generar conexiones HTTPS, es decir, conexiones seguras vía navegador web entre un cliente y un servidor (entre otros usos). TLS es el sucesor del protocolo SSL. A su vez, TLS ha ido evolucionando en diferentes versiones desde el año 1999 hasta la actualidad: TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3...
Compañías de la talla de Microsoft, Google o Mozilla han declarado que dejarán de ofrecer soporte para TLS 1.0 y TLS 1.1 en marzo de 2020, por lo que si tenemos un servidor web corriendo NGINX (tanto en modo servidor como en modo Reverse Proxy), sería recomendable deshabilitarlos, puesto que dejarán de ser un estándar. Las conexiones HTTPS se podrán seguir realizando con TLS 1.2 o superior.
Backup
Antes de deshabilitar TLS 1.0 y TLS 1.1 en una instalación de NGINX, deberíamos empezar por realizar un backup de la configuración actual de NGINX que se esté ejecutando en el servidor:
HOST# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
Configuración general
Para que NGINX solo negocie con TLS 1.2 o superior en todos los dominios que apuntan a él, debemos editar la directiva "server" general del servidor en el archivo /etc/nginx/nginx.conf y añadir (o modificar) la opción ssl_protocols para que quede tal que así:
server {
listen 443 ssl http2;
...
ssl_protocols TLSv1.2 TLSv1.3;
}
Si ya disponemos de la directiva ssl_protocols, simplemente debemos eliminar los valores TLSv1 y TLSv1.1.
Configuración independiente de un dominio
Puede que se de el caso de que usemos NGINX como Reverse Proxy y queramos que un dominio determinado sea accesible con TLS 1.0, por ejemplo, porque se conectan a él máquinas que tienen un sistema operativo antiguo embedido y solo pueden negociar conexiones HTTPS con TLSv1.
Para este tipo de casos, podemos configurar la entrada de tipo "server" que agrupa la configuración del dominio en cuestión (por ejemplo, dominio.net) para que este dominio funcione con TLS 1.0 de forma independiente a la configuración general. Para ello, especificamos en el bloque server del dominio los ssl_protocols que queremos que acepte (TLSv1, TLSv1.1, TLSv1.2, etc.):
server {
listen 443 ssl http2;
server_name www.dominio.net dominio.net;
...
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
}
Aplicar cambios
Una vez configurados los protocolos, solo queda recargar la configuración de NGINX:
HOST# nginx -s reload
A partir de este momento, si realizamos un test de conexión HTTPS (con Qualys, nmap, etc.), observaremos que el servidor ya no negocia con TLS 1.0 ni TLS 1.1.