使用されたSSL / TLSプロトコルと暗号スイートをnginxに記録させるにはどうすればよいですか?


24

私の目標は、nginxに接続するクライアントに適切なセキュリティを確保することです。私はnginxインストールでTLSを適切設定するためにMozillaのガイドに従いますが、実際に使用されている実際のプロトコル/暗号スイートの概要はありません。

私が今持っているもの:

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を設定するにはどうすればよいですか?

回答:


43

構成に追加$ssl_cipherしますlog_format

すべてのSSL関連変数については、http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variablesを参照してください。

コンテキストでカスタム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"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.