Certificato SSL gratuito con Let's Encrypt e Certbot

Pubblicato il Aggiornato il 5 min di lettura

Certificato SSL gratuito per il tuo server Linux: come installare Certbot su Debian e Ubuntu, rilasciare un certificato Let's Encrypt per Apache e farlo rinnovare in automatico.

Un certificato SSL di Let's Encrypt non costa nulla, si configura in pochi minuti ed è accettato da tutti i browser più diffusi. In questa guida attivi HTTPS su un tuo server Linux con Apache: su Debian 13, Debian 12, Ubuntu 24.04 LTS e Ubuntu 22.04 LTS.

Il rilascio del certificato è affidato a Certbot, il client ACME ufficiale della Electronic Frontier Foundation. Certbot richiede il certificato, lo inserisce nella configurazione di Apache e poi lo rinnova da solo tramite un timer systemd.

Prerequisiti

  • Un dominio il cui record A (e con IPv6 anche il record AAAA) punta al tuo VPS o al tuo server root.
  • Un server web Apache2 in esecuzione, con un VirtualHost per questo dominio.
  • Accesso root via SSH.
  • La porta 80 e la porta 443 devono essere raggiungibili dall'esterno. Let's Encrypt verifica il dominio attraverso la porta 80.

Controlla prima di tutto che il dominio punti davvero al tuo server. Inserisci il tuo dominio su https://check-host.net/. Se compare l'indirizzo IP del tuo server, puoi proseguire. Se il DNS punta ancora a una destinazione vecchia, aspetta che l'aggiornamento si propaghi, altrimenti il rilascio fallisce.

Aggiornare il sistema

Porta prima di tutto l'elenco dei pacchetti e i pacchetti installati all'ultima versione disponibile:

apt update && apt upgrade -y

Installare Certbot

Le strade abituali sono due. Il pacchetto della distribuzione è la più semplice ed è più che sufficiente per la maggior parte dei server. Il pacchetto Snap fornisce sempre la versione più recente di Certbot ed è quello consigliato ufficialmente dalla Electronic Frontier Foundation.

Variante 1: Certbot dal repository della distribuzione

Su Debian e Ubuntu, Certbot e il plugin per Apache si trovano direttamente nelle sorgenti dei pacchetti:

apt install certbot python3-certbot-apache -y

Il pacchetto "python-certbot-apache", un tempo molto diffuso, apparteneva a Python 2 e non esiste più. Su tutte le versioni attuali di Debian e Ubuntu il nome di pacchetto corretto è "python3-certbot-apache".

Variante 2: installare Certbot tramite snap

Se vuoi avere sempre la versione più recente di Certbot, per esempio per i plugin DNS o per i certificati wildcard, installa Certbot come Snap. Rimuovi prima un'eventuale installazione da pacchetto, così le due non entrano in conflitto:

apt remove certbot -y
snap install core
snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

Rilasciare il certificato e integrarlo in Apache

La strada più rapida è il plugin per Apache. Certbot legge i VirtualHost esistenti, richiede il certificato e scrive da solo la configurazione SSL adatta:

certbot --apache -d IlMioDominio.it -d www.IlMioDominio.it

Se preferisci mantenere il controllo sulla configurazione di Apache, puoi far passare la verifica del dominio dalla directory webroot. In questo caso indica esattamente la directory che il VirtualHost usa come DocumentRoot:

certbot --authenticator webroot --installer apache -w /var/www/IlMioDominio.it -d IlMioDominio.it -d www.IlMioDominio.it

Se il tuo sito si trova nella directory predefinita, il comando è questo:

certbot --authenticator webroot --installer apache -w /var/www/html/ -d IlMioDominio.it -d www.IlMioDominio.it

Le domande di Certbot

