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


24

Mein Ziel ist es, eine ordnungsgemäße Sicherheit für Clients zu gewährleisten, die eine Verbindung zu meinem Nginx herstellen. Ich folge dem Mozilla-Handbuch, um TLS in meiner Nginx-Installation richtig zu konfigurieren , 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;
}

Hiermit 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 Maschinen verwenden, die PFS oder andere relevante sicherheitsrelevante Technologien nicht unterstützen.

Wie konfiguriere ich Nginx, um diese Informationen zu protokollieren?

Antworten:


43

Fügen Sie $ssl_cipherIhrer log_formatKonfiguration hinzu.

Informationen zu allen SSL-bezogenen Variablen finden Sie unter http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables .

Beispiel

Definieren Sie eine Benutzerdefinition log_formatim httpKontext (zB /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 combinedmit einer zusätzlichen '$ssl_protocol/$ssl_cipher 'Zeile.

Fügen Sie dann in einem serverKontext (mit aktiviertem SSL) die access_logDirektive mit dem benutzerdefinierten Protokollformat hinzu:

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"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.