GNU/Linux >> Linux Esercitazione >  >> Linux

Come abilitare la perfetta segretezza di inoltro SSL/TLS in Apache o Nginx

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.


Linux
  1. Cos'è NGINX? Come funziona?

  2. Come abilitare HTTP2 in NGINX

  3. Come abilitare la politica HSTS (HTTP Strict Transport Security) in Nginx e Apache

  4. CentOS / RHEL:come abilitare SSL per Apache

  5. Autorizzazioni per la chiave SSL?

Come abilitare TLS 1.3 in Nginx su Ubuntu 18.04 e 16.04

Come abilitare IPv6 in Nginx?

Come abilitare la compressione GZIP in Nginx

Come installare Nginx con Let's Encrypt TLS/SSL su Ubuntu 20.04

Come abilitare TLS 1.3 su Apache e Nginx

Come controllare la data di scadenza SSL su Plesk