Abilitare HTTPS su Apache2
2021-02-22 | apache2 https ssl LAMP ubuntu linuxNel seguito si suppone di voler abilitare su un server Apache2 il protocollo HTTPS affinché si possano abilitare VirtualHosts in SSL dedicati a siti web con domini preconfigurati.
Quindi si vuole rendere lo scambio di tati sicuro.
Per evitare lo sniffing di dati scambiati bidirezionalmente fra server e client solitamente si procede all'abilitazione del protocollo di crittografia asimmetrica.
Ipotizzando di avere già un server LAMP preconfigurato e funzionante, è possibile procedere all'abilitazione dell'https: operazione anche questa più da sistemista che da web developer, ma sicuramente alla portata di tutti.
Su piattaforme Linux basate su sistemi [Ubuntu[(https://ubuntu.com/), così come su altre distribuzioni, il modulo SSL è già presente nell'installazione base di Apache. Bisogna solo attivarlo con il seguente comando che abilita l'utilizzo della porta 443 solitamente utilizzata per l'https:
sudo a2enmod ssl
A questo punto è necessario creare una cartella in cui generare i certificati di sicurezza utilizzati dall'SSL. A tal proposito è consigliabile creare una nuova sottocartella dentro quella di Apache:
sudo mkdir /etc/apache2/ssl
In altri sistemi la cartella del web server può essere diversa da /etc/apache2
, ad esemprio in CentOS si avrà /etc/httpd
.
Per ottenere la chiave privata e il certificato si utilizza openssl che solitamente troverete già installato nel sistema. È però opportuno verificare che openssl sia installato nel sistema:
sudo apt policy openssl
e, in caso non fosse installato, procedere alla sua installazione con:
sudo apt install openssl
Il seguente comando generera la key ed il certificato richiesto con crittografia RSA a 2048 bit e una validità di 365 giorni:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
Verrà avviata una procedura di creazione dei certificati durante la quale verranno poste alcune semplici domande:
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Pordenone
Locality Name (eg, city) []:Pordenone
Organization Name (eg, company) [Internet Widgits Pty Ltd]:lamiaorganizzazione
Organizational Unit Name (eg, section) []:Development
Common Name (e.g. server FQDN or YOUR name) []:ServerMio
Email Address []:maildiriferimento@dominio.it
A questo punto non resta che configurare correttametne i VirtualHost e abilitarli sulla connessione sicura che si trova sulla porta 443 accessibile con la chiave e il certificato appena creati.
sudo vim /etc/apache2/sites-available/default-ssl.conf
<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>
A questo punto la configurazione è terminata e basta abilitare il VirtualHost di interesse:
sudo a2ensite default-ssl.conf
e riavviare il server apache per rendere effettive le modifiche
sudo systemctl restart apache2
Ora, ammesso che il nostro firewall consenta il traffico sulla porta 443, visitando l'indirizzo del VirtualHost 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 navidare sul dominio in maniera sicura.
Questa generazione dei certificati è consigliabile per utilizzo in localhost in fase di sviluppo o testing, ma per siti o app pubbliche è vivamente consigliato l'acquisto di un certificato verificato anche per non spaventare gli utenti con l'avviso di sicurezza che tutti i browser mostreranno.
Comments