Búsqueda de sitios web

Instale el certificado SSL Let's Encrypt para Nginx en RHEL 9/8


En este artículo, lo guiaremos sobre cómo generar e instalar un certificado SSL/TLS obtenido de forma gratuita de Let's Encrypt Certificate Authority que usaremos para proteger las transacciones HTTP del servidor web Nginx en RHEL y Distribuciones basadas en RHEL como Fedora, Rocky Linux y AlmaLinux.

Si desea instalar Let's Encrypt para Apache en RHEL y distribuciones basadas en RHEL, siga esta guía a continuación:

Requisitos

  • Un nombre de dominio registrado con registros DNS A válidos para apuntar a la dirección IP pública del servidor.
  • Servidor web Nginx instalado con SSL habilitado y Hosts virtuales habilitados (solo para alojamiento de múltiples dominios o subdominios).

Configuración de nuestro entorno de pruebas

Paso 1: Instale el servidor web Nginx en los sistemas RHEL

1. En el primer paso, en caso de que aún no tenga instalado el demonio Nginx, ejecute los siguientes comandos con privilegios de root para instalar el servidor web Nginx desde los repositorios de Epel.


------------- On RHEL, Rocky & AlmaLinux 9 ------------- 
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

------------- On RHEL, Rocky & AlmaLinux 8 -------------
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

------------- Install Nginx Web Server -------------
yum install nginx

Nota: Los usuarios de Fedora no necesitan instalar el repositorio de epel.

Paso 2: Instale Let's Encrypt (Certbot) en los sistemas RHEL

2. El método más rápido para instalar el cliente Let's Encrypt en sistemas Linux es instalando los paquetes certbot y python3-certbot-nginx desde el repositorio de epel. .


dnf install certbot python3-certbot-nginx

3. Después de instalar el cliente certbot, verifique la versión instalada del software Let's Encrypt ejecutando el siguiente comando:


certbot --version

certbot 1.30.0

Paso 3: Obtenga un certificado SSL Let's Encrypt gratuito para Nginx

4. El proceso de obtención de un Certificado SSL/TLS gratuito para Nginx se realizará manualmente utilizando Let's Encrypt Standalone > complemento.

Este método requiere que el puerto 80 esté libre durante el tiempo que el cliente Let's Encrypt valida la identidad del servidor y genera certificados.

Entonces, si Nginx ya se está ejecutando, detenga el demonio con el siguiente comando y ejecute la utilidad ss para confirmar que el puerto 80 ya no está en uso en la pila de red.


service nginx stop
systemctl stop nginx
ss -tln

5. Ahora es el momento de obtener un certificado SSL gratuito de Let's Encrypt ejecutando el comando certbot con --nginx para inicializar la búsqueda y configuración del certificado de seguridad Let's Encrypt para dominios Nginx.


certbot --nginx
Or
certbot --nginx -d example.com -d www.example.com

6. Finalmente, si todo salió como debería, se mostrará un mensaje de información de felicitación en su terminal bash. El mensaje también se mostrará cuando caducará el certificado.

Paso 4: Instale el certificado SSL Let's Encrypt en Nginx

9. Ahora que posee un Certificado SSL/TLS gratuito, es hora de instalarlo en el servidor web Nginx para que su dominio lo utilice.

Todos los certificados SSL nuevos se colocan en /etc/letsencrypt/live/ en un directorio que lleva el nombre de su nombre de dominio. Utilice el comando ls para enumerar los archivos de certificado emitidos para su dominio e identificarlos.

sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/your_domain.tld

10. Para instalar los archivos de certificado en Nginx y habilitar SSL, abra el archivo /etc/nginx/nginx.conf para editarlo y agregue las siguientes declaraciones después de la última línea de escucha de bloque de servidor. Utilice la siguiente ilustración como guía.

vi /etc/nginx/nginx.conf

Extracto del bloque SSL de Nginx:

SSL configuration
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/your_domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.tld/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

Reemplace la cadena nombre de dominio para que los certificados SSL coincidan con su propio dominio.

11. Finalmente, reinicie el servicio Nginx y visite su dominio a través del protocolo HTTPS en https://yourdomain. La página debería cargarse sin problemas, sin ningún error de certificado.

systemctl restart nginx
service nginx restart

12. Para verificar el certificado SSL/TLS y su rectitud visite el siguiente enlace:

https://www.ssllabs.com/ssltest/analyze.html 

13. En caso de que reciba una notificación de que su servidor admite un intercambio de claves DH débil y una calificación general de grado B, genere un nuevo < cifradoDiffie-Hellman en el directorio /etc/nginx/ssl/ para proteger su servidor contra el ataque Logjam ejecutando los siguientes comandos.

mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl dhparam -out dhparams.pem 4096

En este ejemplo, hemos utilizado una clave de 4096 bits, que en realidad tarda mucho en generarse y genera una sobrecarga adicional en su servidor y en el protocolo de enlace SSL.

En caso de que no haya una necesidad explícita de usar una clave durante tanto tiempo y no seas demasiado paranoico, deberías estar seguro con una clave de 2048 bits.

14. Después de generar la clave DH, abra el archivo de configuración de Nginx y agregue las siguientes declaraciones después de la línea ssl_ciphers para agregar la clave DH y Eleve el nivel de seguridad de su dominio a una calificación A+.

vi /etc/nginx/nginx.conf

Agregue el siguiente extracto de bloque a Nginx.conf:

ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:SSL:10m;
ssl_buffer_size 8k;
add_header Strict-Transport-Security max-age=31536000;

15. Reinicie el servicio Nginx para aplicar los cambios y vuelva a probar su certificado SSL borrando el caché de resultados anterior desde el enlace mencionado anteriormente.

systemctl restart nginx
service nginx restart

Paso 5: La renovación automática de Nginx Free permite cifrar certificados SSL

16. Let's Encrypt CA lanza certificados SSL/TLS gratuitos válidos por 90 días. Los certificados se pueden renovar y aplicar manualmente antes de su vencimiento utilizando el complemento webroot, sin detener su servidor web, emitiendo los siguientes comandos:


certbot --nginx -d example.com -d www.example.com
systemctl reload nginx

Cuando ejecute el comando anterior, asegúrese de reemplazar example.com para que coincida con su dominio.

17. Para renovar automáticamente el certificado antes de que caduque, cree el trabajo cron en un archivo crontab existente.


crontab -e

Agregue el siguiente trabajo cron al final del archivo, que se ejecutará todos los días al mediodía para verificar la caducidad del certificado y renovarlo. La opción --quiet le dice a certbot que no genere resultados.


0 12 * * * /usr/bin/certbot renew --quiet

¡Eso es todo! Ahora, el servidor Nginx puede ofrecer contenido web seguro con un certificado SSL/TLS Let's Encrypt gratuito en su sitio web.