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 ricaricare la configurazione del server web, di modo che il certificato aggiornato venga effettivamente utilizzato. In questa guida vedremo come configurare tutto al meglio affinché il certificato HTTPS di Let's Encrypt si rinnovi automaticamente, per poi ricaricare la configurazione di Nginx o Apache HTTP Server
Questo articolo è incentrato sulla procedura per rinnovare i certificati di Let's Encrypt e utilizzarli subito nel server web, automaticamente. 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 manualmente impartendo sudo certbot renew
Il pacchetto di installazione per le principali distribuzioni Linux (fra le quali Ubuntu) crea però anche un timer che lo fa automaticamente. Per assicurarsi che detto timer sia attivo, basta impartire
systemctl list-timers --all | grep certbot
Se il risultato ha un aspetto simile al seguente, il timer è installato correttamente
Si noti, in particolare, l'indicazione dell'orario: mostra il momento in cui verrà nuovamente eseguita la procedura, e quanto tempo manca.
Ricaricare automaticamente il certificato dopo il rinnovo
Di default, però, la procedura di rinnovo di certbot NON ricarica la configurazione di NGINX o Apache HTTP Server, con il risultato che il server web continua ad utilizzare il vecchio certificato anche dopo la scadenza, nonostante quello nuovo sia già pronto e disponibile
Per evitare che questo avvenga, possiamo utilizzare il sistema di hook offerto da certbot e ricaricare la configurazione del server web dopo il rinnovo, di modo che il servizio legga il nuovo file con il certificato aggiornato.
Per raggiungere il risultato è sufficiente preparare uno script con i comandi e spostarlo nel percorso preposto: /etc/letsencrypt/renewal-hooks/deploy/
.
Per svolgere questa operazione nel modo più rapido possibile, lancia il comando seguente:
sudo apt update && sudo apt install curl -y && curl -s https://raw.githubusercontent.com/TurboLabIt/webstackup/master/script/https/letsencrypt-create-hooks.sh | sudo bash
Questo esegue una procedura (visualizzabile qui) che predispone innanzitutto uno script (visualizzabile qui) nel percorso /etc/letsencrypt/renewal-hooks/deploy/
. Detto script si occupa di ricaricare la configurazione del server web in seguito al rinnovo del certificato.
Subito dopo, la procedura esegue immediatamente un rinnovo puntuale dei certificati presenti sul sistema, di modo da evidenziare immediatamente eventuali problemi e consentire all'amministratore di correggerli
Come si vede nello screenshot (in basso), lo script potrebbe emettere un messaggio rosso simile al seguente:
Hook 'deploy-hook' ran with error output:
Il fatto che il messaggio sia rosso e parli di "error" è fuorviante. Quelli sono infatti TUTTI i messaggi della procedura che ricarica il server web, che potrebbero essere semplici note informative (come in questo caso) oppure potrebbero essere realmente errori. È dunque necessario ispezionarli puntualmente e verificare che tutto sia in ordine.
Conclusioni
Da qui in avanti, il rinnovo del certificato HTTPS avverrà automaticamente, e la configurazione del server web verrà ricaricata subito dopo per utilizzare il nuovo file.
Qui su TruboLab.it stiamo utilizzando questa stessa configurazione da oltre 5 anni, per cui si tratta di una soluzione ben collaudata.
È comunque una buona idea attivare un servizio di monitoraggio che possa inviare una notifica in caso il certificato fosse prossimo alla scadenza. Io ora utilizzo Red Sift Certificates Lite (gratuito), ma la stessa funzionalità è integrata anche nel piano a pagamento di UptimeRobot, e nel suo clone gratuito e self-hosted, Uptime Kuma.