Certificati HTTPS gratuiti con Let’s Encrypt

Condividi:

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

# 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

# apt update
# apt upgrade

Installiamo il bot

# 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
# certbot --apache

Se invece vogliamo generare il solo certificato che installeremo poi manualmente, eseguiamo certbot con l’opzione certonly

# certbot --apache certonly

Possiamo specificare il dominio, host.dominio o dominio e host.dominio per cui generare il certificato con l’opzione -d

# 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

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
# certbot certificates
Rinnovo manuale

Il rinnovo manuale del certificato può essere fatto tramite il comando renew

certbot renew --force-renew

E’ anche possibile fare un semplice test di rinnovo senza che vengano apportate modifiche

certbot renew --dry-run
Revoca di un certificato

La revoca può essere fatta tramite il percorso del certificato

# certbot revoke --cert-path percorso_certificato

Oppure tramite il nome

# certbot revoke --cert-name nome_certificato
Cancellazione di un certificato

Senza ulteriori flag, verrà chiesto quale certificato debba essere cancellato

# certbot delete

In alternativa possiamo specificare il nome del certificato da eliminare

# 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

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.

Let’s Encrypt Donate