Bagaimana saya bisa membiarkan nginx mencatat protokol SSL / TLS dan ciphersuite yang digunakan?

24

Tujuan saya adalah untuk memastikan keamanan yang tepat untuk klien yang terhubung ke nginx saya. Saya mengikuti panduan Mozilla untuk mengkonfigurasi TLS dengan benar pada instalasi nginx saya, tetapi saya tidak memiliki gambaran umum tentang protokol / ciphersuites yang sedang digunakan dalam praktiknya.

Apa yang saya miliki sekarang:

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

Dengan ini, saya ingin mencatat protokol SSL mana yang digunakan untuk koneksi dan ciphersuite apa yang dipilih setelah klien / server dinegosiasikan. Misalnya:

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

untuk

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"

Dengan cara ini saya dapat dengan cepat mengidentifikasi klien yang menggunakan browser usang atau mesin otomatis yang tidak mendukung PFS atau teknologi yang memungkinkan keamanan lainnya yang relevan.

Bagaimana cara mengkonfigurasi nginx untuk mencatat informasi ini?

gertvdijk
sumber

Jawaban:

44

Tambahkan $ssl_cipherke log_formatkonfigurasi Anda .

Rujuk ke http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables untuk semua variabel terkait SSL.

Contoh

Tetapkan kebiasaan log_formatdalam httpkonteks (misalnya /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"';

Di atas didasarkan pada combinedformat default dengan '$ssl_protocol/$ssl_cipher 'baris tambahan .

Kemudian tambahkan dalam serverkonteks (dengan SSL diaktifkan) access_logarahan dengan format log kustom:

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

Setelah memulai ulang nginx, log muncul seperti:

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