La configurazione di una connessione SSL (Secure Sockets Layer), consente di aggiungere un protocollo di crittografia asimmetrico aggiuntivo al comune HTTP. Il protocollo SSL può essere utile per rafforzare sia il sistema di autenticazione di un sito web sia lo scambio di dati tra un'app e il server. In questa guida vedrai come configurare una connessione SSL e abilitare HTTPS su Apache con Ubuntu 18.04.
Per prima cosa, connettiti al tuo server tramite una connessione SSH. Se non l'hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in modo sicuro con il protocollo SSH. Nel caso di un server locale, vai al passaggio successivo e apri il terminale del tuo server.
Ottenere un certificato SSL
Per stabilire una connessione sicura, Apache avrà bisogno di un certificato SSL che può essere ottenuto da un'Autorità di Certificazione (CA). Per comodità, in questo esempio utilizzeremo un certificato autofirmato o autofirmato, utilizzato solo in ambienti di test e sviluppo. Per ottenere un certificato autofirmato, consulta la nostra guida per creare un certificato SSL autofirmato.
Se sei interessato ad ottenere un certificato SSL gratuito emesso da un'Autorità di Certificazione, segui la nostra guida su Come proteggere Apache con Let's Encrypt e Ubuntu 18.04.
Nota importante:
Durante la creazione del certificato, inserisci l'indirizzo IP del tuo server e/o il nome di dominio quando ti viene chiesto il Nome Comune:
Common Name (e.g. server FQDN or YOUR name) []: domain.com
Dopo aver ottenuto il certificato, crea la cartella /etc/certificate:
$ sudo mkdir /etc/certificate
Quindi salva al suo interno sia il certificato che la chiave privata.
Configurazione dei parametri SSL di Apache
Procedi impostando le direttive per la connessione sicura che creerà Apache. Per farlo, crea il file ssl-params.conf nella directory Apache conf-available:
$ sudo nano /etc/apache2/conf-available/ssl-params.conf
Incolla la seguente configurazione di base nel file appena creato:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
Quindi salva e chiudi il file.
Come cambiare l'host virtuale
Quindi, modifica la configurazione SSL dell'Host Virtuale del dominio che vuoi proteggere con connessione SSL. In questo tutorial verrà utilizzata, come esempio, la configurazione SSL dell'host virtuale Apache predefinito.
Apri la configurazione SSL dell'host virtuale:
$ sudo nano /etc/apache2/sites-available/default-ssl.conf
Troverai un file strutturato come segue:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Imposta correttamente la direttiva ServerAdmin inserendo la tua email e aggiungi la direttiva ServerName seguita dal tuo dominio o dall'indirizzo IP del tuo server.
Infine, cambia il percorso indicato dalle direttive SSLCertificateFile e SSLCertificateKeyFile, inserendo rispettivamente il percorso del tuo certificato e la tua chiave privata.
Otterrai un risultato simile al seguente:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName mydomain.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/certificate/certificate.crt
SSLCertificateKeyFile /etc/certificate/private.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Quindi salva e chiudi il file.
Come configurare il Firewall
In caso di firewall sul tuo sistema, configuralo per abilitare il traffico HTTP e il traffico HTTPS sul tuo computer.
Quando si utilizza il firewall UFW, sono disponibili alcuni profili preinstallati per Apache. Vediamo quindi come abilitarli.
Per verificare i profili disponibili installati nel firewall UFW, eseguire questo comando:
$ sudo ufw app list
Sullo schermo verrà visualizzato un elenco simile al seguente:
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Per consentire il traffico HTTP (Porta 80) e HTTPS (Porta 443), utilizza il profilo "Apache Full".
Controlla le informazioni del profilo come segue:
$ sudo ufw app info "Apache Full"
Verrà visualizzata la descrizione del profilo dello schermo:
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.
Ports:
80,443/tcp
Dopo aver verificato il profilo, abilitalo:
$ sudo ufw allow in "Apache Full"
Come configurare Apache
A questo punto è possibile apportare modifiche alla configurazione di Apache.
Abilita i moduli mod_ssl e mod_headers:
$ sudo a2enmod ssl
$ sudo a2enmod headers
Abilita la lettura della configurazione SSL creata in precedenza:
$ sudo a2enconf ssl-params
Abilita l'host virtuale SSL predefinito:
$ sudo a2ensite default-ssl
Verifica di non aver commesso errori di sintassi nei file di configurazione di Apache:
$ sudo apache2ctl configtest
Se sullo schermo appare il messaggio "Sintassi OK", procedi riavviando Apache:
$ sudo systemctl restart apache2
Come verificare la connessione sicura
Apri il tuo browser collegandoti al dominio o all'indirizzo IP dell'Host Virtuale che hai configurato, assicurandoti di utilizzare il protocollo https
https://mydomain.com