HTTPS (HyperText Transfer Protocol over Secure Socket Layer) protocollo per garantire la riservatezza dei dati che attraversano il web. Questa sicurezza è stata creata per impedire che il traffico possa essere intercettato con una 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.
Per fare questo dovremo utilizzare il protocollo HTTPS che abbina il comune HTTP ad un ulteriore protocollo di crittografia asimmetrica.
Ubuntu Server, così come in molte altre distribuzioni, ha il modulo SSL già presente nell’installazione base di Apache.
Bisogna solo attivarlo con il seguente comando che abilita anche la porta 443 di default per l’https.
1
|
sudo a2enmod ssl |
Dovremo quindi predisporre una cartella in cui generare i nostri certificati di sicurezza. Consiglio di creare una sottocartella dentro a quella di apache.
Nel caso di Ubuntu dovremo lanciare il comando
1
|
sudo mkdir /etc/apache2/ssl |
In altre distribuzioni come centOS la sottocartella può essere creata con i comando
1
|
sudo mkdir /etc/httpd/ssl |
Per ottenere chiave privata e certificato utilizzeremo openssl attraverso il seguente comando, riportando i percorsi corretti, scegliendo la crittografia RSA a 2048 bit e una validità di 365 giorni.
1
|
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache .key -out /etc/apache2/ssl/apache .crt |
Nel caso openssl non fosse presente, si può installare mediante il seguente comando su Ubuntu (o analoghi su altre distro)
1
|
apt-get install openssl |
La procedura di creazione dei certificati pone alcune domande alle quali si può rispondere abbastanza liberamente, es:
1
2
3
4
5
6
7
|
Country Name (2 letter code) [AU]:IT State or Province Name (full name) [Some-State]:Modena Locality Name (eg, city) []:Modena Organization Name (eg, company) [Internet Widgits Pty Ltd]:communicationBox Organizational Unit Name (eg, section) []:Development Common Name (e.g. server FQDN or YOUR name) []:NomeMioServer Email Address []:maimaildiriferimento@dominio.it |
A questo punto il grosso del lavoro è fatto, non resta che settare i virtual host per indicare di sfruttare la cominicazione sicura sulla porta 443 e chiave e certificato appena creati.
Nella cartella /etc/apache2/sites-available/ è solitamente già presente un file di esempio denominato default-ssl.conf che possiamo modificare o utilizzare come modello per creare il nostro file:
1
|
sudo nano /etc/apache2/sites-available/default-ssl .conf |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html <Directory /> Options FollowSymLinks AllowOverride All < /Directory > <Directory /var/www/ > Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Order allow,deny allow from all < /Directory > ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin" > AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all < /Directory > ErrorLog ${APACHE_LOG_DIR} /error .log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR} /access .log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/" > Options MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0 /255 .0.0.0 ::1 /128 < /Directory > < /VirtualHost > |
Ora la configurazione è terminata, dobbiamo abilitare come di consueto il virtual host:
1
|
sudo a2ensite default-ssl.conf |
Infine riavviamo il servizio per rendere effettive le modifiche:
1
|
sudo service apache2 restart |
Ora, verifichiamo che il firewall della nostra connessione consenta il traffico sulla porta 443, puntiamo sull’ip del server, o sul dominio impostato nel virtualhost, ad esempio https://123.123.123.123.
Comparirà un avviso che ci avverte che il certificato non è attendibile, questo è normale in quanto lo abbiamo autogenerato e non acquistato da un ente certificatore. Basterà procedere “accettando i rischi” per navigare in maniera sicura.