Questo articolo spiega come configurare Ubuntu Server per l'utilizzo di Certificati SSL gratuiti e perfettamente funzionante. Personalmente ho trovato difficoltà con la procedura ufficiale di let's encrypt per la generazione dei certificati, quindi girovagando per la rete ho trovato questo articolo che risolve il problema dei certificati su server virtual host. La prima procedura, infatti, genera certificati non compatibili con i browser che non supportano lo SNI, in particolare con android, che visualizza il classico errore "Connessione non sicura" che provoca non pochi problemi.
Tramite CertBot si possono creare certificati che funzionano su qualsiasi dispositivo, perciò potrebbero tranquillamente sostituire quelli di terze parti.
Bando alle ciancie, mettiamoci all'opera:
prima scaricate lo script che vi consentirà di generare i certificati:
cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto
Ora avete lo script ma bisogna renderlo eseguibile:
sudo chmod a+x /usr/local/sbin/certbot-auto
ora potete lanciare lo script per creare il certificato del primo dominio:
sudo certbot-auto --apache -d dominio.it -d www.dominio.it
A questo punto comparirà una schermata iniziale che vi chiederà di inserire la password, seguita da una simile a questa:
in cui dovrete selezionare il file di configurazione in cui sono inserite le istruzioni di apache del dominio in questione. Dalla schermata si evince che la funzione per il multi-host non è supportata, ma comunque la inseriremo succesivamente. Alla fine dovreste ricevere un messaggio tipo questo
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/dominio.it/fullchain.pem. Your
cert will expire on 2017-01-05. To obtain a new or tweaked version
of this certificate in the future, simply run certbot-auto again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot-auto renew"
A questo punto dovreste trovare i certificati nella cartella /etc/letsencrypt/live/dominio.it/ quindi:
sudo ls -al /etc/letsencrypt/live/dominio.it/
total 8
drwxr-xr-x 2 root root 4096 Oct 7 13:34 .
drwx------ 6 root root 4096 Oct 7 13:34 ..
lrwxrwxrwx 1 root root 46 Oct 7 13:34 cert.pem -> ../../archive/dominio.it/cert1.pem
lrwxrwxrwx 1 root root 47 Oct 7 13:34 chain.pem -> ../../archive/dominio.it/chain1.pem
lrwxrwxrwx 1 root root 51 Oct 7 13:34 fullchain.pem -> ../../archive/dominio.it/fullchain1.pem
lrwxrwxrwx 1 root root 49 Oct 7 13:34 privkey.pem -> ../../archive/dominio.it/privkey1.pem
Se vede il contenuto, siete a cavallo! Ora basta inserire la direttiva dentro il file di configurazione di apache in questo modo:
<VirtualHost *:443>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName dominio.it
ServerAdmin <a href="mailto:info@dominio.it">info@dominio.it</a>
DocumentRoot /var/www/
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
<Directory "/var/www/">
Options +Indexes +FollowSymLinks
AllowOverride All
Require all granted
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/dominio.it/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dominio.it/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/dominio.it/fullchain.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
ora riavviate apache:
sudo service apache2 restart
a questo punto non resta che abilitare il rinnovo automatico dei certificati. L'unica pecca di let's encrypt è che i certificati scadono ogni 90 giorni. Perciò faremo in modo che questa operazione sia automatica, e che generi i certificati nuovi alle 2.30 ogni 30 giorni. Quindi aprite crontab:
sudo crontab -e
e inserite alla fine questa riga:
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
È tutto!