back to top

Gestire connessioni sicure con HTTPS con Apache2 e SSL

Abbiamo visto in una precedente lezione come la comunicazione tra web server e client avvenga tramite protocollo HTTP. Navigando su internet però spesso ci si imbatte in siti che al posto del classico HTTP mostrano la dicitura HTTPS. Di cosa si tratta?

HTTPS (HyperText Transfer Protocol over Secure Socket Layer) aggiunge al protocollo di trasferimento HTTP, un protocollo di crittografia asimmetrica per garantire la riservatezza dei dati che attraversano il web. Questa sicurezza è stata creata per impedire che il traffico di dati potesse essere intercettato (in gergo sniffato) da persone estranee alla comunicazione attraverso la tecnica man in the middle.

SSL (Secure Sockets Layer) è un protocollo per la crittografia dei dati trasmessi tra il browser web di un client e il web server interrogato e per questo motivo è indispensabile che sia presente su alcuni siti che trattano dati sensibili (come ad esempio siti che gestiscono transazioni bancarie).

Attivare il modulo SSL

Il modulo SSL è già compreso nell’installazione di base di Apache2 su Ubuntu, quindi l’unica cosa che dobbiamo fare è attivarlo sul nostro server. Per farlo lanciamo il comando:

sudo a2enmod ssl

In questo modo abbiamo anche abilitato la porta 443 usata di default per https.

Creiamo poi una cartella dove andare a riporre i certificati che andremo a realizzare:

sudo mkdir /etc/apache2/certificatiSSL

Ora non ci resta che creare chiave privata e certificato con la seguente istruzione:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/certificatiSSL/apache.key -out /etc/apache2/certificatiSSL/apache.crt
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Rimini
Locality Name (eg, city) []:Rimini
Organization Name (eg, company) [Internet Widgits Pty Ltd]:mrwebmaster
Organizational Unit Name (eg, section) []:IT Department
Common Name (e.g. server FQDN or YOUR name) []:miosito.com
Email Address []:[email protected]

Una volta completate le informazioni, la chiave e il certificato verranno creati nella cartella certificatiSSL.

Ora che abbiamo creato i file di chiave e certificato, dobbiamo configurare Apache in modo che li utilizzi per il nostro virtual host.

Oltre al file 000-default.conf con la configurazione di default del primo sito, nella directory sites-available è disponibile anche il file default-ssl.conf che contiene una configurazione di base per la protezione SSL di un sito.

Anche qui possiamo andarlo a modificare con i nostri dati oppure, come in questo caso, crearcene uno nuovo:

sudo nano /etc/apache2/sites-available/miosito-ssl.conf
<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin [email protected]
        ServerName www.miosito.com
        ServerAlias miosito.com
        DocumentRoot /var/www/miosito.com
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile /etc/apache2/certificatiSSL/apache.crt
        SSLCertificateKeyFile /etc/apache2/certificatiSSL/apache.key
        <FilesMatch ".(cgi|shtml|phtml|php)$">
                        SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                        SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch "MSIE [2-6]" 
                        nokeepalive ssl-unclean-shutdown 
                        downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    </VirtualHost>
</IfModule>

Ora che abbiamo configurato il nostro virtual host SSL dobbiamo abilitarlo esattamente come abbiamo fatto in precedenza con i siti non SSL. Diamo il comando:

sudo a2ensite miosito.com

E riavviamo il servizio per rendere effettive le modifiche:

sudo /etc/init.d/apache2 restart

Ora il nostro sito web è pronto per essere contattato tramite SSL (anche qui previa apertura della porta 443 sul firewall) dai client.

Apriamo il browser e digitiamo https://www.miosito.com. Come vedrete all’apertura del sito web ci viene mostrato un avviso circa la connessione protetta che stiamo instaurando e il browser ci allerta in quanto il certificato interrogato non è attendibile. Questo è dovuto al fatto che il certificato che abbiamo creato prima non è stato autenticato, nessuno infatti ha verificato che i dati scritti siano veri e corretti.

avviso https

Possiamo procedere ugualmente aggiungendo una eccezione per navigare così sul sito appena abilitato. Se però vogliamo dare la certezza circa la nostra identità, in modo da offrire ai client tutte le garanzie possibili, allora dovremo acquistare un certificato digitale presso di una Certification Authority (CA). Una Certification Authority è un ente di terza parte al quale è stato concesso di emettere certificati digitali secondo procedure internazionali standardizzate in linea con le normative vigenti. Presso di uno di questi enti potremo farci certificare la chiave pubblica del nostro sito creata in precedenza, ed inserire così un certificato validato all’interno del web server Apache.

Pubblicitร