Indice

Connessioni cifrate con apache2 e SSL

Autore: Fabio Di Matteo
Ultima revisione: 09/03/2018 - 17:12

A partire da Apache 2.x e' incluso nella distribuzione un plugin di nome mod_ssl che permette di configurare il server web per instaurare connessioni cifrate mediante la libreria SSL. In pratica verra cifrato asimmetricamente il contenuto dei pacchetti tcp grazie a Secure Socket Layer (SSL) .

Prepariamo le directory

Andremo a creare una directory sotto la document root la quale sara' la document root per quanto riguarda il sito sotto ssl.

Creiamo la directory che conterra il sito ssl

mkdir /var/www/ssl

Settiamo l'utente di apache come proprietario

 chown -R www-data /var/www/ssl/ 

Scegliere un nome host

A questo punto e' buona cosa avere a disposizione un nome host da utilizzare successivamente con l'host virtuale che andremo a creare. Esistono diversi servizi gratuiti che forniscono dei nomi di dominio dinamici ideali per questo scopo, ma se si vuole fare infretta per una prova in locale e' sufficiente modificare il file /etc/hosts aggiungendo una riga del genere:

127.0.0.1 miosito.com

a questo punto miosito.com viene risolto in 127.0.0.1 ovvero in localhost.

Generiamo chiave privata e certificato

Per generare la chiave privata e il certificato possiamo usare Tinyca2 come esposto in creare_una_ca_con_tinyca_2 oppure usare openssl da console nel seguente modo.

Generare la chiave privata

openssl genrsa -des3 -out my-CA.key 2048 

dove :
-des3 indica che la chiave privata utilizzera l'algoritmo triple des ;
2048 indica la lunghezza della chiave in bit;
-out e' il file che conterra' la chiave privata (my-CA.key).

Verra' chiesto inseguito di inserire una passphrase.

Generare il certificato autofirmato

openssl req -new -key my-CA.key -x509 -days 3650 -out my-CA.crt

dove :

req indica che vogliamo generare un certificato ;
new indica che questa e' una nuova richiesta;
-key indica il file contenente la chiave privata;
-x509 indica il tipo di certificato;
-days i giorni di validita' del certificato (3650 = 10 anni);
-out indica quale sara' il file che conterra il certificato (my-CA.crt );

A questo punto non ci resta che copiare la chiave privata e il certificato, appena ottenuti, in /etc/apache2/sites-available nel nostro caso.

Configurazione per il sito ssl

Apache permette di gestire piu' di un sito grazie all'utilizzo dei cosiddetti Virtual host ovvero piu' domini virtuali sullo stesso pc. Noi useremo questa caratteristica di apache per configurare il nostro sito ssl.

File di configurazione del sito SSL

Creiamo dentro la directory /etc/apache2/sites-available un file di nome ssl con questo contenuto:

<VirtualHost miosito.com:443>
	ServerName miosito.com 
	DocumentRoot /var/www/ssl
	<IfModule mod_ssl.c>
		SSLEngine on
		
		#Certificato X509
		SSLCertificateFile /etc/apache2/sites-available/my-CA.crt

		#Chiave privata 
		SSLCertificateKeyFile /etc/apache2/sites-available/my-CA.key
		
		SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
	</IfModule>


</VirtualHost>

dove:
<VirtualHost miosito.com:443> e' il nome di dominio associato al nostro sito ssl. Accettera' le connessioni solo tramite questa url tramite protocollo https sulla porta 443; (Qui potremmo anche mettere l'ip es. <VirtualHost 192.168.1.2:443> )
ServerName miosito.com il nome del nostro host virtuale;
DocumentRoot /var/www/ssl indica la document root del nostro sito ssl.

Adesso non ci resta che abilitare il sito con a2ensite ssl dove ssl e' il file di configurazione del nostro host virtuale appena configurato.Oppure possiamo creare un link dentro la directory /etc/apache2/sites-enabled che punti a /etc/apache2/sites-available/ssl.
Adesso e' arrivato il momento di riavviare apache con apache2ctl restart e puntare il nostro browser su https://miosito.com .

Togliere password della chiave privata

Puo' essere fastidioso digitare la password della chiave privata ogni volta che si riavvia apache, dunque possiamo eliminare la password in questo modo:

openssl rsa -in my-CA.key -out my-CA-nopasswd.key