Home » Blog » Guide tecniche » Come creare certificati Let’s Encrypt
Let’s Encrypt è una certification authority famosa per la fornitura di certificati SSL gratuiti e validi.
In questa guida vedremo come creare certificati Let’s Encrypt su Ubuntu, sia per singolo dominio che in wildcard. Inoltre vedremo come gestire la rognosa parte dei rinnovi dietro Cloudflare.
Indice dei Contenuti
Come prima cosa occorre installare Certbot, uno script Python per l’automazione dei processi di creazione, validazione e rinnovo dei certificati Let’s Encrypt.
Prima però è consigliato procedere ad aggiornare i repository e ad installare l’interprete Python con i seguenti comandi:
sudo apt-get update sudo apt-get install python-minimal
Controllare che la versione di Python installata sia quanto meno la 2.7:
python --version
A questo punto installare git che utilizzeremo per prelevare la versione più recente di Certbot:
sudo apt-get install git-core git --version
Una volta installato ed appurato il funzionamento di git, accedere alla directory /opt
e scaricare Certbot al suo interno:
cd /opt sudo git clone https://github.com/certbot/certbot.git cd certbot
A questo punto non rimane che creare il primo certificato SSL. Per farlo basta lanciare il seguente comando all’interno della directory /opt/certbot
avendo l’accortezza di sostituire l’indirizzo email e il dominio con quello oggetto del certificato:
sudo ./certbot-auto certonly --manual --preferred-challenges=dns --email [email protected] --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d miodominio.it
Di seguito la risposta di Certbot:
Requesting to rerun ./certbot-auto with root privileges... Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator manual, Installer None Obtaining a new certificate Performing the following challenges: dns-01 challenge for miodominio.it - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NOTE: The IP of this machine will be publicly logged as having requested this certificate. If you're running certbot in manual mode on a machine that is not your server, please ensure you're okay with that. Are you OK with your IP being logged? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please deploy a DNS TXT record under the name _acme-challenge.miodominio.it with the following value: 8kG1HBNFP8BGeD6QWi9Y3MU2PgjNY9UY9YIIvKBqW8M Before continuing, verify the record is deployed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press Enter to Continue
A questo punto Certbot ti chiede di creare sul file di zona di miodominio.it
un record DNS di tipo TXT dal nome _acme-challenge
e dal valore 8kG1HBNFP8BGeD6QWi9Y3MU2PgjNY9UY9YIIvKBqW8M
A questo punto Certbot chiede che per il dominio in oggetto venga creato un record DNS di tipo TXT per verificare che i creatori del certificato siano anche i gestori del dominio.
Una volta creato il DNS assicurarsi che si sia propagato sul web prima di cliccare Invio. Per verificare la propagazione del DNS è possibile utilizzare il comando dig
come segue:
dig _acme-challenge.miodominio.it TXT
In caso di risposta come la seguente, il DNS può definirsi propagato:
;; ANSWER SECTION: _acme-challenge.miodominio.it. 300 IN TXT "8kG1HBNFP8BGeD6QWi9Y3MU2PgjNY9UY9YIIvKBqW8M"
A questo punto non rimane che cliccare Invio per proseguire con Certbot:
Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/miodominio.it/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/miodominio.it/privkey.pem Your cert will expire on 2019-06-04. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Il certificato è stato creato con successo:
Un certificato wildcard consente di rendere sicura non solo la comunicazione del dominio principale ma anche di tutti i suoi sottodomini. Vediamo dunque come creare un certificato SSL wildcard con Let’s Encrypt.
La procedura è sostanzialmente identica a quella già vista con la differenza che il dominio deve essere preceduto dal carattere asterisco come segue:
sudo ./certbot-auto certonly --manual --preferred-challenges=dns --email [email protected] --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d *.miodominio.it
Per il resto la procedura è identica.
I certificati SSL non sono validi per sempre, bensì hanno una durata di circa 90 giorni. Quando un certificato è prossimo alla scadenza, Let’s Encrypt invierà una email notifica all’indirizzo email specificato in fase di creazione del certificato.
Per rinnovare il certificato basta eseguire la stessa e identica procedura utilizzata per crearlo. Il nuovo certificato andrà a sostituire automaticamente il vecchio.
Se i domini sono ospitati su Cloudflare, è possibile automatizzare la validazione via DNS utilizzando il modulo certbot-dns-cloudflare. Per installare il modulo lanciare i seguenti comandi:
apt-get install python-pip pip install certbot-dns-cloudflare
Fatto questo creare in una location sicura un file dal nome cloudflare.ini
il cui contenuto deve essere il seguente
# Cloudflare API credentials used by Certbot dns_cloudflare_email = email account Cloudflare qui dns_cloudflare_api_key = Global API Key Cloudflare qui
Fatto questo non resta che creare/aggiornare un certificato Let’s Encrypt con il seguente comando:
certbot certonly --dns-cloudflare --dns-cloudflare-credentials cloudflare.ini --email [email protected] --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d *.miodominio.com
Anche qui la procedura è semplicissima. Basta modificare il file /etc/postfix/main.cf
e modificare/inserire le seguenti direttive:
smtpd_tls_key_file = /etc/letsencrypt/live/miodominio.it/privkey.pem smtpd_tls_cert_file = /etc/letsencrypt/live/miodominio.it/fullchain.pem smtpd_tls_CAfile = /etc/letsencrypt/live/miodominio.it/chain.pem
Riavviare Postfix:
service postfix restart
La stessa procedura vista per Postfix si ripete per Dovecot. Basta infatti modificare il file /etc/dovecot/dovecot.conf
e modificare/inserire le seguenti direttive:
ssl_ca = </etc/letsencrypt/live/miodominio.it/chain.pem ssl_cert = </etc/letsencrypt/live/miodominio.it/fullchain.pem ssl_key = </etc/letsencrypt/live/miodominio.it/privkey.pem
Riavviare Dovecot:
service dovecot restart
Aprire il file di configurazione del dominio configurato su Nginx, ad esempio /etc/nginx/site-enabled/miodominio.it
ed aggiungere/modificare le seguenti direttive:
server { listen 443 ssl; server_name www.miodominio.it miodominio.it; ssl_certificate /etc/letsencrypt/live/miodominio.it/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/miodominio.it/privkey.pem; ...
Salvare e ricaricare le configurazioni:
sudo service nginx reload
Anche su Apache, come Nginx, modificare il file del virtual host, ad esempio /etc/apache2/site-enabled/miodominio.it.conf
ed aggiungere/modificare le seguenti direttive:
<VirtualHost *:443> ServerName miodominio.it ServerAlias www.miodominio.it SSLEngine on SSLCertificateFile /etc/letsencrypt/live/miodominio.it/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/miodominio.it/privkey.pem ...
Salvare e ricaricare le configurazioni:
sudo service apache2 reload