Al primo avvio Certbot pone alcune domande:

  • Indirizzo e-mail: indica un indirizzo che leggi davvero. È lì che Let's Encrypt manda l'avviso quando un rinnovo non va a buon fine.
  • Condizioni di utilizzo: con "A" le accetti.
  • Newsletter della Electronic Frontier Foundation: "Y" per sì, "N" per no. È facoltativa e non ha alcun effetto sul certificato.
  • Reindirizzamento su HTTPS: scegli l'opzione "Redirect", così Apache inoltra automaticamente tutte le chiamate HTTP su HTTPS.

Subito dopo Certbot mostra il percorso del certificato. I file si trovano in /etc/letsencrypt/live/IlMioDominio.it/. Non modificare questi file a mano, vengono riscritti a ogni rinnovo.

Verificare il rinnovo automatico

Un certificato di Let's Encrypt è valido 90 giorni. Certbot lo rinnova automaticamente non appena restano meno di 30 giorni di validità. Per questo il pacchetto porta con sé un timer systemd. Verifica che sia attivo:

systemctl list-timers certbot.timer

Se il timer non è attivo, abilitalo:

systemctl enable --now certbot.timer

Poi prova la procedura a vuoto. In questo modo non viene rilasciato nulla, Certbot si limita a simulare il rinnovo:

certbot renew --dry-run

Perché Apache usi davvero il nuovo certificato dopo un rinnovo, imposta una volta sola un deploy-hook:

certbot renew --deploy-hook "systemctl reload apache2"

Visualizzare e rimuovere i certificati

Una panoramica di tutti i certificati gestiti sul server si ottiene così:

certbot certificates

Un certificato che non ti serve più lo rimuovi in questo modo, così Certbot non prova più a rinnovarlo:

certbot delete --cert-name IlMioDominio.it

Errori frequenti

  • "Could not bind to port 80": un altro servizio occupa la porta 80. Fermalo oppure usa il metodo webroot, che sfrutta l'Apache già in esecuzione.
  • "Invalid response from http://.../.well-known/acme-challenge/...": il dominio non punta a questo server, un firewall blocca la porta 80, oppure la directory webroot indicata non corrisponde al VirtualHost.
  • "The requested apache plugin does not appear to be installed": manca il pacchetto "python3-certbot-apache".
  • "too many certificates already issued": hai raggiunto un limite di Let's Encrypt. D'ora in poi prova le configurazioni con --dry-run prima di richiedere un certificato vero.
  • Il browser mostra ancora un avviso: svuota la cache del browser e controlla che Apache sia stato ricaricato dopo il rilascio.

Reindirizzare HTTP su HTTPS in modo permanente

Se durante le domande di Certbot non hai attivato il reindirizzamento, puoi aggiungerlo in qualsiasi momento. Come farlo tramite un file .htaccess lo spieghiamo in un articolo dedicato al reindirizzamento da HTTP a HTTPS.

Domande frequenti

Quanto costa un certificato SSL di Let's Encrypt?
Nulla. Let's Encrypt è un'autorità di certificazione senza scopo di lucro e rilascia i certificati gratuitamente. Non ci sono costi una tantum né costi ricorrenti.
Quanto dura un certificato Let's Encrypt?
90 giorni. Certbot lo rinnova automaticamente non appena restano meno di 30 giorni di validità. Il timer systemd che se ne occupa viene configurato durante l'installazione.
Devo rinnovare il certificato a mano?
No. Verifica una volta sola con certbot renew --dry-run che il rinnovo si concluda senza errori. Da lì in poi ci pensa Certbot da solo, in background.
Let's Encrypt funziona anche per i sottodomini?
Sì. Gli altri nomi li aggiungi semplicemente al comando con ulteriori parametri di tipo -d. Un certificato wildcard richiede in più una verifica tramite record DNS e quindi un plugin DNS adatto per Certbot.
Perché la verifica del dominio fallisce?
Quasi sempre il record A del dominio non punta a questo server, oppure un firewall blocca la porta 80. Let's Encrypt non raggiunge il server e interrompe il rilascio.

Lets-Encrypt Certbot Certificato SSL HTTPS Apache Debian Ubuntu