Come posso consentire a nginx di registrare il protocollo SSL / TLS utilizzato e la ciphersuite?


24

Il mio obiettivo è garantire la sicurezza adeguata per i client che si connettono al mio nginx. Sto seguendo la guida di Mozilla per configurare correttamente TLS sulla mia installazione di nginx, ma non ho una panoramica degli attuali protocolli / cifrari utilizzati nella pratica.

Quello che ho ora:

server {
    listen 443;
    ssl on;
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_dhparam /path/to/dhparam.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'the_long_ciphersuite_listed_there';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;
}

Con questo, vorrei registrare quale protocollo SSL è stato usato per una connessione e quale ciphersuite è stata scelta dopo la negoziazione del client / server. Per esempio:

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] "GET / HTTP/1.1" 200 1234 "-" "User agent bla"

a

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 "GET / HTTP/1.1" 200 1234 "-" "User agent bla"

In questo modo posso identificare rapidamente i client che utilizzano browser obsoleti o macchine automatizzate che non supportano PFS o altre tecnologie di abilitazione della sicurezza pertinenti.

Come configuro nginx per registrare queste informazioni?

Risposte:


44

Aggiungi $ssl_cipheralla tua log_formatconfigurazione.

Fare riferimento a http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables per tutte le variabili relative a SSL.

Esempio

Definire un'abitudine log_formatnel httpcontesto (ad es. /etc/nginx/nginx.conf):

log_format combined_ssl '$remote_addr - $remote_user [$time_local] '
                        '$ssl_protocol/$ssl_cipher '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent"';

Quanto sopra si basa sul combinedformato predefinito con una '$ssl_protocol/$ssl_cipher 'riga aggiuntiva .

Quindi aggiungere in un servercontesto (con SSL abilitato) la access_logdirettiva con il formato di registro personalizzato:

server {
  listen 443;
  ssl on;
  access_log /var/log/nginx/access.log combined_ssl;
  [...]
}

Dopo aver riavviato nginx, i log appaiono come:

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] TLSv1.2/ECDHE-RSA-AES128-GCM-SHA256 "GET / HTTP/1.1" 200 1234 "-" "User agent bla"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.