Certificato SSL per Nginx con Let’s Encrypt su Ubuntu

Contenuto1 Prerequisiti2 Installare Certbot3 Verificare la configurazione di Nginx4 Consentire il traffico HTTPS nel Firewall5 Ottenere un Certificato SSL6 Rinnovo automatico del Certificato7 Conclusione Let’s Encrypt è una Certificate Authority […]

Avatar di gbfactory
gbfactory 19 Luglio 2021

Let's Encrypt è una Certificate Authority (CA; in italiano "Autorità Certificativa") che fornisce un metodo semplice e gratuito per installare certificati TLS/SSL. Semplifica il processo fornendo un software, Certbot, che prova ad automatizzare quasi tutti i passaggi necessari per ottenere un certificato. Attualmente, il processo per ottenere e installare un certificato è completamente automatico sia su Apache che su Nginx.

In questa guida vedremo come utilizzare Certbot per ottenere un certificato SSL gratuito per Nginx su Ubuntu 20.04 che si rinnovi automaticamente alla scadenza.

Per questo procedimento è raccomandato creare un nuovo file con un server block per ogni dominio. Questo consente di evitare alcuni errori di configurazione e mantiene i file predefiniti come configurazione di fallback.

Prerequisiti

  • Un server Ubuntu 20.04 configurato seguendo la guida per i nuovi server, quindi con un account non root con i permessi di sudo e un firewall di base.
  • Un dominio registrato, in questa guida useremo example.com come esempio.
  • I seguenti record DNS impostati per il tuo server:
    1) Un record di tipo A con example.com che punta all'indirizzo IP pubblico del tuo server.
    2) Un record di tipo A con www.example.com che punta all'indirizzo IP pubblico del tuo server.
  • Nginx installato seguendo la guida su come installare Nginx su Ubuntu 20.04. Assicurati di avere un server block per il tuo dominio. In questo tutorial utilizzeremp il file nella posizione /etc/nginx/sites-available/example.com come esempio.

Installare Certbot

Il primo passo per ottenere un certificato SSL utilizzando Let's Encrypt è quello di installate il programma Certbot sul server.

Per installare Nginx e il suo plugin per Nginx con apt è sufficiente digitare il comando:

sudo apt install certbot python3-certbot-nginx

A questo punto è possibile utilizzare Certbot, ma prima è opportuno verificare la configurazione di Nginx.

Verificare la configurazione di Nginx

Certbot deve essere in grado di trovare il corretto server block nella configurazione di Nginx per poter configurare automaticamente il certificato SSL. Nel dettaglio, il programma andrà a cercare un blocco con un server_name che corrisponde al dominio che abbiamo fornito per richiedere il certificato.

Se hai seguito la guida su come installare Nginx, dovresti avere un server block per il tuo dominio posizionato a /etc/nginx/sites-available/exampe.com con il parametro server_name impostato correttamente.

Per verificare, puoi aprire il file utilizzando nano o un qualsiasi editor di testo con:

sudo nano /etc/nginx/sites-available/example.com

Una volta che avrai trovato la riga per il parametro server_line, assicurati che sia impostata in questo modo:

server_name example.com www.example.com;

Una volta verificato che tutto sia configurato correttamente, possiamo procedere allo step successivo.

In caso contrario sarà sufficiente modificare il file e inserire il tuo dominio. Una volta salvato il file, esci dall'editor e verifica la sintassi del file con:

sudo nginx -t

Se non ci sono errori da correggere, ricarica la configurazione di Nginx con il comando:

sudo systemctl reload nginx

Ora possiamo essere sicuri che Certbot trovi blocco corretto e lo possa aggiornare automaticamente.

Consentire il traffico HTTPS nel Firewall

Se hai il firewall ufw abilitato, sarà necessario modificare le impostazioni per consentire al traffico HTTPS di passare. Fortunatamente Nginx fornisce alcuni profili.

Puoi vedere la configurazione attuale del firewall con il seguente comando:

sudo ufw status

Se quello che viene stampato è come la configurazione riportata qui sotto, possiamo capire che solamente il traffico HTTP è consentito.

Per garantire l'acesso anche al traffico HTPS, dovremo consentire l'accesso al proflio "Nginx Full" e cancellare il profilo "Nginx HTTP", diventato ridondante:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

Adesso possiamo provare a ricontrollare lo stato del firewall con il comando di prima e dovremmo ottenere un output di questo tipo:

Ottenere un Certificato SSL

Certbot fornisce svariati metodi per ottenere un certificato SSL attraverso i plugin. Il plugin di Nginx è responsabile di configurare Nginx e di ricaricare i file della configurazione quando necessario. Per usare questo plugin, esegui il seguente comando:

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

Questo comando esegue certbot con il plugin di --nginx, utilizzando -d per fornire i domini per cui vorremmo richiedere un certificato valido.

Se questa è la vostra prima esecuzione di Certbot, vi verrà chiesto di inserire un indirizzo email e di accettare i termini di servizio. Dopo aver fatto ciò, Certbot comunicherà con il server di Let's Encrypt e poi controllerà che voi possediate il dominio per cui state cercando di richeidere un certificato.

Se tutto fa a buon fine, certbot vi chiderà ora come desideriamo configurare HTTPS.

Seleziona quello che preferisci e poi premi Invio. A questo punto la configurazione verrà aggiornata e Nginx verrà ricaricato. Certbot concluderà con un messaggio che per farci sapere che il processo è andato a buon fine e che ora i nostri certificati sono in memoria.

I tuo certificato sono stati scaricati, installati e caricati. Prova a ricaricare il tuo sito utilizzando https:// e vedrai che spunterà l'indicatore di sicurezza del browser, solitamente un lucchetto.

Rinnovo automatico del Certificato

I certificati forniti da Let's Encrypt sono validi solamente per novanta giorni. Questo è necessario per incoraggiare gli utenti ad automatizzare il processo di rinnovo dei certificati. Il software Certbot che abbiamo precedentemente installato si può occupare anche di questo, aggiugnendo un timer systemd che viene eseguito due volte al giorno e rinnova automaticamente il certificato entro trenta giorni dalla scadenza.

Puoi verificare lo stato del timer con systemctl:

sudo systemctl status certbot.timer

Per testare il processo di rinnovo, puoi fare un dry run con certbot:

sudo certbot renew --dry-run

Se non vedi errori, tutto è sistemato! Quando necessario, Certbot rinnoverà automaticamente il certificato e ricaricherà Nginx per rendere effettive le modifice. Se il processo di rinnovo automatico falisce, Let's Encrypt invierà un messaggio all'indirizzo email fornito durante l'installazione per avvertirci che il nostro certificato è in scadenza.

Conclusione

In questo tutoreial abbiamo visto come installare un certificato Let's Encrypt utilizzando il clien Certbot, come scaricare il certificato SSL per il nostro dominio e come configurare Nginx per utilizzare questi certificati, infine abbiamo anche verificato il funzionamento del rinnovo automatico.

Per qualsiasi informazione più approfondita su Certbot, potete consultare la documetazione ufficiale.