Frage Wie kann ich Nginx das verwendete SSL / TLS Protokoll und die CipherSuite protokollieren lassen?


Mein Ziel ist es, eine angemessene Sicherheit für Clients zu gewährleisten, die sich mit meinem Nginx verbinden. Ich folge Mozillas Anleitung zum korrekten Konfigurieren von TLS auf meiner nginx-installation, aber ich habe keinen überblick über die tatsächlichen protokolle / cipher sites, die in der praxis verwendet werden.

Was ich jetzt habe:

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;
}

Hiermit möchte ich protokollieren, welches SSL-Protokoll für eine Verbindung verwendet wurde und welche Verschlüsselungssuite gewählt wurde, nachdem der Client / Server ausgehandelt wurde. Z.B.:

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

zu

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"

Auf diese Weise kann ich schnell Clients identifizieren, die veraltete Browser oder automatisierte Maschinen verwenden, die PFS oder andere relevante Technologien für die Sicherheit nicht unterstützen.

Wie konfiguriere ich Nginx, um diese Informationen zu protokollieren?


22
2017-08-13 11:57


Ursprung




Antworten:


Hinzufügen $ssl_cipher zu deinem log_format Aufbau.

Beziehen auf http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables für alle SSL-bezogenen Variablen.

Beispiel

Definieren Sie eine benutzerdefinierte Methode log_format in dem http Kontext (z.B. /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"';

Das obige basiert auf dem Standard combined Format mit einem zusätzlichen '$ssl_protocol/$ssl_cipher ' Linie.

Dann füge in a hinzu server Kontext (mit SSL aktiviert) die access_log Direktive mit dem benutzerdefinierten Protokollformat:

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

Nach dem Neustart von nginx erscheinen Protokolle wie folgt:

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"

36
2017-08-13 12:43