Как я могу позволить nginx регистрировать используемый протокол SSL / TLS и ciphersuite?

24

Моя цель - обеспечить надлежащую безопасность для клиентов, подключающихся к моему nginx. Я следую руководству Mozilla по правильной настройке TLS на моей установке nginx, но у меня нет обзора реальных протоколов / наборов шифров, используемых на практике.

Что у меня сейчас:

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

В связи с этим я хотел бы записать, какой протокол SSL использовался для соединения и какой набор шифров был выбран после согласования клиент / сервер. Например:

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

в

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"

Таким образом, я могу быстро идентифицировать клиентов, которые используют устаревшие браузеры или автоматизированные машины, которые не поддерживают PFS или другие соответствующие технологии обеспечения безопасности.

Как мне настроить nginx для регистрации этой информации?

gertvdijk
источник

Ответы:

44

Добавьте $ssl_cipherк вашей log_formatконфигурации.

Обратитесь к http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables для всех переменных, связанных с SSL.

пример

Определите обычай log_formatв httpконтексте (например /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"';

Вышесказанное основано на combinedформате по умолчанию с дополнительной '$ssl_protocol/$ssl_cipher 'строкой.

Затем добавьте в serverконтекст (с включенным SSL) access_logдирективу с пользовательским форматом журнала:

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

После перезапуска nginx журналы выглядят так:

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
источник