it-swarm.com.de

Wie kann ich nginx das verwendete SSL / TLS-Protokoll und die Chiffresuite protokollieren lassen?

Mein Ziel ist es, die richtige Sicherheit für Kunden zu gewährleisten, die eine Verbindung zu meinem Nginx herstellen. Ich folge Mozillas Handbuch zur ordnungsgemäßen Konfiguration von TLS bei meiner Nginx-Installation, habe jedoch keinen Überblick über die tatsächlich in der Praxis verwendeten Protokolle/Chiffresuiten.

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

Damit möchte ich protokollieren, welches SSL-Protokoll für eine Verbindung verwendet wurde und welche Verschlüsselungssuite ausgewählt wurde, nachdem der Client/Server ausgehandelt hat. 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 Computer verwenden, die PFS oder andere relevante sicherheitsrelevante Technologien nicht unterstützen.

Wie konfiguriere ich nginx, um diese Informationen zu protokollieren?

25
gertvdijk

Hinzufügen $ssl_cipher zu deinem log_format Aufbau.

Unter http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables finden Sie alle SSL-bezogenen Variablen.

Beispiel

Definieren Sie ein benutzerdefiniertes log_format im Kontext http (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 Standardformat combined mit einem zusätzlichen '$ssl_protocol/$ssl_cipher ' Linie.

Fügen Sie dann in einem server -Kontext (mit aktiviertem SSL) das 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 sehen die Protokolle folgendermaßen aus:

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"
46
praseodym