Nginx'in kullanılan SSL / TLS protokolünü ve şifreli şifreyi kaydetmesine nasıl izin verebilirim?


24

Amacım, nginx cihazıma bağlanan müşteriler için uygun güvenliği sağlamak. Nginx kurulumumda TLS'yi düzgün bir şekilde yapılandırmak için Mozilla'nın rehberini takip ediyorum , ancak pratikte kullanılan gerçek protokoller / şifreler hakkında genel bir bilgi yok.

Şimdi neyim var:

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

Bununla, bir bağlantı için hangi SSL protokolünün kullanıldığını ve müşteri / sunucu anlaşmasından sonra hangi şifrenin seçildiğini kaydetmek istiyorum. Örneğin:

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

için

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"

Bu sayede, PFS'yi ya da diğer ilgili güvenlik sağlayan teknolojileri desteklemeyen eski tarayıcıları veya otomatik makineleri kullanan istemcileri hızlı bir şekilde tanımlayabilirim.

Nginx'i bu bilgiyi günlüğe kaydedecek şekilde nasıl yapılandırabilirim?

Yanıtlar:


44

Ekle $ssl_ciphersizin için log_formatyapılandırma.

SSL ile ilgili tüm değişkenler için http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables adresine bakın .

Örnek

Özel bir tanımla log_formatiçinde http(örneğin bağlamda /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"';

Yukarıdakiler combinedek bir '$ssl_protocol/$ssl_cipher 'satır içeren varsayılan formata dayanmaktadır .

Sonra bir serverözelliğe (SSL etkinken) access_logözel log formatlı bir direktif ekleyin :

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

Nginx'i yeniden başlattıktan sonra, günlükler şöyle görünür:

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"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.