我的目标是确保连接到我的nginx的客户端的安全。 我正在遵循Mozilla的指南,在我的nginx安装中正确configurationTLS ,但是我没有概述在实际中使用的实际协议/密码套件。
我现在拥有的:
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; }
有了这个,我想logging哪个SSL协议被用于连接,以及在客户机/服务器协商后select了哪个密码组。 例如:
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或其他相关安全支持技术的自动化机器。
如何configurationnginx来logging这些信息?
将$ssl_cipher
添加到您的log_format
configuration中。
所有与SSL相关的variables请参考http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables 。
在http
上下文中定义一个自定义的log_format
(例如/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"