:::: MENU ::::

Apache HTTP Server: Configurare HTTPS

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 ?