Questo articolo fornisce una panoramica della Perfect Forward Secrecy (PFS) e di come abilitarla sui server Web Apache® o Nginx®.
Cos'è PFS?
PFS protegge i dati condivisi tra il client e il server anche se la chiave privata è compromessa. Puoi farlo generando una chiave di sessione per ogni transazione effettuata.
Perché implementare PFS su un sito web?
Un certificato TLS o SSL funziona utilizzando una chiave pubblica e una chiave privata. Quando il browser web e il server si scambiano le chiavi, il sistema crea una chiave di sessione utilizzando un meccanismo di scambio di chiavi chiamato RSA, in cui tutte le informazioni tra il client e il server sono crittografate. RSAcrea un collegamento tra la chiave privata del server e la chiave di sessione creata per ogni sessione UniqueSecure.
La sessione potrebbe subire un attacco di forza bruta:questo consiste in un attacco che inietta nel server combinazioni di chiavi di sicurezza finché non trova quella corretta. Anche se questo processo potrebbe richiedere molto tempo, se la chiave privata del server viene compromessa, gli aggressori possono vedere sia i dati della sessione che tutte le transazioni del client.
Come PFS protegge un sito web
PFS consente al server di non fare affidamento su una singola chiave di sessione. Invece di utilizzare la stessa chiave di crittografia ogni volta che un utente o un servizio effettua una connessione, PFS genera una chiave di sessione univoca per ciascuna connessione.
Abilita PFS utilizzando meccanismi di scambio:Ephemeral Diffie-Hellman (DHE)
eElliptic Curve Diffie-Hellman (ECDHE)
. Se gli aggressori forzano la chiave di sessione, possono decrittare le informazioni solo da quella sessione e non dalle altre.
Requisiti per implementare PFS in un server web
Utilizzare uno dei seguenti strumenti per implementare PFS:
- OpenSSL 1.0.1c+
- Apache 2.4 o
- Nginx 1.0.6+ e 1.1.0+
Puoi controllare le versioni di questi pacchetti eseguendo i seguenti comandi:
Nota :i risultati potrebbero variare man mano che i fornitori rilasciano nuove versioni.
[root@rackspace-test ~]$ openssl version
OpenSSL 1.1.1g FIPS 21 Apr 2020
[root@rackspace-test ~]$ httpd -v
Server version: Apache/2.4.37 (centos)
Server built: Nov 4 2020 03:20:37
Per i server dei sistemi operativi Debian® o Ubuntu®, il comando è apache2ctl -v
.
[root@rackspace-test ~]$ nginx -v
nginx version: nginx/1.14.1
Configurazione del protocollo SSL
Verifica quali siti Web hanno implementato SSL eseguendo i comandi nelle sezioni seguenti.
Questi esempi implementano PFS in un dominio chiamato example.com .
Istruzioni per Apache
Sono disponibili due opzioni per verificare quali siti Web dispongono di un certificato SSL:
[root@rackspace-test ~]# grep -ir "SSLEngine" /etc/httpd/
/etc/httpd/conf.d/example.com.conf: SSLEngine on
Nota: Il percorso predefinito per gli host virtuali Apache si trova nella directory /etc/httpd/conf.d/ . Le directory potrebbero variare in base alla tua configurazione.
Oppure puoi usare i comandi httpd -S
o apachectl -S
per CentOS ® o RedHat® Enterprise Linux ® (RHEL) e apache2ctl -S
per sistemi operativi Debian o Ubuntu.
[root@rackspace-test ~]# httpd -S | grep 443
*:443 is a NameVirtualHost
port 443 namevhost www.example.com (/etc/httpd/conf.d/example.com.conf:10)
Aggiungi i seguenti parametri alla configurazione di vhost con il tuo editor di testo preferito:
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
Quando cerchi la parola SSL nel vhost, l'output dovrebbe essere simile al seguente dopo l'implementazione:
[root@rackspace-test ~]# egrep 'SSL' /etc/httpd/conf.d/example.com.conf
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
SSLCertificateFile /etc/ssl/certs/2022-example.com.crt
SSLCertificateKeyFile /etc/ssl/private/2022-example.com.key
Assicurati che la sintassi sia corretta e riavvia Apache.
[root@rackspace-test ~]# httpd -t
Syntax OK
[root@rackspace-test ~]# apachectl -k restart
Istruzioni Nginx
Elenca i siti Web su cui è installato un certificato SSL:
[root@rackspace-test ~]# egrep -ir 'SSL' /etc/nginx/conf.d/
/etc/nginx/conf.d/example.com.conf: listen 443 ssl;
/etc/nginx/conf.d/example.com.conf: ssl_certificate /etc/ssl/certs/2022-example.com.chained.crt;
/etc/nginx/conf.d/example.com.conf: ssl_certificate_key /etc/ssl/private/2022-example.com.key;
Nota: Il percorso predefinito per i blocchi Nginx si trova nella directory/etc/nginx/conf.d/ . Le directory potrebbero variare in base alla tua configurazione.
Aggiungi i seguenti parametri alla configurazione di vhost con il tuo editor di testo preferito:
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
Quando cerchi la parola SSL nel vhost, l'output dovrebbe essere simile al seguente dopo l'implementazione:
[root@racksapce-test ~]# egrep -ir 'SSL' /etc/nginx/conf.d/example.com.conf
listen 443 ssl;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
ssl_certificate /etc/ssl/certs/2022-example.com.chained.crt;
ssl_certificate_key /etc/ssl/private/2022-example.com.key;
Assicurati che la sintassi sia corretta e riavvia Nginx.
[root@rackspace-test ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@rackspace-test ~]# nginx -s reload
Utilizzando i passaggi precedenti, puoi implementare correttamente PFS per i tuoi siti web.
Utilizza la scheda Feedback per inserire commenti o porre domande. Puoi anche avviare una conversazione con noi.