Búsqueda de sitios web

Cómo proteger Nginx con Let's Encrypt en Ubuntu y Debian


Siguiendo el tutorial anterior de Let's Encrypt sobre Apache SSL, en este artículo analizaremos cómo generar e instalar un certificado SSL/TLS gratuito emitido por Let's Encrypt CA para el servidor web Nginx en Ubuntu o Debian.

Leer también
  1. Proteja Apache con Let's Encrypt gratuito en Ubuntu y Debian
  2. Instale Let's Encrypt SSL para proteger Apache en RHEL y CentOS
Entorno de muestra de prueba

Requisitos

  1. Un dominio registrado con registros DNS A válidos para apuntar a la dirección IP de su servidor.
  2. Un servidor web Nginx instalado con SSL y Vhost habilitados, en caso de que planee alojar varios dominios o subdominios.

Paso 1: instalar el servidor web Nginx

1. En el primer paso, instale el servidor web Nginx, si aún no está instalado, emitiendo el siguiente comando:

sudo apt-get install nginx

Paso 2: Genere un certificado SSL Let's Encrypt para Nginx

2. Antes de generar un certificado SSL/TLS gratuito, instale el software Let's Encrypt en la jerarquía del sistema de archivos /usr/local/ con la ayuda de git cliente emitiendo los siguientes comandos:

sudo apt-get -y install git
cd /usr/local/
sudo git clone https://github.com/letsencrypt/letsencrypt

3. Aunque el procedimiento para obtener un certificado para Nginx está automatizado, aún puede crear e instalar manualmente un certificado SSL gratuito para Nginx utilizando el complemento independiente Let's Encrypt.

Este método requiere que el puerto 80 no esté en uso en su sistema durante un corto período de tiempo mientras el cliente Let's Encrypt valida la identidad del servidor antes de generar el certificado.

En caso de que ya esté ejecutando Nginx, detenga el servicio emitiendo el siguiente comando.


sudo service nginx stop
OR
sudo systemctl stop nginx

En caso de que esté ejecutando otro servicio que se enlace en el puerto 80, detenga ese servicio también.

4. Confirme que el puerto 80 esté libre ejecutando el comando netstat:

sudo netstat -tlpn | grep 80

5. Ahora es el momento de ejecutar letsencrypt para obtener un certificado SSL. Vaya al directorio de instalación de Let's Encrypt que se encuentra en la ruta del sistema /usr/local/letsencrypt y ejecute el comando letsencrypt-auto proporcionando el --opción independiente y marca -d para cada dominio o subdominio en el que desee generar un certificado.

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly --standalone -d your_domain.tld 

6. Ingrese la dirección de correo electrónico que utilizará Let's Encrypt para la recuperación de claves perdidas o avisos urgentes.

7. Acepte los términos de la licencia presionando la tecla Intro.

8. Finalmente, si todo salió correctamente, debería aparecer en la consola de tu terminal un mensaje similar a la captura de pantalla siguiente.

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

9. Ahora que se ha generado su certificado SSL, es hora de configurar el servidor web Nginx para usarlo. Los nuevos certificados SSL se colocan en /etc/letsencrypt/live/ en un directorio que lleva el nombre de su nombre de dominio. Ejecute el comando ls para enumerar los archivos de certificado emitidos para su dominio.

sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/caeszar.tk

10. A continuación, abra el archivo /etc/nginx/sites-available/default con un editor de texto y agregue el siguiente bloque después de la primera línea comentada que especifica el comienzo del Bloqueo SSL. Utilice la siguiente captura de pantalla como guía.

sudo nano /etc/nginx/sites-enabled/default

Extracto del bloque Nginx:

SSL configuration
        #
        listen 443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/caeszar.tk/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/caeszar.tk/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_dhparam /etc/nginx/ssl/dhparams.pem;

Reemplace los valores de nombre de dominio para los certificados SSL en consecuencia.

11. En el siguiente paso, genere un cifrado Diffie-Hellman seguro en el directorio /etc/nginx/ssl/ para proteger su servidor contra el ataque Logjam ejecutando los siguientes comandos.

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

12. Finalmente, reinicie el demonio Nginx para reflejar los cambios.

sudo systemctl restart nginx

y pruebe su certificado SSL visitando la siguiente URL.

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

Paso 4: Renovación automática Let's Encrypt Certificados Nginx

13. Los certificados emitidos por Let's Encrypt CA son válidos durante 90 días. Para renovar automáticamente los archivos antes de la fecha de vencimiento, cree el script bash ssl-renew.sh en el directorio /usr/local/bin/ con el siguiente contenido.

sudo nano /usr/local/bin/ssl-renew.sh

Agregue el siguiente contenido al archivo ssl-renew.sh.

#!/bin/bash

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/var/www/html/ -d your_domain.tld
sudo systemctl reload nginx
exit 0

Reemplace la variable --webroot-path para que coincida con la raíz de su documento Nginx. Asegúrese de que el script sea ejecutable emitiendo el siguiente comando.

sudo chmod +x /usr/local/bin/ssl-renew.sh

14. Finalmente agregue un trabajo cron para ejecutar el script cada dos meses a medianoche para garantizar que su certificado se actualice aproximadamente 30 días antes de que caduque.

sudo crontab -e

Agregue la siguiente línea al final del archivo.

0 1 1 */2 * /usr/local/bin/ssl-renew.sh >> /var/log/your_domain.tld-renew.log 2>&1

¡Eso es todo! Su servidor Nginx ahora ofrece contenido SSL utilizando un certificado Let's Encrypt SSL gratuito.