Abbiamo già discusso in alcuni post precedenti come installare SSL sia sul Server Singolo che su quello Multi PHP (in bibliografia verranno inseriti i link di riferimento).
Uno dei problemi più grossi quando si approccia SSL è il costo dei certificati emessi dagli enti di certificazione.
Per una fase preliminare di studio abbiamo proposto ZeroSSL, che forniva per 90 giorni un certificato gratuito, ma alla fine del periodo o si compra o si sceglie una strada alternativa.
Da quando SSL è diventato uno standard obbligatorio de facto, è stato costituito un consorzio chiamato Let's Encrypt sponsorizzato dai big dell'informatica (tre nomi su tutti: IBM, Amazon Web Service e Facebook), che fornisce gratuitamente i certificati SSL necessari al sistema.
Da dove partiamo in relazione al nostro sistema
A differenza di ZeroSSL, dove esiste un sito, che a seguito di una registrazione restituisce un certificato in download, Let's Encrypt utilizza un programma in locale che va installato nel nostro sistema.
Ricordo, a quanti lettori siano passati da questa pagina direttamente, che nel corso delle "puntate precedenti" abbiamo costruito due tipologie di server su Aruba Cloud CentOS 7 (banalmente il più economico in rapporto prezzo/prestazioni dotato di indirizzo IP pubblico statico, quantomeno per usare oggetti complessi come quelli descritti)
Ma come già detto in bibliografia ci sono tutti i link dei post precedenti.
Nel post Server Aruba Cloud - CentOS 7 - Installare Virtual Host SSL su Apache2 (porta 443), abbiamo installato Mod_SSL, il modulo che ci consente di accedere al nostro web server non solo da porta 80, quella standard usata da Sir Tim Berners-Lee / Robert Cailliau nel suo progetto iniziale del World Wide Web (sito superiore che accede al primo sito web) messo in funzione il 6 agosto 1991, ma la 443 che consente di creare una connessione tra due entità client/server mediante l'uso di un certificato che ci assicura che le informazioni sono criptate, rendendo sicuro lo scambio dei dati.
Allo stesso modo, abbiamo installato Mod_SSL anche sul server multi php come descritto nel post Server Aruba Cloud - CentOS 7 - Server LAMP multi PHP - Apache2 - Gestire domini con e senza SSL scegliendo la versione di PHP.
Visto che l'installazione è la stesso per il Mod_SSL e quello che cambia è nella scrittura del VirtualHost (VH), allora useremo come punto di partenza il server Multi PHP.
Il programma certbot
Il programma certbot è quello che ci consente di poter creare i certificati.
Per installare certbot abbiamo bisogno della repository EPEL, utilizziamo il comando sottostante per abilitarlo:
yum -y install epel-release
Installiamo yum-utils:
yum -y install yum-utils
E infine certbot per Apache:
yum -y install certbot python2-certbot-apache
A installazione completata
eseguiamo questo comando per avviare la configurazione del certificato:
certbot
Ci viene richiesto di inserire una mail di contatto per ricevere eventuali comunicazioni sulla
Fatto ciò compare la seconda schermata e terza schermata
A questo punto il programma analizza quali sono i VirtualHost (VH) che abbiamo sulla macchina che vogliamo trasformare in SSL.
A questo il sistema fa l'analisi dei domini installati e mostra la lista.
Quando abbiamo costruito il Server Multi PHP (non SSL) abbiamo usato due domini per mostrare le due versioni di PHP.
Aggiungo che a differenza di quanto espresso in precedenza del file unico di ssl.conf nella cartella /etc/httpd/conf.d dove c'erano tutti i file su porta 443 che su porta 80, in questo server usammo i file singoli, ovvero tmm.2cg.it.conf e tmm2.2cg.it.conf.
Attiviamo SSL con Let's Encrypt su tutti e due e vediamo il risultato lato web
Le modifiche dei file .conf
A questo punto, però, cosa accade nella "stanza dei bottoni"?
Cioè che modifiche ha fatto il programma certbot ai file?
Riporto il testo del VH tmm.2cg.it nelle due versioni:
###### Porta 80 - Inizio
###
### - tmm.2cg.it
### - Con accesso con .htaccess
### - e con error.log
######
<VirtualHost tmm.2cg.it>
DocumentRoot "/var/www/html/php56"
#ServerName tmm.2cg.it
# Parametri della struttura in php 5.6
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php56-fcgi .php
Action php56-fcgi /cgi-bin/php56.fcgi
# Parametri della cartella in PHP 5.6
<Directory /var/www/html/php56>
DirectoryIndex index.php
AllowOverride all
Require all granted
</Directory>
RewriteCond %{SERVER_NAME} =tmm.2cg.it
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Sostanzialmente sulla macchina, come mostrato anche in altre occasioni, abbiamo due domini uno su porta 80 ed uno su porta 443, che possono, in teoria, lavorare diversamente.
certbot ha modificato il VH aggiungendo delle righe alla fine (in giallo) che reindirizzano tutte le richieste da http -> https.
Tutte le richieste della pagina, sono, così reindirizzate sulla parte SSL.
Ma com'è fatto il VH della parte SSL?
Mentre nel file unico di ssl.conf, il programma avrebbe aggiunto alla parte Porta 80 le righe in giallo riportate nel primo VH ed aggiunto i certificati nuovi nella parte Porta 443 (chi vuole può sperimentare...), qui il sistema ha dovuto effettuare un altro tipo di "lavoro": attivare un VH con SSL (il codice <IfModule mod_ssl.c>), dire su quale porta essere in ascolto (la 443: <VirtualHost tmm.2cg.it:443>) e quali sono i certificati da usare e dove stanno (le ultime righe in giallo)
Automaticamente ha riavviato il server apache alla chiusura del programma ed il risultato è quello mostrato in precedenza (o fotocopertina del post)
Bibliografia
Server Aruba Cloud - CentOS 7 - Installare un Web Server LAMP multi PHP (PHP 5.6 e PHP 7.3)
Server Aruba Cloud - CentOS 7 - Installare Virtual Host SSL su Apache2 (porta 443)
Commenti