Apache e certificati SSL. un HTTPS gratuito con Let’s Encrypt.
Da sempre i gestori di siti web si scontrano con la dura realtà dei costi, alquanto elevati, necessari per adottare HTTPS (protoccolli SSL e TLS) e proteggere con crittografia le informazioni scambiate tra il webserver e il browser dei visitatori.
Dopo un uso breve, ma efficacie, dei certificati StartSSL ho deciso di proteggere i miei webserver Apache e mailserver Zimbra con certificati Let’s Encript.
1.0 – “Chi è” Let’s Encript?
Let’s Encrypt è una Certificate Authority no profit, che rilascia certificati web gratuiti, riconosciuti automaticamente da gran parte dei browser. Un progetto Open Source con tempi di attivazione brevissimi, di circa 20 – 30 secondi e con aggiornamenti automatici che consentono di evitare di dover rinnovare manualmente il servizio ogni 90 giorni. L’obiettivo dell’azienda è quello di diffondere le connessioni cifrate attraverso i protocolli di sicurezza SSL e TLS, azzerando i costi di acquisto del certificato e semplificando i passaggi per attivare ed effettuare l’upgrade dello stesso.
Di fatto numerosi siti web potranno avere un protocollo HTTPS, sinonimo di autenticazione certificata e protezione privacy, senza dover spendere nulla. In caso di intercettazione del traffico da parte di terzi, un certificato di questo tipo impedisce che vengano letti i dati scambiati tra sito e utente in navigazione.
2.0 – Installiamolo su un webserver ubuntu 14.04.
E’ scontato che pre-requisito fondamentale per installare un certificato Let’s encript è la presenza di un webserver.
Comunemente utilizzo degli apache webserver installati su distribuzioni Ubuntu linux, pertanto questa guida fa proprio riferimento ad una situazione di questo tipo.
Non ci soffermiamo sull’installazione e configurazione di apache, dando questa fase per compiuta. Andiamo subito a vedere come si utilizza let’s encript.
Per prima cosa occorre installare git sul sistema.
sudo apt-get install git
quindi, da utente root, clonare il repository di let’s encrypt
git clone https://github.com/letsencrypt/letsencrypt.git letsencrypt
entriamo, quindi nella directory di letsencrypt
cd letsencrypt
e richiediamo il certificato indicando la webroot del sito
./letsencrypt-auto certonly –webroot -w /home/web/www.sitodiprova.it/public_html -d www.sitodiprova.it
se abbiamo bisogno di un certificato multidominio (ad es. www.sitodiprova.it, mail.sitodiprova.it, cloud.sitodiprova.it) sarà sufficiente aggiungere gli stessi alla richiesta, cosi
./letsencrypt-auto certonly –webroot -w /home/web/www.sitodiprova.it/public_html -d www.sitodiprova.it -d mail.sitodiprova.it -d cloud.sitodiprova.it
let’s encrypt aggiornerà tutte le dipendenze e richiederà il certificato relativo che verrà scaricato in pochissimi secondi sul nostro webserver.
Nota bene: tutta la procedura funziona se il DNS del dominio per il quale si cerca di scaricare il certificato è impostato correttamente.
3.0 – Dove sono i certificati?
Se la procedura descritta precedentemente ha dato i risultati attesi il nostro certificato lo troveremo nella directory
/etc/letsencrypt/live/www.sitodiprova.it/
In realtà troveremo quattro certificati:
- privkey.pem: costituisce la chiave privata del server
- cert.pem: è il certificato vero e proprio che sarà condiviso con il browser dei visitatori
- chain.pem: contiene i certificati delle Certification Authority (CA) che hanno rilasciato il certificato
- fullchain.pem: è la concatenzione di cert.pem + chain.pem
4.0 – Installiamo i certificati sul nostro virtual host.
Dobbiamo ora configurare il nuovo virtual host, ossia un sito gestito con apache. Personalmente, come sistema di webserver, utilizzo la distribuzione LAMPP di ApacheFriends (scaricabile dal sito www.apachefriends.org).
In questo caso apro il file dei Vhosts
sudo nano /opt/lampp/etc/extra/httpd-vhosts.conf
se vogliamo fare in modo che l’utente venga sempre reindirizzato sul sito certificato da let’s encrypt dovremmo inserire il redirect in questo modo
<VirtualHost *:80>
ServerName www.sitodiprova.it
Redirect permanent / https://www.sitodiprova.it
</VirtualHost>
Ora possiamo installare i nostri certificati nel file
sudo nano /opt/lampp/etc/extra/httpd-ssl.conf
e configurare il nostro host nel modo seguente
<VirtualHost *:443>
DocumentRoot “/home/web/www.sitodiprova.it/public_html ”
ServerName www.sitodiprova.it:443
ErrorLog “/opt/lampp/logs/sitodirprova_error_log”
TransferLog “/opt/lampp/logs/sitodiprova_log”SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile “/etc/letsencrypt/live/www.sitodiprova.it/cert.pem”
SSLCertificateKeyFile “/etc/letsencrypt/live/www.sitodiprova.it/privkey.pem”
SSLCertificateChainFile “/etc/letsencrypt/live/www.sitodiprova.it/chain.pem”
CustomLog /opt/lampp/logs/sitodiprova_ssl_request_log “%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”<Directory “/home/web/www.sitodiprova.it/public_html “>
Require all granted
AllowOverride All ### se occorre
</Directory>
</VirtualHost>
Riavviamo a questo punto apache
sudo /opt/lampp/lampp restart
e….voilà ….. il nostro sito ora ha un suo certificato SSL valido.
5 – RINNOVO DEL CERTIFICATO
Il certificato rilasciato da Let’s encrypt scade dopo 90 giorni. il rinnovo è semplice in quanto è disponibile un comando di renew. Al fine di evitare di dimenticarsi potrebbe essere opportuno inserire tale script in un cronjob settimanale così da automatizzare il processo di rinnovo.
Inseriamo quindi da root
crontab -e
e quindi inserire il job che pianifica ogni domenica all’una di notte il controllo della scadenza del certificata. Se mancano meno di 30 giorni alla scadenza lo script aggiornerà il certificato, ricaricherà apache e scrive l’esito in un file di log.
0 1 * * 0 /opt]/letsencrypt/letsencrypt-auto renew && sudo /opt/lampp/lampp reloadapache >> /opt/siti/certlog/certs.log 2>&1