我如何让nginxlogin使用的SSL / TLS协议和密码套件?

我的目标是确保连接到我的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_formatconfiguration中。

所有与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"