Con Apache HTTP Server possiamo pubblicare le nostre pagine Web con HTTPS (Hypertext Transfer Protocol Secure). Qui vedremo come farlo.
Introduzione
Attualmente quasi nessuna pagina Web utilizza HTTP. La maggior parte usa HTTPS. HTTPS è un protocollo sicuro che serve (tra le altre cose) per crittografare le comunicazioni tra client e server.
Requisiti precedentis
Abbiamo bisogno di un server HTTP Apache installato e avviato.
Configurazione
Installazione di tools
Avremo bisogno di installare due tools, con i seguenti comandi:
Editore Vi:
apt install -y vim
Browser Web della console Links:
apt install -y links
Configurazione de Apache HTTP Server
E ora configuriamo Apache HTTP Server:
Attiviamo il modulo Apache SSL:
a2enmod ssl
E creiamo la configurazione SSL con:
a2ensite default-ssl
Avviamo il server Apache con:
service apache2 start
Oppure riavviamo il server con:
service apache2 restart
Creazione e configurazione di certificati
Dobbiamo creare e configurare chiavi e certificati per due tipi di entità:
- L’Autorità di Certificazione (CA).
- Il Web Server in cui andremo a configurare HTTPS.
Autorità di Certificazione (CA)
Creiamo la chiave dell’Autorità di Certificazione:
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537 -out cakey.pem
Facciamo autofirmare alla CA il proprio certificato:
openssl req -new -x509 -key cakey.pem -out cacert.pem -days 365
Ci chiederà questi dati:
- Country Name (2 letter code) [AU]:ES
- State or Province Name (full name) [Some-State]:Madrid
- Locality Name (eg, city) []:Madrid
- Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
- Organizational Unit Name (eg, section) []:MySection
- Common Name (e.g. server FQDN or YOUR name) []:localhost
- Email Address []:me@myemail.com
In questo momento abbiamo questi due elementi:
- La chiave CA (cakey.pem).
- Il certificato autofirmato dall’Autorità di Certificazione, ovvero noi stessi (cacert.pem).
Ora abbiamo bisogno di alcune directory per questa autorità per firmare il certificato Web.
mkdir demoCA
mkdir demoCA/certs
mkdir demoCA/crl
mkdir demoCA/newcerts
mkdir demoCA/private
touch demoCA/index.txt
echo 02 > demoCA/serial
mv cacert.pem demoCA/
mv cakey.pem demoCA/private/
E con questo, abbiamo già i file dell’Autorità di Certificazione (CA).
Server Web
Creiamo una coppia di chiavi:
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537 -out privkey-localhost.pem
Creiamo la richiesta di firma del certificato:
openssl req -new -key privkey-localhost.pem -out certreq-localhost.crs
Ci chiederà questi dati:
- Country Name (2 letter code) [AU]:ES
- State or Province Name (full name) [Some-State]:Madrid
- Locality Name (eg, city) []:Madrid
- Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
- Organizational Unit Name (eg, section) []:MySection
- Common Name (e.g. server FQDN or YOUR name) []localhost
- Email Address []:me@myemail.com
Non inseriamo un valore quando richiediamo Challenge password o Optional company name.
Ora inviamo la richiesta all’Autorità di Certificazione ed essa (noi) rilascerà un certificato:
openssl ca -in certreq-localhost.crs -out cert-localhost.pem
E poi rispondiamo a tutto con “y”.
Ora configuriamo Apache per utilizzare questi certificati.
Innanzitutto verifichiamo:
openssl verify -CAfile demoCA/cacert.pem cert-localhost.pem
Il sistema risponde con:
cert-localhost.pem: OK
Configurazione de Apache HTTP Server per utilizzare SSL
Copiamo i file importanti:
cp cert-localhost.pem /etc/ssl/certs/
cp demoCA/cacert.pem /etc/ssl/certs/
cp privkey-localhost.pem /etc/ssl/private/
Modifichiamo la configurazione SSL di Apache:
vi /etc/apache2/sites-available/default-ssl.conf
Modifichiamo queste due righe con il percorso dei nostri file:
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
Per questi:
SSLCertificateFile /etc/ssl/certs/cert-localhost.pem
SSLCertificateKeyFile /etc/ssl/private/privkey-localhost.pem
Dopo questi due, ne introduciamo uno nuovo:
SSLCACertificateFile /etc/ssl/certs/cacert.pem
Salviamo e usciamo Vi con”:wq”.
Ora eseguiamo un ricaricamento per caricare la configurazione:
service apache2 reload
Se riceviamo un errore perché il server è spento, lo avviamo con:
service apache2 start
Test
Testiamo come segue (usando la console dei comandi e il browser Web di testo “Links” invece di un browser Web grafico):
Carichiamo l’URL senza HTTPS:
links http://localhost
Successivamente, affrontiamo l’URL con HTTPS:
links https://localhost
Ci dirà che il certificato non è valido (perché l’abbiamo creato noi stessi). Fare clic su Sì e la pagina verrà caricata senza problemi.
Nota: per evitare questo messaggio e per poter utilizzare un browser Web comune come Google Chrome senza alcun messaggio di avviso, è necessaria un’autorità di certificazione per convalidare il certificato che abbiamo creato.
So, what do you think ?