Come impostare il certificato SSL gratuito "Let’s Encrypt" in Nginx (Ubuntu)

Se hai letto molti articoli sui consigli per la privacy, sicuramente ti imbatterai in un suggerimento che ti chiede di installare l’estensione “HTTPS ovunque” in modo che ti reindirizzi automaticamente alla versione HTTPS del sito web ogni volta che è possibile. La cosa negativa è che l’estensione HTTPS ovunque funziona solo quando il sito web che stai visitando ha implementato SSL, e per la maggior parte dei webmaster, questo può essere un compito difficile (e costoso) da solo. Fortunatamente, con il movimento Let’s Encrypt, è più facile per i webmaster aggiungere certificati SSL ai loro siti ora.

In passato (e attualmente), impostare un certificato SSL richiede di generare prima una chiave privata sul tuo server, poi acquistare un certificato SSL dall’Autorità di Certificazione (che può essere costosa), e infine, configurarlo nel server. Ci sono molte complicazioni tecniche nel processo, e non farlo correttamente renderà il certificato SSL inutile. Con il progetto Let’s Encrypt, è possibile aggiungere rapidamente un certificato SSL ai propri siti senza alcun costo. E essendo supportato da grandi attori del settore come Mozilla, Akamai, Cisco, EFF e Google, è supportato dalla maggior parte dei browser e dei sistemi operativi.

In questo tutorial esamineremo i passaggi per configurare il certificato SSL di Let’s Encrypt nel server Nginx. Stiamo usando un server Ubuntu 14.04 per questo tutorial e assumiamo che tu stia usando un server Ubuntu Nginx funzionante. L’istruzione potrebbe differire per il server Ubuntu 16.04.

Installa Let’s Encrypt

Prima di tutto, per installare Let’s Encrypt, avrai bisogno di git per clonarlo dal suo repository git. Installa git con il seguente comando:

sudo apt-get install git bc

Una volta installato, clona il repository di Let’s Encrypt:

sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Configurazione dell’ambiente

Prima di procedere all’installazione e alla configurazione del certificato SSL, è importante consentire l’accesso alla cartella .well-known nella directory radice del web. Per impostazione predefinita, tutti i file e le cartelle con un “.” davanti al nome del file sono nascosti e non accessibili al pubblico. Tuttavia, in questo caso dobbiamo fornire il permesso per il pubblico di accedere alla cartella .well-known, poiché è qui che Let’s Encrypt memorizzerà un file speciale per la convalida.

Procedi alla tua cartella di configurazione del sito Nginx e aprila (se hai un file di configurazione personalizzato per il tuo sito) o utilizza il predefinito:

cd /etc/nginx/sites-available  
sudo nano default

Aggiungi le seguenti righe nel blocco server:

location ~ /\.well-known {  
    allow all;  
}

Salva (Ctrl + O) e chiudi (Ctrl + x) il file di configurazione.

Testa la tua configurazione Nginx:

sudo nginx -t

Se tutta la configurazione funziona bene, ricarica la configurazione:

sudo service nginx reload

Generare un certificato SSL

Ora che hai terminato la configurazione di Nginx, la prossima cosa è installare il certificato SSL.

Vai alla cartella di Let’s Encrypt:

cd /opt/letsencrypt

Esegui il seguente comando per generare il certificato:

./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com

Ci sono alcune cose da cambiare qui:

  • Cambia il webroot-path con il percorso della root del documento del tuo sito. Il predefinito è “/user/share/nginx/html,” ma la tua configurazione potrebbe differire.
  • Cambia “example.com” con il tuo nome di dominio. Nota che “example.com” e “www.example.com” sono due domini diversi. Se desideri che il certificato supporti più domini, aggiungi semplicemente -d example1.com alla fine del comando. Ad esempio, per impostare un certificato SSL per i domini “example.com”, “www.example.com”, “example1.com” e “www.example1.com,” utilizza il seguente comando:
./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com -d example1.com -d www.example1.com

