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

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

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

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 использовался для подключения, и какой ciphersuite был выбран после согласования клиента /сервера. Например:.

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 для регистрации этой информации?

21 голос | спросил gertvdijk 13 PM00000030000004031 2014, 15:57:40

1 ответ


34

Добавьте $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 13 PM00000040000004731 2014, 16:43:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132