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
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
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
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
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
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
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.