Com protegir Nginx amb Lets Encrypt a Ubuntu i Debian


Seguint el tutorial anterior de Let's Encrypt sobre Apache SSL, en aquest article parlarem de com generar i instal·lar un certificat SSL/TLS gratuït emès per Let's Encrypt CA per al servidor web Nginx a Ubuntu o Debian.

  1. Asegureu Apache amb Let's Encrypt gratuït a Ubuntu i Debian
  2. Instal·leu Let's Encrypt SSL per protegir Apache a RHEL i CentOS

  1. Un domini registrat amb registres DNS A vàlids per apuntar cap a l'adreça IP del vostre servidor.
  2. Un servidor web Nginx instal·lat amb SSL i Vhost activats, per si teniu previst allotjar diversos dominis o subdominis.

Pas 1: instal·lació del servidor web Nginx

1. Al primer pas, instal·leu el servidor web Nginx, si encara no està instal·lat, emetent l'ordre següent:

$ sudo apt-get install nginx

Pas 2: genereu un certificat SSL Let's Encrypt per a Nginx

2. Abans de generar un certificat SSL/TLS gratuït, instal·leu el programari Let's Encrypt a la jerarquia del sistema de fitxers /usr/local/ amb l'ajuda del client git emetent les ordres següents:

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

3. Tot i que el procediment per obtenir un certificat per a Nginx està automatitzat, encara podeu crear i instal·lar manualment un certificat SSL gratuït per a Nginx mitjançant el connector Let's Encrypt Standalone.

Aquest mètode requereix que el port 80 no estigui en ús al vostre sistema durant un curt període de temps mentre el client Let's Encrypt valida la identitat del servidor abans de generar el certificat.

En cas que ja esteu executant Nginx, atureu el servei emetent l'ordre següent.

$ sudo service nginx stop
OR
$ sudo systemctl stop nginx

En cas que estigueu executant un altre servei que s'uneix al port 80, atureu aquest servei també.

4. Confirmeu que el port 80 estigui lliure executant l'ordre netstat:

$ sudo netstat -tlpn | grep 80

5. Ara és el moment d'executar letsencrypt per obtenir un certificat SSL. Aneu al directori d'instal·lació de Let's Encrypt que es troba al camí del sistema /usr/local/letsencrypt i executeu l'ordre letsencrypt-auto proporcionant l'opció certonly --standalone i la marca -d per a cada domini o subdomini que vulgueu generar un certificat.

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

6. Introduïu l'adreça de correu electrònic que utilitzarà Let's Encrypt per a la recuperació de claus perdudes o avisos urgents.

7. Accepteu els termes de la llicència prement la tecla Intro.

8. Finalment, si tot ha anat bé, hauria d'aparèixer un missatge semblant a la captura de pantalla següent a la consola del terminal.

Pas 3: instal·leu el certificat SSL Let's Encrypt a Nginx

9. Ara que s'ha generat el vostre certificat SSL, és hora de configurar el servidor web Nginx perquè l'utilitzi. Els nous certificats SSL es col·loquen a /etc/letsencrypt/live/ sota un directori que porta el nom del vostre nom de domini. Executeu l'ordre ls per llistar els fitxers de certificat emesos per al vostre domini.

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

10. A continuació, obriu el fitxer /etc/nginx/sites-available/default amb un editor de text i afegiu el bloc següent després de la primera línia comentada que especifica l'inici del bloc SSL. Utilitzeu la captura de pantalla següent com a guia.

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

Fragment del bloc 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;

Substituïu els valors del nom de domini per als certificats SSL en conseqüència.

11. Al següent pas, genereu un xifrat Diffie-Hellman fort al directori /etc/nginx/ssl/ per protegir el vostre servidor contra l'atac de Logjam executant les ordres següents.

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

12. Finalment, reinicieu el dimoni Nginx per reflectir els canvis.

$ sudo systemctl restart nginx

i prova el teu certificat SSL visitant l'URL següent.

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

Pas 4: Renovació automàtica Xifrem els certificats Nginx

13. Els certificats emesos per Let's Encrypt CA tenen una validesa de 90 dies. Per tal de renovar automàticament els fitxers abans de la data de caducitat, creeu l'script bash ssl-renew.sh al directori /usr/local/bin/ amb el contingut següent.

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

Afegiu el contingut següent al fitxer 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

Substituïu la variable --webroot-path perquè coincideixi amb l'arrel del document Nginx. Assegureu-vos que l'script sigui executable emetent l'ordre següent.

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

14. Finalment, afegiu una tasca de cron per executar l'script cada dos mesos a mitjanit per assegurar-vos que el vostre certificat s'actualitzarà aproximadament 30 dies abans que caduqui.

$ sudo crontab -e

Afegiu la línia següent a la part inferior del fitxer.

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

Això és! El vostre servidor Nginx ofereix ara contingut SSL mitjançant un certificat SSL gratuït de Let's Encrypt.