Vai al contenuto

Certbot con nginx e Apache

Il client ACME più diffuso su Linux: installazione, primo certificato e rinnovo automatico.

In arrivo. Il servizio ACME di SSLCenter non è ancora disponibile: questa guida anticipa come funzionerà. L'indirizzo del server ACME e le credenziali arriveranno con l'attivazione.

Certbot è il client ACME più usato su Linux. Ottiene il certificato, configura nginx o Apache e lo rinnova da solo.

Cosa serve

  • Un server Linux con nginx o Apache, e accesso come root (o sudo).
  • Le credenziali del servizio: l'indirizzo del server ACME e la coppia di chiavi EAB (un identificativo e una chiave).
  • Le verifiche completate: quella dell'organizzazione, per i certificati OV ed EV, e quella dei domini, nei modi che ti indichiamo all'attivazione (perché). Prima, Certbot riceve solo errori: non è un problema, ma conviene configurarlo a verifiche concluse.

Negli esempi <server ACME>, <identificativo> e <chiave> stanno per i valori delle tue credenziali.

1. Installa Certbot

Su Debian e Ubuntu, con il plugin per il tuo server web:

sudo apt install certbot python3-certbot-nginx     # per nginx
sudo apt install certbot python3-certbot-apache    # per Apache

Su Red Hat, AlmaLinux e Rocky Linux, dal repository EPEL:

sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx     # o python3-certbot-apache

2. Imposta il server ACME

Certbot usa Let's Encrypt, se non gli si dice altro. Per non doverlo ripetere a ogni comando, indica il nostro server in /etc/letsencrypt/cli.ini:

server = <server ACME>

3. Registra l'account

Una volta sola, con le credenziali EAB e un indirizzo email per gli avvisi:

sudo certbot register --agree-tos -m tu@tuodominio.it \
  --eab-kid <identificativo> --eab-hmac-key <chiave>

Dopo la registrazione la chiave EAB non serve più a Certbot: conservala comunque in un posto sicuro, o chiedici di sostituirla se pensi sia stata esposta.

4. Ottieni e installa il certificato

Con nginx:

sudo certbot --nginx -d tuodominio.it -d www.tuodominio.it

Con Apache, --apache al posto di --nginx. Certbot chiede il certificato, trova il sito con quei nomi nella configurazione, aggiunge le direttive TLS e ricarica il server. Indica con -d solo domini compresi nel servizio: per gli altri la richiesta viene rifiutata.

Il certificato con la catena degli intermedi e la chiave privata restano in /etc/letsencrypt/live/tuodominio.it/ (fullchain.pem e privkey.pem).

Se preferisci configurare il server da te

Con certonly Certbot ottiene il certificato senza toccare la configurazione:

sudo certbot certonly --webroot -w /var/www/html \
  -d tuodominio.it -d www.tuodominio.it \
  --deploy-hook "systemctl reload nginx"

Nella configurazione del sito indica i file di /etc/letsencrypt/live/tuodominio.it/ (esempi per nginx e Apache). Il --deploy-hook ricarica il server a ogni rinnovo: senza, il nuovo certificato resta su disco e il sito continua a servire il vecchio.

5. Il rinnovo

Il pacchetto installa un timer di sistema che controlla i certificati due volte al giorno e li rinnova con anticipo, ricaricando il server. Per verificare che sia attivo e vedere le scadenze:

systemctl list-timers | grep certbot
sudo certbot certificates

La verifica dei domini

Quando Certbot chiede un certificato, la Certification Authority controlla se ogni dominio ha già una verifica valida (come funziona). Se non ce l'ha, propone una prova automatica:

  • HTTP-01: Certbot la completa da solo, tramite nginx, Apache o la cartella indicata con --webroot, se il sito è raggiungibile da Internet sulla porta 80. Per un sito pubblico, con la configurazione di questa guida, non serve altro.
  • DNS-01: serve un plugin per il provider DNS, vedi sotto.

Se nessuna prova riesce, la richiesta fallisce e Certbot riprova nei giorni seguenti: il certificato in uso resta valido fino alla sua scadenza. Come si verificheranno i domini con il nostro servizio, e se una verifica fatta prima potrà evitare le prove, lo confermeremo all'avvio.

Per i wildcard e i server interni: DNS-01

HTTP-01 non vale per i wildcard né per server non raggiungibili da Internet. Per questi casi Certbot ha plugin per i provider DNS più diffusi, che creano da soli il record di verifica. Con Cloudflare, ad esempio:

sudo apt install python3-certbot-dns-cloudflare
sudo certbot certonly --dns-cloudflare \
  --dns-cloudflare-credentials /root/.secrets/cloudflare.ini \
  -d tuodominio.it -d '*.tuodominio.it' \
  --deploy-hook "systemctl reload nginx"

Il file delle credenziali contiene la chiave API del provider: rendilo leggibile solo da root (chmod 600). Se il tuo provider DNS non ha un plugin, valuta la delega con CNAME.

Se qualcosa non va

MessaggioCosa significa
externalAccountRequiredManca la registrazione con le credenziali EAB (passo 3), o il server ACME non è quello giusto (passo 2)
unauthorized per un dominioIl dominio non ha una verifica valida e la prova HTTP-01 non è riuscita: controlla porta 80 e DNS
Richiesta rifiutata per l'organizzazioneLa verifica dell'organizzazione (OV, EV) non è completa o è scaduta
rejectedIdentifierIl dominio non è compreso nel servizio
Il sito mostra il certificato vecchioIl server non è stato ricaricato: con certonly, aggiungi un --deploy-hook

Il log completo è in /var/log/letsencrypt/letsencrypt.log. Per tenere d'occhio i rinnovi: monitorare i rinnovi automatici.

Non sai quale certificato scegliere?

Raccontaci cosa devi proteggere, ti consigliamo il certificato giusto e ti prepariamo un preventivo.