Come gestire SSL di Let's Encrypt con i comandi Certbot
Quando qualcuno visita il tuo sito web, il suo browser e il tuo server scambiano informazioni avanti e indietro. Senza crittografia, questa conversazione avviene in testo semplice, il che significa che chiunque monitori la rete potrebbe leggere tutto: credenziali di accesso, messaggi personali, informazioni di pagamento, tutto.
Un certificato SSL risolve questo problema abilitando HTTPS, che cripta tutti i dati tra il browser e il tuo server. L’icona del piccolo lucchetto nella barra degli indirizzi del tuo browser? Ti indica che la connessione è criptata e sicura.
Per anni, ottenere un certificato SSL significava pagare annualmente un'autorità di certificazione e affrontare un tedioso processo di configurazione manuale. Poi è arrivato Let’s Encrypt e ha cambiato tutto. È un'autorità di certificazione gratuita e automatizzata che esiste per un unico scopo: rendere le connessioni criptate la norma su tutto il web.
Ma ecco il punto: mentre i certificati di Let’s Encrypt sono gratuiti, scadono ogni 90 giorni. Gestire i rinnovi manualmente sarebbe un incubo, ed è proprio per questo che esiste Certbot, uno strumento da riga di comando che automatizza l'intero processo di ottenimento, installazione e rinnovo dei certificati di Let’s Encrypt.
In questa guida, spiegheremo tutto ciò che devi sapere sull'uso di Certbot, dalla prima installazione del certificato alla comprensione dei processi di rinnovo, tutto spiegato in modo chiaro anche se stai appena iniziando con i server Linux.
Installare Certbot su Linux
Il processo di installazione di certbot varia leggermente a seconda della distribuzione Linux, ma è semplice in generale.
Per i sistemi basati su Debian, prima di tutto vuoi assicurarti che il tuo sistema sia aggiornato:
sudo apt update
sudo apt upgrade
Quindi installa Certbot insieme al plugin per il tuo server web, se stai usando nginx.
sudo apt install certbot python3-certbot-nginx
O se stai usando Apache.
sudo apt install certbot python3-certbot-apache
Per le distribuzioni basate su RHEL, il processo è simile ma utilizza dnf invece:
sudo dnf install certbot python3-certbot-nginx # For Nginx
sudo dnf install certbot python3-certbot-apache # For Apache
I plugin del server web sono importanti perché permettono a Certbot di configurare automaticamente il tuo server per HTTPS. Senza di essi, dovresti modificare manualmente i file di configurazione, esattamente il tipo di lavoro noioso che Certbot è progettato per eliminare.
Ottenere il tuo primo certificato SSL
Una volta installato Certbot, ottenere un certificato è straordinariamente semplice.
Per un server Nginx, il comando è il seguente:
sudo certbot --nginx -d example.com -d www.example.com
Se stai usando Apache, il comando è quasi identico:
sudo certbot --apache -d example.com -d www.example.com
Quando esegui il comando sopra per la prima volta, Certbot ti chiederà il tuo indirizzo email, il che è importante sapere che, sebbene Let’s Encrypt inviasse in passato notifiche di scadenza tramite questa email, hanno da allora interrotto tale servizio per ridurre al minimo la conservazione dei dati. Pertanto, devi fare affidamento su un processo di rinnovo automatico affidabile o configurare un proprio monitoraggio di terze parti per gli avvisi di scadenza.
Dopo di ciò, Certbot fa il suo lavoro: comunica con Let’s Encrypt, dimostra che controlli il dominio, ottiene il certificato e modifica la configurazione di Nginx per usare HTTPS.
Comprendere il rinnovo del certificato SSL
Come ho menzionato in precedenza, i certificati Let’s Encrypt scadono ogni 90 giorni, quindi è essenziale configurare un processo di rinnovo automatico. Un timer di systemd può gestire questo controllando due volte al giorno i certificati prossimi alla scadenza. Quando un certificato ha meno di 30 giorni di validità, Certbot lo rinnova automaticamente senza richiedere alcun intervento manuale.
Puoi testare questo processo di rinnovo senza rinnovare effettivamente nulla:
sudo certbot renew --dry-run
Il flag --dry-run simula il processo di rinnovo, il che è utile per assicurarsi che tutto sia configurato correttamente. Se il comando ha successo, puoi essere sicuro che i rinnovi automatici funzioneranno quando arriverà il momento.
Per vedere quando scadono i tuoi certificati e controllare lo stato del loro rinnovo:
sudo certbot certificates
Puoi controllare lo stato del timer per confermare che sia attivo:
sudo systemctl status certbot.timer
Gestione di più certificati SSL
Man mano che aggiungi altri domini o sottodomini al tuo server, accumulerai più certificati, ma certbot rende tutto sorprendentemente gestibile.
Per aggiungere un nuovo dominio a un certificato esistente:
sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com
Se vuoi ottenere un certificato completamente separato per un dominio diverso:
sudo certbot --nginx -d another-domain.com -d www.another-domain.com
Ogni certificato è gestito in modo indipendente, ma tutti i rinnovi avvengono automaticamente attraverso lo stesso processo di rinnovo.
Rinnovo manuale dei certificati SSL
Sebbene il rinnovo automatico sia il punto principale dell'utilizzo di Certbot, ci sono momenti in cui potresti voler forzare manualmente un rinnovo. Forse hai apportato modifiche alla configurazione e vuoi testarle, o forse stai risolvendo un problema.
Per rinnovare tutti i certificati in scadenza, eseguire il comando seguente, che rinnoverà solo i certificati entro 30 giorni dalla scadenza e i certificati con più di 30 giorni rimanenti non verranno rinnovati.
sudo certbot renew
Se hai bisogno di forzare il rinnovo indipendentemente dalla data di scadenza:
sudo certbot renew --force-renewal
Visualizzazione dei tuoi certificati SSL
A volte è necessario vedere i dettagli dei certificati che hai installato, ad esempio il nome di ciascun certificato, i domini che copre, la sua data di scadenza e i percorsi dei file in cui sono memorizzati il certificato e la chiave privata.
sudo certbot certificates
I file effettivi del certificato si trovano in /etc/letsencrypt/live/, con directory separate per ogni certificato. All'interno troverai collegamenti simbolici ai certificati reali, che sono versionati nella directory dell'archivio.
Revoca dei certificati SSL
Se la chiave privata di un certificato viene mai compromessa oppure se non hai più bisogno di un certificato, dovresti revocarlo, e questo comunica immediatamente ai browser e agli altri client che il certificato non dovrebbe più essere considerato attendibile, anche se non è ancora scaduto.
Per revocare un certificato:
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem
Dovrai specificare il percorso del file del certificato che desideri revocare.
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem --delete-after-revoke
Certbot comunicherà con Let’s Encrypt per revocare il certificato e, facoltativamente, per pulire i file locali.
Eliminare i certificati SSL senza revocarli
A volte si desidera rimuovere un certificato dal proprio sistema senza revocarlo. Forse hai spostato un dominio su un altro server, oppure hai ottenuto un certificato per errore e non lo hai mai utilizzato.
sudo certbot delete --cert-name example.com
Questo rimuove i file del certificato dal tuo sistema ma non revoca il certificato con Let’s Encrypt. Il certificato rimane valido se viene utilizzato altrove, ma Certbot smetterà di gestirlo su questo server.
Risoluzione dei problemi di rinnovo del certificato Certbot
Anche con l'automazione di Certbot, potresti occasionalmente incontrare dei problemi, ecco i più comuni e come risolverli.
Se il rinnovo del certificato fallisce, controlla che il tuo server web sia in esecuzione e accessibile da Internet, perché Let’s Encrypt deve poter raggiungere il tuo server sulla porta 80 o 443 per verificare la proprietà del dominio.
Puoi controllare i registri di rinnovo per messaggi di errore specifici:
sudo cat /var/log/letsencrypt/letsencrypt.log
Questi log mostrano esattamente cosa ha tentato di fare Certbot e dove ha fallito, il che di solito ti indica direttamente il problema.
Se la configurazione del tuo server web dovesse danneggiarsi in qualche modo, Certbot può talvolta ripristinare la configurazione originale:
sudo certbot --nginx rollback
Questo annulla le modifiche effettuate da Certbot, anche se raramente è necessario se si utilizzano le opzioni di configurazione automatica.
Comprendere i limiti di velocità
Let’s Encrypt ha dei limiti di frequenza per prevenire abusi. Per un utilizzo normale, non li raggiungerai mai, ma è utile sapere che esistono. Puoi richiedere fino a 50 certificati per dominio registrato a settimana, e ciascun certificato può coprire fino a 100 sottodomini.
Se stai testando o imparando, usa liberamente il flag --dry-run, che simula l'intero processo senza richiedere effettivamente certificati, quindi non influisce sui limiti di frequenza.
sudo certbot renew --dry-run
Mantenere Certbot aggiornato
Come qualsiasi software, Certbot riceve aggiornamenti che correggono bug e aggiungono funzionalità, quindi è importante mantenere aggiornato il tuo certbot tramite il tuo normale gestore di pacchetti:
sudo apt update
sudo apt upgrade certbot
Andare oltre l'uso di base
Una volta che sei a tuo agio con la gestione di base dei certificati, Certbot offre opzioni avanzate che vale la pena esplorare. Puoi utilizzare la convalida DNS invece della convalida HTTP, il che ti permette di ottenere certificati anche per server non accessibili pubblicamente sulla porta 80 o 443.
Puoi configurare hook di rinnovo personalizzati per eseguire script quando i certificati vengono rinnovati, utile per riavviare servizi o aggiornare configurazioni. Puoi anche ottenere certificati wildcard che coprono tutti i sottodomini contemporaneamente.
Ma per la maggior parte dei casi d'uso, i comandi semplici che abbiamo trattato gestiscono tutto ciò di cui hai bisogno. Certbot prende quello che un tempo era un processo complesso e soggetto a errori e lo riduce a pochi comandi semplici che funzionano senza problemi.