Alla prima esecuzione lo script installerà un insieme di file Python nel tuo sistema. Una volta completato, inizierà il processo di generazione del certificato. Prima ti chiederà il tuo indirizzo email:

nginx-letsencrypt-email-address

Dopo di che ti verrà chiesto di leggere i Termini di Servizio sul sito web di Let’s Encrypt. Seleziona “Accetto.”

nginx-letsencrypt-read-tos

Se vedi il seguente messaggio:

NOTES IMPORTANTI:  
 - Congratulazioni! Il tuo certificato e la catena sono stati salvati in  
/etc/letsencrypt/live/example.com/fullchain.pem. Il tuo certificato  
   scadrà il 2016-10-02. Per ottenere una versione nuova o modificata di  
   questo certificato in futuro, esegui semplicemente di nuovo letsencrypt-auto.  
   Per rinnovare *tutti* i tuoi certificati in modo non interattivo, esegui  
"letsencrypt-auto renew"  
 - Se ti piace Certbot, per favore considera di supportare il nostro lavoro:  
  
   Donando a ISRG / Let's Encrypt:   https://letsencrypt.org/donate  
   Donando a EFF:                    https://eff.org/donate-le

Significa che hai generato con successo un certificato SSL per il tuo(e) sito(i). Se invece vedi un messaggio di errore, ripara l’errore e ripeti di nuovo.

Attivare il certificato SSL per il tuo sito

Ora che hai generato il certificato SSL, è il momento di attivarlo per il tuo sito.

Torna alla cartella di configurazione di Nginx e apri il file di configurazione del sito:

cd /etc/nginx/sites-available  
sudo nano default

Crea un nuovo blocco server e aggiungi la seguente configurazione all’interno del blocco:

server {  
        server_name example.com www.example.com;  
  
        listen 443 ssl;  
  
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;  
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;  
}

Salva e chiudi il file.

Nota: quanto sopra è una versione semplificata del blocco di configurazione di Nginx. Dovresti aggiungere la tua configurazione personalizzata nel blocco.

Infine, testa la configurazione:

sudo nginx -t

Se tutto va bene, ricarica Nginx:

sudo service nginx reload

Questo è tutto. Hai configurato con successo un certificato SSL per i tuoi siti. Puoi ora caricare la versione “https” del tuo URL per vederlo in azione.

Rinnovo Automatico di un Certificato SSL di Let’s Encrypt

A differenza della maggior parte dei certificati SSL commerciali che sono validi per un minimo di un anno, un certificato SSL di Let’s Encrypt è valido solo per tre mesi. Dopo questo tempo dovrai rinnovarlo per continuare a usarlo. Let’s Encrypt viene fornito con un’opzione renew in modo da poter facilmente rinnovare i tuoi certificati senza dover ripetere l’intera installazione. Le seguenti istruzioni ti mostrano come impostare un cron job per il rinnovo automatico del tuo certificato SSL.

Ancora nel tuo server, apri il crontab:

sudo crontab -e

Aggiungi le seguenti righe:

00 0 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log  
05 0 * * 1 /etc/init.d/nginx reload

Le righe sopra controlleranno la data di scadenza dei tuoi certificati SSL ogni lunedì a mezzanotte e li rinnoveranno se è prossima alla scadenza. Ricaricherà anche Nginx (a mezzanotte e 5 minuti) per assicurarsi che il certificato rinnovato sia in uso.

Salva e chiudi il crontab.

Conclusione

Se gestisci un piccolo sito web e sei interessato ad aggiungere SSL al tuo sito, Let’s Encrypt è una grande opzione per aggiungere credibilità al tuo sito. È (relativamente) facile da impostare e non costa nulla (gratis, come in birra), quindi non c’è motivo di non sfruttarlo. Tuttavia, poiché fornisce solo un certificato Validato per Dominio (DV) (il tipo più basilare di certificato SSL) per quelle aziende che richiedono certificati Validati per Organizzazione (OV) o Certificati di Validazione Estesa (EV), un certificato SSL commerciale è probabilmente la strada giusta da seguire.