Ricerca nel sito web

Come proteggere Nginx con Let's Encrypt su Ubuntu e Debian


Seguendo il precedente tutorial Let's Encrypt riguardante Apache SSL, in questo articolo discuteremo come generare e installare un certificato SSL/TLS gratuito emesso da Let's Encrypt CA per server web Nginx su Ubuntu o Debian.

Leggi anche
  1. Proteggi Apache con Let's Encrypt gratuito su Ubuntu e Debian
  2. Installa Let's Encrypt SSL per proteggere Apache su RHEL e CentOS
Test dell'ambiente campione

Requisiti

  1. Un dominio registrato con record DNS A validi per puntare all'indirizzo IP del tuo server.
  2. Un server web Nginx installato con SSL e Vhost abilitati, nel caso in cui prevedi di ospitare più domini o sottodomini.

Passaggio 1: installazione del server Web Nginx

1. Nel primo passaggio installa il server web Nginx, se non è già installato, emettendo il comando seguente:

sudo apt-get install nginx

Passaggio 2: genera un certificato SSL Let's Encrypt per Nginx

2. Prima di generare un certificato SSL/TLS gratuito, installa il software Let's Encrypt nella gerarchia del file system /usr/local/ con l'aiuto di git immettendo i comandi seguenti:

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

3. Sebbene la procedura per ottenere un certificato per Nginx sia automatizzata, puoi comunque creare e installare manualmente un certificato SSL gratuito per Nginx utilizzando il plug-in Let's Encrypt Standalone.

Questo metodo richiede che la porta 80 non sia in uso sul tuo sistema per un breve periodo di tempo mentre il client Let's Encrypt convalida l'identità del server prima di generare il certificato.

Se stai già eseguendo Nginx, interrompi il servizio emettendo il seguente comando.


sudo service nginx stop
OR
sudo systemctl stop nginx

Nel caso in cui tu stia eseguendo un altro servizio che si collega alla porta 80, interrompi anche quel servizio.

4. Verifica che la porta 80 sia libera eseguendo il comando netstat:

sudo netstat -tlpn | grep 80

5. Ora è il momento di eseguire letsencrypt per ottenere un certificato SSL. Vai alla directory di installazione Let's Encrypt che si trova nel percorso di sistema /usr/local/letsencrypt ed esegui il comando letsencrypt-auto fornendo il codice --standalone e flag -d per ogni dominio o sottodominio per cui desideri generare un certificato.

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

6. Inserisci l'indirizzo email che verrà utilizzato da Let's Encrypt per il recupero della chiave smarrita o per avvisi urgenti.

7. Accetta i termini della licenza premendo il tasto Invio.

8. Infine, se tutto è andato a buon fine, sulla console del tuo terminale dovrebbe apparire un messaggio simile allo screenshot qui sotto.

Passaggio 3: installa Let's Encrypt SSL Certificate in Nginx

9. Ora che il tuo certificato SSL è stato generato è il momento di configurare il server web Nginx per utilizzarlo. I nuovi certificati SSL vengono inseriti in /etc/letsencrypt/live/ in una directory che prende il nome del tuo dominio. Esegui il comando ls per elencare i file di certificato emessi per il tuo dominio.

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

10. Successivamente, apri il file /etc/nginx/sites-available/default con un editor di testo e aggiungi il seguente blocco dopo la prima riga commentata che specifica l'inizio del Blocco SSL. Utilizza lo screenshot seguente come guida.

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

Estratto del blocco 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;

Sostituisci di conseguenza i valori del nome di dominio per i certificati SSL.

11. Nel passaggio successivo genera un potente codice Diffie-Hellman nella directory /etc/nginx/ssl/ per proteggere il tuo server da l'attacco Logjam eseguendo i seguenti comandi.

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

12. Infine, riavvia il demone Nginx per riflettere le modifiche.

sudo systemctl restart nginx

e testa il tuo certificato SSL visitando l'URL seguente.

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

Passaggio 4: Rinnovo automatico Crittografiamo i certificati Nginx

13. I certificati emessi da Let's Encrypt CA sono validi per 90 giorni. Per rinnovare automaticamente i file prima della data di scadenza, crea lo script bash ssl-renew.sh nella directory /usr/local/bin/ con il seguente contenuto.

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

Aggiungi il seguente contenuto al file 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

Sostituisci la variabile --webroot-path in modo che corrisponda alla root del tuo documento Nginx. Assicurati che lo script sia eseguibile emettendo il seguente comando.

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

14. Infine aggiungi un processo cron per eseguire lo script ogni due mesi a mezzanotte per garantire che il tuo certificato venga aggiornato circa 30 giorni prima della scadenza.

sudo crontab -e

Aggiungi la seguente riga in fondo al file.

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

Questo è tutto! Il tuo server Nginx ora offre contenuti SSL utilizzando un certificato Let's Encrypt SSL gratuito.