Come installare Let's Encrypt in Apache, con sistema operativo CentOS
Oggi tutti i siti web devono disporre di un certificato SSL.
SSL, Secure Sockets Layer, è un protocollo che consente una trasmissione dei dati tra client (il browser) e server (il sito web) in modo sicuro e protetto.
Ci accorgiamo che un sito dispone di un certificato SSL dal lucchetto che appare nella barra degli indirizzi del browser
In questo articolo vediamo vediamo la procedura di installazione di un certificato SSL fornito da Let's Encrypt, utilizzando Apache come server web e sistema operativo CentOS 7.
Questo articolo è quindi dedicato a chi gestisce un sito web su un proprio server dedicato, quindi non in hosting.
I certificati costano... anzi costavano. Con Let’s Encrypt non dobbiamo più pagare per avere un certificato per il nostro sito web.
Let’s Encrypt è una autorità di certificazione completamente gratuita sviluppata dalla società californiana Internet Security Research Group (ISRG) che ha come obiettivo quello di rendere i certificati di sicurezza del livello di trasporto disponibili gratuitamente, ed in modo automatizzato. Vediamo come.
Innanzitutto, vediamo rapidamente alcune operazioni preliminare, e cioè l'installazione di Apache e la sua configurazione per erogare siti sotto https cioè con certificato.
Aggiornamento del sistema CentOS
Procediamo innanzitutto con l'aggiornamento del nostro sistema operativo
# yum update
Installazione di Apache web server
Se non l'avete ancora installato, procedete all'installazione del server web Apache
# yum install httpd
Installazione di mod_ssl su Apache
Per poter erogare i siti sotto https, Apache necessita dell'installazione del modulo mod_ssl
# yum install mod_ssl
Configurazione di Apache
Il nostro sito lo collochiamo sotto questa directory: /var/www/html/miosito
Creiamo quindi la directory sul server
# mkdir /var/www/html/miosito
Nel file di configurazione dei virtual host di Apache "vhost.conf", occorre definire il blocco di codice relativo al sito in questione.
Editiamo quindi il file vhost.conf, utilizzando ad esempio l'editor "vi"
# vi /etc/httpd/conf.d/vhost.conf
Ipotizzando che il dominio con cui vogliamo visualizzare il nostro sito sia "www.webarea.it", creiamo questa configurazione.
<VirtualHost *:443>
DocumentRoot /var/www/html/miosito
ServerName webarea.it
ServerAlias www.webarea.it
CustomLog logs/site_access_log common
ErrorLog logs/site_error_log
</VirtualHost>
E' una configurazione molto semplice, in cui diciamo ad Apache che il nostro sito web dovrà risponde all'indirizzo webarea.it e www.webarea.it, e di rispondere sulla porta 443 utilizzata per la navigazone in https, invece che sulla classica porta 80. Ricordatevi di aprire la porta 443 sul vostro firewall !
In questo articolo non spiegheremo come si configura Apache, abbiamo già dedicato altri articoli sull'argomento.
Passiamo finalmente a Let’s Encrypt
5: installazione di Let's Encrypt
Abbiamo bisogno di usare, se non è ancora presente, la repository EPEL
# yum install epel-release
Installiamo anche yum-utils:
# yum install yum-utils
Infine installiamo certbot per Apache, cioè Let's Encrypt.
# yum install certbot python2-certbot-apache
Bene, Let's Encrypt è adesso installato! Vediamo come utilizzarlo
Installazione automatica del certificato ssl
Digita il comando certbot --apache e segui le istruzioni
# certbot --apache
Certbot cercherà tutti i virtual host presenti nel file "vhost.conf" (quindi se avete più domini, prenderà in considerazione tutti i domini ed eventuali alias indicati nel file vhost.conf) e vi chiederà su quale attivare HTTPS e quindi su quali creare un certificato.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: webarea.it
2: www.webarea.it
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):
Seleziona i domini su cui vuoi installare il certificato, indicando i numeri associati ai domini divisi da una virgola. Nel nostro esempio: 1,2
Se vuoi installare il certificato su tutti i domini, non indicare nulla e prosegui.
A questo punto verrà generato e installato il certificato.
Seguite quanto indicato a video... ad un certo punto verrà chiesto quanto segue:
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
In poche parole, viene chiesto se impostare il redirect automatico delle richieste da HTTP a HTTPS.
Se avete già configurato voi "a mano" questo redirect, ad esempio nel file vhost.conf, allora digitate "1".
In caso contrario, digitate "2" e lasciate che sia certbot a configurare tutto in automatico.
Se tutto è stato eseguito correttamente apparirà un messaggio simile a questo:
Congratulations! You have successfully enabled https://test.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=webarea.it
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/webarea.it/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/webarea.it/privkey.pem
Your cert will expire on 2020-06-02. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot 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
Certbot ti sta dicendo che tutto è andato bene, e che, se vuoi verificare la validità del certificato, potrai farlo aprendo la url
https://www.ssllabs.com/ssltest/analyze.html?d=webarea.it
I certificati sono stati installati sul nostro server nella cartella "/etc/letsencrypt/live"
Per curiosità, buttiamo un occhio in questa directory
Entriamo nella cartella
# cd /etc/letsencrypt/live
All'interno troveremo la directory relativa al dominio del nostro sito
# ls -l
total 8
-rw-r--r-- 1 root root 740 Dec 18 13:42 README
drwxr-xr-x 2 root root 4096 Jan 13 15:17 www.webarea.it
Entriamo nella cartella www.webarea.it
# cd www.webarea.it
Al suo interno c'è il certificato fullchain.pem (è presente anche in altri formati: cert.pem e chain.pem) e la chiave privata privkey.pem
[root@agr1 www.agronline.it]# ls -l
total 4
lrwxrwxrwx 1 root root 40 Jan 13 15:17 cert.pem -> ../../archive/www.webarea.it/cert4.pem
lrwxrwxrwx 1 root root 41 Jan 13 15:17 chain.pem -> ../../archive/www.webarea.it/chain4.pem
lrwxrwxrwx 1 root root 45 Jan 13 15:17 fullchain.pem -> ../../archive/www.webarea.it/fullchain4.pem
lrwxrwxrwx 1 root root 43 Jan 13 15:17 privkey.pem -> ../../archive/www.webarea.it/privkey4.pem
-rw-r--r-- 1 root root 692 Jan 8 10:19 README
Installazione di singoli certificati
Nel paragrafo precedente abbiamo lasciato a certbot di verificare i domini presenti nel file vhost.conf.
Tuttavia, per complettezza di spiegazione, nulla ci vieta di installarle il certificato su un solo dominio.
In tal caso utilizziamo certbot con l'opzione -d seguita dal dominio.
certbot --apache -d pippo.it
O se vogliamo installare il certificato su più domini:
certbot --apache -d pippo.itcertbot --apache -d pippo.it -d pluto.it
Detto questo, io preferisco lasciare a certbot di operare in automatico, come abbiamo visto nel paragrafo precedente.
Verifica della corretta installazione del certificato
Abbiamo già detto che possiamo verificare la corretta configurazione del certificato aprendo la url
https://www.ssllabs.com/ssltest/analyze.html?d=webarea.it
dove, dopo il parametro "d" indichiamo il dominio che vogliamo analizzare.
La procedura di verifica impiega alcuni minuti, con alcuni refresh della pagina. Se tutto è andato bene, il risultato finale sarà una schermata simile a questa
Oltre a questa verifica, dobbiamo controllare che il nostro server web risponda correttamente
Apriamo il browser e digitiamo l'indirizzo del nostro sito web: https://www.webarea.it
Se tutto è andato come deve, apparirà il lucchetto al fianco dell'indirizzo, ad indicare che il nostro server è protetto dal certificato SSL.
Scadenza del certificato
Un certificato gratuito Let's encrypt scade dopo 90 giorni. ... cosa devo fare quindi dopo 90 giorni? Devi rinnovarlo.
Rinnovo del certificato
Trascorsi i 90 devi rinnovare il certificato, e per farlo devi gitare il seguente comando, e seguirne le istruzioni
certbot renew
Se vuoi, puoi anche solo simulare la procedura di rinnovo, così
certbot renew --dry-run
Tu dirai: "devo mettermi un appunto e dopo 90 giorni rinnovare il certificato... che @@ !!"
E pensa che se invece di avere un solo dominio ne hai molti.
Ma c'è una soluzione: l'auto rinnovo dei certificati.
Auto rinnovo dei certificati
Esista una via molto agevole per rinnovare a scadenza i certificati, senza dover far nulla: scheduliamo una attività di rinnovo automatico.
Modifichiamo crontab
# crontab -e
Aperto crontab, digitiamo "i" ed aggiungiamo questa riga
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
Digitiamo quindi il tasco "Esc" seguito da ":wq" per salvare la modifica.
Così facendo abbiamo schedulato una attività che verrà eseguita alle ore 0.00 e 12.00, tutti i giorni: in questo orario verrà automaticamente chiamato il comando "certbot renew" che procederà al rinnovo in automatico del certificato (o dei certificati).
Conoscere i certificati installati
Per avere la lista dei certificati installati, con relativa scadenza, utilizziamo il seguente comando:
# certbot certificates
Il risultato sarà simile a questo
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
Certificate Name: www.webarea.it
Domains: webarea.it
Expiry Date: 2020-06-02 13:17:03+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/www.webarea.it/fullchain.pem
Private Key Path: /etc/letsencrypt/live/www.webarea.it/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Rimuovere un certificato
Per rimuovere il certificato di uno specifico dominio, digitiamo quanto segue e seguiamo le istruzioni
# certbot delete --cert-name www.webarea.it
Promemoria certificati in scadenza
In prossimità delle scadenze, Let's Encrypt ci invia un promemoria via email, con oggetto "Let's Encrypt certificate expiration notice for domain xxxx", dove al posto di xxxx avremo il nome del dominio in scadenza.
Il contenuto sarà simile a questo:
Hello,
Your certificate (or certificates) for the names listed below will expire in 10 days (on 17 Mar 20 13:35 +0000).
Please make sure to renew your certificate before then, or visitors to your website will encounter errors.
We recommend renewing certificates automatically when they have a third of their
total lifetime left. For Let's Encrypt's current 90-day certificates, that means
renewing 30 days before expiration. See
https://letsencrypt.org/docs/integration-guide/ for details.
www.webarea.it
..............
Conclusioni
Come abbiamo visto, la proceura di installazione di Let's Encrypt è molto agevole e difficimente incorrerete in problematiche. Ringraziamo quindi Let's Encrypt per poter disporre di certificati per i nostri domini, senza dover pagare nulla.
Si rimanda alla documentazione di Certbot per approfondimenti.