Certificati HTTPS gratuiti con Let’s Encrypt

12 gennaio 2016

Qualsiasi sviluppatore o sistemista che abbia avuto a che fare con la configurazione di un server web HTTPS sa bene quando faticoso possa essere il processo di ottenimento (e mantenimento) dei certificati. Per chi non lo sapesse, un certificato X.509 è un documento elettronico pubblico, rilasciato da un’autorità di certificazione affidabile, utilizzato per garantire la sicurezza delle trasmissioni cifrate tramite il protocollo TLS, alla base proprio di HTTPS. Ottenere un certificato X.509, tuttavia, è un processo generalmente tutt’altro che semplice: in genere, infatti, è richiesto un iter non banale (e diverso per ogni autorità di certificazione), oltre al pagamento di una qualche quota pecuniaria.

Recentemente è stato reso pubblico un servizio che, tuttavia, si contrappone allo scenario fin qui descritto: Let’s Encrypt è, infatti, una autorità di certificazione che si propone di rilasciare certificati gratuitamente, semplificando notevolmente l’intero processo per l’ottenimento dei certificati stessi. Tramite una serie di semplici operazioni, ed utilizzando un client apposito, è infatti possibile abilitare il supporto ad HTTPS su un web server, gestendo facilmente tutto ciò che riguarda l’uso dei certificati.

Di seguito vedremo come utilizzare il client di Let’s Encrypt, che ci consentirà di configurazione ed ottenere automaticamente i certificati. È bene precisare, però, che questo strumento è ancora in beta, quindi è lecito aspettarsi qualche malfunzionamento (almeno per il momento).

Installazione del client di Let’s Encrypt

La prima cosa di cui abbiamo bisogno è installare il client di Let’s Encrypt. Con questo strumento, infatti, l’ottenimento e la gestione dei certificati saranno operazioni riconducibili all’uso di semplici comandi, sfruttando alcuni script basati su Python. Sebbene molte delle operazioni che vedremo possono essere effettuate anche con altri strumenti analoghi, le funzionalità che offre questo client sono particolarmente interessanti, ed il suo utilizzo è quindi consigliato.

Per ottenere il client di Let’s Encrypt, possiamo verificare se sia disponibile una versione pacchettizzata nei repository della nostra distribuzione Linux. In alternativa, possiamo clonare il repository git del progetto, ed utilizzare il comando letsencrypt-auto, come mostrato di seguito:

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help

Il comando letsencrypt-auto accetta gli stessi flag del comando letsencrypt (che avremmo dovuto utilizzare nel caso in cui avessimo installato il software tramite i repository della nostra distribuzione). Con letsencrypt-auto, il tool si occuperà automaticamente di installare tutte le dipendenze richieste, aggiornando opportunamente il codice del client.

Fatto ciò, non resta che capire come utilizzare il client per generare i certificati.

Usare il client

Il client di Let’s Encrypt supporta diversi plugin, ognuno dei quali può essere utilizzato per ottenere e/o installare automaticamente i certificati. Ad esempio, possiamo automatizzare l’ottenimento e la configurazione dei certificati su un server Apache, assumento di utilizzare una distribuzione basata su Debian, sfruttando un unico comando:

./letsencrypt-auto --apache

Come si vede, un solo comando è in grado di riassumere automaticamente un gran numero di operazioni. Tuttavia, utilizzando altre piattaforme, potrebbe non essere disponibile un plugin che automatizza tutto, e dovremo ricorrere al comando certonly, che si limita a generare i certificati.

Se vogliamo ottenere un certificato, possiamo utilizzare il plugin standalone. Per esempio, immaginiamo di volerne ottenere uno per i domini example.com e www.example.com. Dopo avere temporaneamente arrestato l’esecuzione del web server, possiamo procedere come segue:

./letsencrypt-auto certonly --standalone -d example.com -d www.example.com

Come ulteriore esempio, vediamo come utilizzare il plugin webroot, che funziona con qualsiasi web server, specificando semplicemente la directory root come parametro del flag -w:

./letsencrypt-auto certonly --webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/thing -d thing.is -d m.thing.is

In questo modo, otterremo un singolo certificato per i domini example.com, www.example.com, thing.is ed m.thing.is, salvando i file relativi alla prima coppia di domini in /var/www/examples e quelli relativi alla seconda coppia in /var/www/thing.

Rinnovo e revoca dei certificati

Le ultime operazioni da affrontare sono quelle di rinnovo e revoca dei certificati. Anche in questo caso, il client di Let’s Encrypt ci viene in aiuto. Per rinnovare un certificato, infatti, è sufficiente eseguire esattamente lo stesso comando utilizzato in fase di creazione, senza alcuna operazione aggiuntiva (e senza dover pagare alcunché).

Se, invece, vogliamo revocare un certificato, il comando da utilizzare è il seguente:

$ letsencrypt revoke --cert-path certificato.pem

Conclusioni

L’idea che sta alla base di Let’s Encrypt è particolarmente innovativa: oltre ad azzerare i costi per ottenere facilmente un web server sicuro, consente anche di generare i certificati in maniera estremamente semplice e rapida. Non è un caso, quindi, se l’intero progetto è supportato da istituzioni come Linux Foundation, Mozilla, Cisco, e perfino Facebook.

Essendo ancora in fase beta, non ci resta che aspettare di vedere cosa riserverà il futuro per questo progetto, che sembra molto promettente e che potrebbe contribuire a migliorare significativamente la sicurezza delle trasmissioni HTTP, alla base di quasi tutte le applicazioni web moderne.

Links utili

Per maggiori informazioni sull’utilizzo di Let’s Encrypt, segnaliamo le risorse seguenti:

Se vuoi aggiornamenti su Certificati HTTPS gratuiti con Let's Encrypt inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Certificati HTTPS gratuiti con Let's Encrypt

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy