Configurazione di HTTPS su Apache 2
stima del tempo di lettura - minuti: 2, secondi: 41
Lo scopo di questa guida è presentare una possibile configurazione che consenta di abilitare l'uso del protocollo HTTPS per un nuovo site (ad es. www.mysite.it) per un web-server Apache 2.4. A tale scopo, la guida fa riferimento ad un ambiente Debian-like ed assume che:
- i moduli headers e ssl del web-server Apache siano attivi (comando: a2enmod headers ssl)
- la configurazione del nuovo site sia contenuta nel file /etc/apache2/sites-available/mysite.conf.
Di seguito viene mostrato il contenuto del file /etc/apache2/sites-available/mysite.conf precedentemente menzionato:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
...
# abilitiamo l'engine SSL
SSLEngine on
# specifichiamo il percorso assoluto della "chain" (spiegato più avanti)...
SSLCertificateFile /etc/ssl/mysite/chain.crt
# ... e della chiave privata.
SSLCertificateKeyFile /etc/ssl/mysite/private.key
# Le seguenti tre direttive ci consentono di implementare
# la cosiddetta Perfect Forward Secrecy:
# 1) consentiamo solo TLSv1.3 e TLSv1.2
SSLProtocol -all +TLSv1.2 +TLSv1.3
# 2) specifichiamo una lista di cifrari separati da due punti che il client può negoziare.
# L'ordine in cui i cifrari appaiono nella lista è importante:
# quelli considerati più sicuri sono in cima alla lista,
# mentre quelli preceduti dal simbolo "!" non sono consentiti.
#
# PS. HIGH, MEDIUM e LOW raggruppano i cifrari in base alla loro robustezza,
# mentre i cifrari aNULL, eNULL e EXP sono disabilitati di default se
# la versione del server Apache HTTP è >= 2.4.7.
# Per questo motivo, non appaiono nella lista.
SSLCipherSuite HIGH:!MEDIUM:!LOW:!ADH:!3DES:!MD5:!PSK:!SRP:!DSS:!RC4
# 3) quando viene scelto l'algoritmo di cifratura,
# vogliamo che vengano considerate le priorità precedentemente impostate.
SSLHonorCipherOrder on
<IfModule mod_headers.c>
# HTTP Strict-Transport-Security (HSTS):
# - max-age=31536000 indica al browser che, nei prossimi 31536000 secondi (~1 anno),
# questo sito può essere accessibile solo tramite HTTPS;
# - includeSubDomains questa regola si applica anche a tutti i sottodomini del sito.
# In questo esempio specifico è superfluo, ma può essere utile in casi d'uso più complessi.
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
...
</VirtualHost>
</IfModule>
# il protocollo HTTP viene utilizzato per effettuare
# una redirezione permanente al nostro endpoint HTTPS
<VirtualHost _default_:80>
...
Redirect permanent / https://www.mysite.it/
</VirtualHost>
Nella configurazione precedente si fa riferimento alla cosiddetta chain: un file di testo che include una catena di certificati codificati nel formato PEM. Il primo elemento della catena deve essere il certificato dell'entità finale, ovvero il certificato emesso per il nostro sito di esempio www.mysite.it e a seguire devono essere inclusi tutti i certificati intermedi della CA, ordinati dalle foglie fino alla CA radice.
I certificati emessi dal nostro servizio sono firmati da una CA radice nota alla maggior parte dei sistemi operativi e browsers (trust anchor) e per questo motivo può essere omessa all'interno del file chain.
Ad ogni modo, il link indicato con Certificate (w/ issuer after) all'interno dell'email che hai ricevuto con l'emissione del certificato, permette di ottenere un file chain che rispetta quanto descritto precedentemente.
Si noti infine che:
- è stato ipotizzato che chiave privata e chain siano salvate all'interno della directory /etc/ssl/mysite;
- è necessario assicurarsi che il nuovo site sia abilitato a2ensite mysite.conf;
- è necessario riavviare il web server affinché le nuove configuarzioni vengano applicate systemctl restart apache2.
Verifica della configurazione
Al fine di verificare la correttezza della configurazione adottata, è possibile utilizzare lo strumento dei Qualys SSL Labs denominato SSL Server Test: un servizio online gratuito che esegue un'analisi approfondita della configurazione di un server web SSL. Una volta completata l'analisi, lo strumento restituisce un punteggio che va da F ad A+, suggerendo alcune azioni da intraprendere per migliorare la configurazione SSL.