GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo habilitar la confidencialidad directa perfecta de SSL/TLS en Apache o Nginx

Este artículo proporciona una descripción general de Perfect Forward Secrecy (PFS) y cómo habilitarlo en servidores web Apache® o Nginx®.

¿Qué es PFS?

PFS protege los datos compartidos entre el cliente y el servidor incluso si la clave privada se ve comprometida. Puede lograr esto generando una clave de sesión para cada transacción realizada.

¿Por qué implementar PFS en un sitio web?

Un certificado TLS o SSL funciona mediante el uso de una clave pública y una clave privada. Cuando el navegador web y el servidor intercambian claves, el sistema crea una clave de sesión mediante un mecanismo de intercambio de claves llamado RSA, donde se cifra toda la información entre el cliente y el servidor. RSA crea un enlace entre la clave privada del servidor y la clave de sesión creada para cada sesión segura única.

La sesión puede sufrir un ataque de fuerza bruta; esto consiste en un ataque que inyecta al servidor combinaciones de claves de seguridad hasta que encuentra la correcta. Aunque este proceso puede llevar mucho tiempo, si la clave privada del servidor se ve comprometida, los atacantes pueden ver tanto los datos de la sesión como todas las transacciones del cliente.

Cómo PFS protege un sitio web

PFS permite que el servidor no dependa de una única clave de sesión. En lugar de usar la misma clave de cifrado cada vez que un usuario o servicio realiza una conexión, PFS genera una clave de sesión única para cada conexión.

Habilite PFS mediante el uso de mecanismos de intercambio:Ephemeral Diffie-Hellman (DHE) y Elliptic Curve Diffie-Hellman (ECDHE) . Si los atacantes fuerzan bruscamente la clave de sesión, solo pueden descifrar la información de esa sesión y no de las demás.

Requisitos para implementar PFS en un servidor web

Utilice una de las siguientes herramientas para implementar PFS:

  • OpenSSL 1.0.1c+
  • Apache 2.4 o
  • Nginx 1.0.6+ y 1.1.0+

Puede verificar las versiones de estos paquetes ejecutando los siguientes comandos:

Nota :Los resultados pueden variar a medida que los proveedores lanzan nuevas versiones.

[root@rackspace-test ~]$ openssl version
OpenSSL 1.1.1g FIPS  21 Apr 2020

[root@rackspace-test ~]$ httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Nov  4 2020 03:20:37

Para servidores de sistemas operativos Debian® o Ubuntu®, el comando es apache2ctl -v .

[root@rackspace-test ~]$ nginx -v
nginx version: nginx/1.14.1

Configuración del protocolo SSL

Verifique qué sitios web tienen SSL implementado ejecutando los comandos en las siguientes secciones.

Estos ejemplos implementan PFS en un dominio llamado example.com .

Instrucciones de Apache

Hay dos opciones para verificar qué sitios web tienen un certificado SSL:

[root@rackspace-test ~]# grep -ir "SSLEngine" /etc/httpd/
/etc/httpd/conf.d/example.com.conf:     SSLEngine on

Nota: La ruta predeterminada para Apache Virtual Hosts se encuentra en el directorio /etc/httpd/conf.d/ . Los directorios pueden variar según su configuración.

O bien, puede usar los comandos httpd -S o apachectl -S para CentOS® o RedHat® Enterprise Linux® (RHEL) y apache2ctl -S para sistemas operativos Debian o Ubuntu.

[root@rackspace-test ~]# httpd -S | grep 443
*:443                  is a NameVirtualHost
     port 443 namevhost www.example.com (/etc/httpd/conf.d/example.com.conf:10)

Agregue los siguientes parámetros a la configuración de vhost con su editor de texto favorito:

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"

Cuando busca la palabra SSL en el host virtual, la salida debe ser similar a la siguiente después de la implementación:

[root@rackspace-test ~]# egrep 'SSL' /etc/httpd/conf.d/example.com.conf
     SSLEngine on
     SSLProtocol all -SSLv2 -SSLv3
     SSLHonorCipherOrder on
     SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
     SSLCertificateFile       /etc/ssl/certs/2022-example.com.crt
     SSLCertificateKeyFile    /etc/ssl/private/2022-example.com.key

Asegúrese de que la sintaxis sea correcta y reinicie Apache.

[root@rackspace-test ~]# httpd -t
Syntax OK
[root@rackspace-test ~]# apachectl -k restart
Instrucciones de Nginx

Enumere los sitios web que tienen un certificado SSL instalado:

[root@rackspace-test ~]# egrep -ir 'SSL' /etc/nginx/conf.d/
/etc/nginx/conf.d/example.com.conf:        listen 443 ssl;
/etc/nginx/conf.d/example.com.conf:        ssl_certificate       /etc/ssl/certs/2022-example.com.chained.crt;
/etc/nginx/conf.d/example.com.conf:        ssl_certificate_key   /etc/ssl/private/2022-example.com.key;

Nota: La ruta predeterminada para Nginx Blocks se encuentra en el directorio /etc/nginx/conf.d/ . Los directorios pueden variar según su configuración.

Agregue los siguientes parámetros a la configuración de vhost con su editor de texto favorito:

ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";

Cuando busca la palabra SSL en el host virtual, la salida debe ser similar a la siguiente después de la implementación:

[root@racksapce-test ~]# egrep -ir 'SSL' /etc/nginx/conf.d/example.com.conf
     listen          443 ssl;
     ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
     ssl_prefer_server_ciphers on;
     ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
     ssl_certificate         /etc/ssl/certs/2022-example.com.chained.crt;
     ssl_certificate_key     /etc/ssl/private/2022-example.com.key;

Asegúrese de que la sintaxis sea correcta y reinicie Nginx.

[root@rackspace-test ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@rackspace-test ~]# nginx -s reload

Al seguir los pasos anteriores, puede implementar PFS correctamente para sus sitios web.

Use la pestaña Comentarios para hacer cualquier comentario o hacer preguntas. También puede iniciar una conversación con nosotros.


Linux
  1. ¿Qué es NGINX? ¿Como funciona?

  2. Cómo habilitar HTTP2 en NGINX

  3. Cómo habilitar la política HSTS (HTTP Strict Transport Security) en Nginx y Apache

  4. Cómo habilitar el protocolo HTTPS con Apache 2 en Ubuntu 20.04

  5. CentOS / RHEL:Cómo habilitar SSL para Apache

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

¿Cómo habilitar IPv6 en Nginx?

Cómo habilitar la compresión GZIP en Nginx

Cómo instalar Nginx con Let's Encrypt TLS/SSL en Ubuntu 20.04

Cómo habilitar TLS 1.3 en Apache y Nginx

Cómo comprobar la fecha de caducidad de SSL en Plesk