I certificati HTTPS erogati da Let's Encrypt sono validi solamente per 90 giorni, trascorsi i quali è necessario svolgere la procedura di rinnovo: non solo è indispensabile richiedere un nuovo certificato, ma anche riavviare il webserver. In questa guida vedremo come configurare tutto al meglio affinché il certificato HTTPS di Let's Encrypt si rinnovi automaticamente, e Nginx venga riavviato per caricare e utilizzare il nuovo certificato

Let's Encrypt Nginx: come rinnovare automaticamente certificato HTTPS riavviare server web dopo rinnovo - let's encrypt rinnovo restart nginx spotlight

Questo articolo è incentrato sulla procedura per innovare i certificati di Let's Encrypt e renderli effettivi ricaricando la configurazione del server web. Per la guida generale finalizzata ad ottenere un certificato HTTPS gratuito, consultare quest'altro approfondimento dedicato:

» Leggi: Come ottenere un certificato HTTPS (SSL/TLS) gratis: la Grande Guida a Let's Encrypt

Rinnovare automaticamente i certificati di Let's Encrypt

Come abbiamo visto nella guida generale a Let's Encrypt, i certificati HTTPS si rinnovano impartendo il semplice comando sudo certbot renew.

Il pacchetto di installazione per alcune distribuzioni Linux (fra le quali Ubuntu) crea però anche una pianificazione in cron che svolge questa procedura automaticamente. Per verificare che sia così, impartiamo

ls -la /etc/cron.d

Let's Encrypt Nginx: come rinnovare automaticamente certificato HTTPS riavviare server web dopo rinnovo

Se fra i file ce n'è uno che ci chiama certbot, è probabilmente quello che ci interessa.

In caso il file non esistesse, possiamo ottenerlo con questo comando:

sudo apt install curl -y && sudo curl -Lo /etc/cron.d/certbot https://raw.githubusercontent.com/TurboLabIt/webstackup/master/config/https/certbot-renew

Possiamo quindi ispezionarlo impartendo

cat /etc/cron.d/certbot

Il contenuto dovrebbe essere simile al seguente

Let's Encrypt Nginx: come rinnovare automaticamente certificato HTTPS riavviare server web dopo rinnovo

Riavviare automaticamente Nginx dopo il rinnovo di Let's Encrypt

La procedura automatica appena vista, indipendentemente dal fatto che sia eseguita manualmente oppure automaticamente tramite cron, si limita a rinnovare il certificato HTTPS. In termini pratici, questo significa che il client certbot interagisce con il servizio remoto, che valida la richiesta e rilascia un nuovo file.

Se però non svolgiamo altre operazioni, il server web continua ad utilizzare il vecchio file. Di conseguenza: non appena il vecchio certificato raggiungerà la data di scadenza, i visitatori del sito vedranno il classico messaggio di avviso La tua connessione non è privata

Let's Encrypt Nginx: come rinnovare automaticamente certificato HTTPS riavviare server web dopo rinnovo - https la tua connessione non è privata expired

Per evitare che questo avvenga, possiamo utilizzare il sistema di hook offerto da certbot e riavviare il server web dopo il rinnovo, di modo che carichi il nuovo file con il certificato aggiornato. Per raggiungere il risultato è sufficiente preparare un file contenente il comando di riavvio (sudo service nginx restart) e spostarlo nel percorso dedicato (/etc/letsencrypt/renewal-hooks/deploy/).

Per svolgere questa operazione nel modo più rapido possibile impartiamo:

sudo apt install curl -y && curl -s https://raw.githubusercontent.com/TurboLabIt/webstackup/master/script/https/letsencrypt-create-hooks.sh?$(date +%s) | sudo bash

Questo comando scrive il file di riavvio di Nginx nel percorso preposto, poi esegue immediatamente un rinnovo puntuale, utile a verificare che non vi siano altri problemi di configurazione

Let's Encrypt Nginx: come rinnovare automaticamente certificato HTTPS riavviare server web dopo rinnovo

Come si vede nell'immagine, lo script emette sempre un messaggio rosso simile al seguente:

Error output from deploy-hook command nginx_restart:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Non si tratta di un errore, ma la conferma che la configurazione del webserver è corretta.

Al termine, assicuriamoci che Nginx sia stato effettivamente riavviato automaticamente impartendo

sudo service nginx status

Fra le varie informazioni è riportato anche l'orario di avvio del processo, che dovrebbe risalire a pochi istanti fa

Let's Encrypt Nginx: come rinnovare automaticamente certificato HTTPS riavviare server web dopo rinnovo

Da qui in avanti possiamo dimenticarci di tutto. Il rinnovo del certificato avverrà periodicamente in automatico, e il server web verrà riavviato subito dopo per utilizzare il nuovo file. Qui su TruboLab.it stiamo utilizzando questa stessa configurazione da oltre un anno, per cui si tratta di una soluzione ben collaudata.