Serie RHCE: implementazione di HTTPS tramite TLS utilizzando Network Security Service (NSS) per Apache - Parte 8
Se sei un amministratore di sistema responsabile della manutenzione e della protezione di un server Web, non puoi permetterti di non dedicare i tuoi migliori sforzi per garantire che i dati serviti o che attraversano il tuo server siano protetti in ogni momento.
Per garantire comunicazioni più sicure tra client web e server, è nato il protocollo HTTPS come combinazione di HTTP e SSL ( Secure Sockets Layer) o, più recentemente, TLS (Transport Layer Security).
A causa di alcune gravi violazioni della sicurezza, SSL è stato deprecato a favore del più robusto TLS. Per questo motivo, in questo articolo spiegheremo come proteggere le connessioni tra il tuo server web e i client utilizzando TLS.
Questo tutorial presuppone che tu abbia già installato e configurato il tuo server web Apache. In caso contrario, fare riferimento al seguente articolo in questo sito prima di procedere oltre.
- Installa LAMP (Linux, MySQL/MariaDB, Apache e PHP) su RHEL/CentOS 7
Installazione di OpenSSL e utilità
Prima di tutto, assicurati che Apache sia in esecuzione e che sia http che https siano consentiti attraverso il firewall:
systemctl start http
systemctl enable http
firewall-cmd --permanent –-add-service=http
firewall-cmd --permanent –-add-service=https
Quindi installa i pacchetti necessari:
yum update && yum install openssl mod_nss crypto-utils
Importante: tieni presente che puoi sostituire mod_nss con mod_ssl nel comando sopra se desideri utilizzare OpenSSL invece di NSS (Network Security Service) per implementare TLS (quale utilizzare dipende interamente da te , ma in questo articolo utilizzeremo NSS poiché è più robusto; ad esempio, supporta i recenti standard di crittografia come PKCS #11).
Infine, disinstalla mod_ssl se scegli di utilizzare mod_nss, o viceversa.
yum remove mod_ssl
Configurazione NSS (servizio di sicurezza di rete)
Dopo l'installazione di mod_nss, il suo file di configurazione predefinito viene creato come /etc/httpd/conf.d/nss.conf. Dovresti quindi assicurarti che tutte le direttive Listen e VirtualHost puntino alla porta 443 (porta predefinita per HTTPS):
Listen 443
VirtualHost _default_:443
Quindi riavvia Apache e controlla se il modulo mod_nss è stato caricato:
apachectl restart
httpd -M | grep nss
Successivamente, dovrebbero essere apportate le seguenti modifiche al file di configurazione /etc/httpd/conf.d/nss.conf
:
1. Indica la directory del database NSS. È possibile utilizzare la directory predefinita o crearne una nuova. In questo tutorial utilizzeremo l'impostazione predefinita:
NSSCertificateDatabase /etc/httpd/alias
2. Evita l'immissione manuale della passphrase a ogni avvio del sistema salvando la password nella directory del database in /etc/httpd/nss-db-password.conf:
NSSPassPhraseDialog file:/etc/httpd/nss-db-password.conf
Dove /etc/httpd/nss-db-password.conf contiene SOLO la seguente riga e mypassword è la password che imposterai successivamente per il database NSS:
internal:mypassword
Inoltre, i suoi permessi e proprietà dovrebbero essere impostati rispettivamente su 0640 e root:apache:
chmod 640 /etc/httpd/nss-db-password.conf
chgrp apache /etc/httpd/nss-db-password.conf
3. Red Hat consiglia di disabilitare SSL e tutte le versioni di TLS precedenti a TLSv1.0 a causa del POODLE SSLv3 (ulteriori informazioni qui).
Assicurati che ogni istanza della direttiva NSSProtocol sia riportata come segue (probabilmente ne troverai solo una se non stai ospitando altri host virtuali):
NSSProtocol TLSv1.0,TLSv1.1
4. Apache rifiuterà di riavviarsi poiché si tratta di un certificato autofirmato e non riconoscerà l'emittente come valido. Per questo motivo, in questo caso particolare dovrai aggiungere:
NSSEnforceValidCerts off
5. Sebbene non sia strettamente richiesto, è importante impostare una password per il database NSS:
certutil -W -d /etc/httpd/alias