Tutorial > Come abilitare il protocollo HTTPS su Apache 2 con Ubuntu 20.04

Come abilitare il protocollo HTTPS su Apache 2 con Ubuntu 20.04

Pubblicato il: 26 maggio 2021

Apache SSL Ubuntu

Introduzione

Per aggiungere al comune HTTP un protocollo aggiuntivo di crittografia asimmetrica è necessario configurare sul tuo server una connessione SSL, ovvero Secure Sockets Layer.

Il protocollo SSL può essere utile per rafforzare il sistema di autenticazione di un sito web o lo scambio di dati fra un'app e il server. In questa guida vedremo come configurare una connessione SSL e abilitare quindi il protocollo HTTPS su Apache 2 con un server Linux Ubuntu 20.04.

Per prima cosa dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.

Ottienere un Certificato SSL

Per permettere ad Apache di creare una connessione sicura hai bisogno di un certificato SSL che potrai ottenere da un'Autorità di Certificazione (CA). Per praticità in questo esempio utilizzeremo un certificato self-signed ovvero autofirmato, che si adopera solamente in ambienti di test e sviluppo. Per ottenere un certificato self-signed puoi fare riferimento alla nostra guida per Creare un certificato SSL Self-Signed.

Se invece ti interessa ottenere un certificato SSL gratuito rilasciato da una Certification Authority puoi seguire la nostra guida su Come mettere in sicurezza Apache con Let's Encrypt e Ubuntu 18.04.

Nota importante:

Durante la creazione del certificato dovrai specificare l'indirizzo IP del tuo server o il nome del tuo dominio quando ti sarà chiesto il Common Name:

Common Name (e.g. server FQDN or YOUR name) []: dominio.it

Dopo aver ottenuto il certificato crea la cartella /etc/certificato:

$ sudo mkdir /etc/certificato

Quindi salva al suo interno sia il certificato che la chiave privata.

Configurare i parametri SSL di Apache

Procedi impostando le direttive per la connessione protetta che Apache andrà a creare. Per farlo crea il file ssl-params.conf all'interno della directory conf-available di Apache:

$ sudo nano /etc/apache2/conf-available/ssl-params.conf

Incolla la seguente configurazione base all'interno del 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.

Modificare il Virtual Host

Successivamente dovrai modificare la configurazione SSL del Virtual Host relativo al dominio che vorrai proteggere con connessione SSL. In questo tutorial utilizzeremo la configurazione SSL del Virtual Host di default di Apache come esempio.

Apri la configurazione SSL del Virtual Host:

$ sudo nano /etc/apache2/sites-available/default-ssl.conf

Ti troverai davanti a un file strutturato in questa maniera:

<IfModule mod_ssl.c>

        <VirtualHost _default_:443>

                ServerAdmin webmaster@localhost
                 

                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 quello della chiave privata.

Otterrai un risultato simile a questo:

<IfModule mod_ssl.c>

        <VirtualHost _default_:443>

                ServerAdmin [email protected]

                ServerName miodominio.it
                 

                DocumentRoot /var/www/html
                 

                ErrorLog ${APACHE_LOG_DIR}/error.log

                CustomLog ${APACHE_LOG_DIR}/access.log combined
                 

                SSLEngine on
                 

                SSLCertificateFile      /etc/certificato/certificato.crt

                SSLCertificateKeyFile /etc/certificato/privata.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.

Configurare il Firewall

Se sul tuo sistema è presente un firewall allora dovrai impostarlo per abilitare il traffico HTTP e il traffico HTTPS verso la tua macchina.

Nel caso in cui utilizzassi il firewall UFW, avrai a disposizione dei profili preinstallati per Apache. Vediamo quindi come abilitarli.

Per verificare i profili disponibili installati nel firewall UFW esegui questo comando:

$ sudo ufw app list

Verrà mostrata a schermo una lista simile a questa:

Available applications:

  Apache

  Apache Full

  Apache Secure

  OpenSSH

Per consentire il traffico HTTP (Porta 80) e HTTPS (Porta 443), dovrai utilizzare il profilo "Apache Full". 

Puoi verificare le informazioni del profilo in questo modo:

$ sudo ufw app info "Apache Full"

Apparirà la descrizione del profilo a 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, potrai abilitarlo:

$ sudo ufw allow in "Apache Full"

Configurare Apache

A questo punto sei pronto ad apportare le 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 che hai creato in precedenza:

$ sudo a2enconf ssl-params

Abilita il Virtual Host SSL di default:

$ sudo a2ensite default-ssl

Verifica di non aver commesso errori di sintassi nei file di configurazione di Apache:

$ sudo apache2ctl configtest

Se appare a schermo il messaggio "Syntax OK" puoi procedere con il riavvio di Apache:

$ sudo systemctl restart apache2

Verificare la connessione protetta

Apri il tuo browser collegandoti al dominio o all'indirizzo IP del Virtual Host che hai configurato, facendo attenzione a utilizzare il protocollo https://

https://dominio.it
Se la pagina si apre correttamente, senza messaggi di errore, e il browser mostra l'icona del lucchetto, vorrà dire che la connessione è sicura e avrai correttamente abilitato il protocollo HTTPS sul tuo sito web.