Questo tutorial mostra come installare certificati https gratuiti per i propri domini web. E’ rivolto ai webmaster che hanno accesso alla console linux del proprio server con diritti amministrativi. I comandi elencati si riferiscono ad una distribuzione debian like, quindi debian, ubuntu ecc… anche se con distribuzioni diverse le cose sono praticamente identiche. Il server web è apache2
Perché migrare il proprio sito ad HTTPS
Con l’entrata in vigore del GDPR il 24 maggio 2018, migrare il proprio dominio al protocollo https è diventato imperativo per ottemperare alla direttiva europea per la sicurezza dei dati, inoltre dal 1 gennaio 2017 google considera come non sicuri tutti i siti che non supportano questo protocollo attribuendo delle penalità al ranking delle pagine web.
Cos’è Let’s Encrypt
Let’s encrypt, è una certification authority no profit nata nel 2012 con lo scopo di cifrare le comunicazioni sul web in maniera gratuita, automatizzando il processo di installazione, manutenzione e rinnovo dei certificati X.509 per il protocollo TLS
I certificati https generati hanno una validità di 90 giorni, ma vengono automaticamente rinnovati dal bot installato sul server
Certbot
Con certbot automatizzeremo tutto il processo di generazione, installazione e aggiornamento del certificato.
Per installare il bot, attiviamo per prima cosa il repository stretch-backports su apt
1 2 3 |
# cat > /etc/apt/sources.list.d/stretch-backports.list <<! deb http://ftp.debian.org/debian stretch-backports main ! |
Ora possiamo aggiornare l’elenco dei pacchetti ed eventualmente il sistema
1 2 |
# apt update # apt upgrade |
Installiamo il bot
1 |
# apt install -y certbot python-certbot-apache -t stretch-backports |
Installiamo il certificato per un dominio
Con questa procedura possiamo generare certificati per uno o più host dello stesso dominio del tipo miodominio.me, www.miodomonio.me, api.miodominio.me ecc…
Il bot deve essere eseguito con utente root sul server dove è in esecuzione il server apache e il sito deve essere online.
Una volta eseguito, certbot eseguirà queste operazioni
- Richiederà una serie di comande per identificare il proprietario ed il sito web
- Si collegherà a let’s encrypt
- Installerà i certificati .pem in /etc/letsencrypt/live/
- Installerà la versione HTTPS del sito creando un nuovo virtal host
- Modificherà il virtual host del sito per fare il redirect automatico alla versione https
- Ricaricherà apache con la nuova configurazione
1 |
# certbot --apache |
Se invece vogliamo generare il solo certificato che installeremo poi manualmente, eseguiamo certbot con l’opzione certonly
1 |
# certbot --apache certonly |
Possiamo specificare il dominio, host.dominio o dominio e host.dominio per cui generare il certificato con l’opzione -d
1 2 3 |
# certbot --apache certonly -d miodominio.me # certbot --apache certonly -d www.miodominio.me # certbot --apache certonly -d miodominio.me, www.miodominio.me |
Certificato per dominio con wildcards
E’ possibile generare certificati per domini con wildcard del tipo *.miodominio.me con cui convalidare tutti gli host di miodominio.me
Per farlo però dobbiamo usare un dns-plugin di certbot, la procedura per l’installazione di questo plugin è descritta nell’articolo Certbot dns plugin rfc2136
Dopo aver configurato il plugin e bind come descritto, è possibile generare anche questo tipo di certificati come un comando come questo
1 |
certbot certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/backend.ini -d miodominio.me,*.miodominio.me |
Tramite certonly il certificato viene generato, ma non installato in apache quindi lo dovremo fare manualmente. Viene detto a cert bot di utilizzare il plugin –dns-rfc2136 a cui viene passato un file contenente le credenziali da utilizzzare per fare l’update della zona su bind con –dns-rfc2136-credentials. Con -d viene specificato per quali host e domini creare il certificato, in questo caso ne creiamo uno per miodominio.me e tutti i domini di terzo livello
*.miodominio.me non è valido per miodominio.me quindi lo dobbiamo esplicitare per includerlo nello stesso certificato.
*.miodominio.me è valido per domini come www.miodominio.me, api.miodominio.me, mail.miodominio.me ecc…
E’ possibile usare ad esempio www*.miodominio.me per www1.miodominio.me, www2.miodominio.me ecc… nel qual caso non sarebbe più valido per api.miodominio.me, mail.miodominio.me ecc…
E’ comunque possibile inserire nella stessa opzione -d più domini con wildcard
La wildcard è valida solo per il livello di dominio in cui è inserita, tranne per domini di primo livello perchè il certificato sarebbe troppo generico, quindi *.miodominio.me non vale per m.www.miodominio.me
Amministrazione dei certificati
Elenco dei certificati installati
1 |
# certbot certificates |
Rinnovo manuale
Il rinnovo manuale del certificato può essere fatto tramite il comando renew
1 |
certbot renew --force-renew |
E’ anche possibile fare un semplice test di rinnovo senza che vengano apportate modifiche
1 |
certbot renew --dry-run |
Revoca di un certificato
La revoca può essere fatta tramite il percorso del certificato
1 |
# certbot revoke --cert-path percorso_certificato |
Oppure tramite il nome
1 |
# certbot revoke --cert-name nome_certificato |
Cancellazione di un certificato
Senza ulteriori flag, verrà chiesto quale certificato debba essere cancellato
1 |
# certbot delete |
In alternativa possiamo specificare il nome del certificato da eliminare
1 |
# certbot delete --cert-name nome_certificato |
Estensione di un certificato
Nel caso avessimo generato un certificato per miodominio.me e lo volessimo estendere anche a www.miodominio.me ( o viceversa ) usiamo l’opzione –expand
1 |
certbot certonly --expand miodominio.me,www.miodominio.me |
In questo modo il bot cercherà tra quelli installati il certificato da estendere, ne genererà uno nuovo e lo installerà al posto di quello vecchio che rimane comunque salvato in /etc/letsencrypt/archive/
Donazioni
Let’s encrypt è una CA no profit, ma questo non significa che non abbia costi di gestione. Chi gestisce molti domini, faccia due conti di quanti soldi riesce a risparmiare grazie a questo servizio e si metta una mano sul cuore.