L'implementazione del protocollo HTTPS in Apache è relegata al modulo mod_ssl. Originariamente concepito come modulo opzionale, e pertanto da compilare ed installare separatamente, mod_ssl è oggi parte integrante del server Apache stesso (a partire dalla versione 2.0). Ciò rende più semplice l'attivazione e la configurazione del protocollo HTTPS, in quanto non richiede l'installazione di software aggiuntivo.
Attivazione
Come accade per altri moduli del server Apache, anche mod_ssl va esplicitamente abilitato nel file di configurazione prima di essere utilizzato. La direttiva utilizzata per attivare un modulo è LoadModule. In particolare, per caricare il modulo mod_ssl, bisogna aggiungere al file di configurazione httpd.conf la riga:
LoadModule ssl_module modules/mod_ssl.so
Ricordiamo, però, che la configurazione di Apache può essere suddivisa in più file, grazie al meccanismo di inclusione. Questo sistema è largamente sfruttato dalle versioni installate con le principali distribuzioni Linux, poichè garantisce una migliore manutenibilità. Nel caso specifico, è possibile che sia già presente un file di configurazione relativo al modulo mod_ssl, pronto per essere "incluso" nella configurazione di Apache.
Ad esempio, in ambiente Fedora la directory /etc/httpd/conf.modules.d contiene un file per ogni modulo da caricare. Quindi è buona norma inserire la direttiva LoadModule
in un file presente in questa directory (ad esempio, /etc/httpd/conf.modules.d/00-ssl.conf) piuttosto che direttamente nel file httpd.conf.
Configurazione delle porte
Come già visto nella lezione sulle porte, è necessario inoltre specificare le porte TCP sulle quali il server si metterà in ascolto. In particolare, per ricevere richieste HTTPS è necessario abilitare la porta 443, con la direttiva Listen. Ad esempio:
Listen 443
Tuttavia, è bene sottolineare che è anche possibile lavorare con porte non standard (ad esempio, 8443). L'attivazione o meno del protocollo HTTPS non è infatti legata al numero di porta in sé, ma alla specifica configurazione del VirtualHost in oggetto.
Configurazione del VirtualHost
Per attivare HTTPS su un VirtualHost è necessario aggiungere almeno tre direttive alla sua configurazione:
- SSLEngine, usata per abilitare o disabilitare il layer di trasporto sicuro (SSL o TLS);
- SSLCertificateFile, che indica il percorso del certificato del server;
- SSLCertificateKeyFile, che indica il percorso della chiave privata corrispondente alla chiave pubblica contenuta certificato;
Ad esempio, per il server www.miosito.it potremmo avere:
Listen 443
<VirtualHost *:443>
ServerName www.miosito.it
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/www.miosito.it.cert"
SSLCertificateKeyFile "/etc/apache2/ssl/www.miosito.it.key"
</VirtualHost>
Supponendo che la coppia di file certificato + chiave privata siano archiviati nella directory /etc/apache2/ssl/.
Ciò rappresenta il minimo indispensabile per attivare HTTPS: attivazione di SSL e specifica dei file di certificato e chiave privata. Esistono altre direttive che consentono di controllare aspetti avanzati del funzionamento del modulo mod_ssl. Ad esempio, la direttiva SSLCipherSuite permette di specificare quali algoritmi di cifratura supportare e quali invece disabilitare.