Nginx 不提供完整 SSL 握手过程日志,但可通过 $ssl_protocol、$ssl_cipher、$ssl_session_reused 等内置变量记录已协商的 TLS 版本、加密套件及会话复用状态,并在 listen 443 ssl 的 server 块中结合自定义 log_format 和 access_log 实现安全审计与客户端能力分析。

Nginx 本身不直接提供记录完整 SSL 握手过程(如 ClientHello、ServerHello、密钥交换等)的内置变量,但可通过一组与 TLS/SSL 相关的 内置变量 获取已协商完成的握手结果信息,并结合 log_format 和 access_log 记录到日志中。这些变量在 SSL 握手成功后才有效,适用于调试兼容性、审计加密强度或分析客户端 TLS 能力。
常用 SSL 相关内置变量说明
以下变量在启用了 HTTPS 的 server 块中可用,需确保配置了有效的 ssl_certificate 和 ssl_certificate_key:
-
$ssl_protocol:协商使用的 TLS 协议版本,例如TLSv1.2或TLSv1.3 -
$ssl_cipher:协商使用的加密套件名称,例如ECDHE-ECDSA-AES256-GCM-SHA384 -
$ssl_session_id:当前连接的 TLS 会话 ID(十六进制字符串),可用于识别复用会话 -
$ssl_session_reused:会话是否被复用,值为.r(复用)或.(新建) -
$ssl_client_cert:当启用双向认证(mTLS)且客户端提供了证书时,该变量包含 PEM 格式证书(通常需配合ssl_verify_client on使用) -
$ssl_client_issuer_dn、$ssl_client_subject_dn:分别表示客户端证书的颁发者和主题 DN(需开启验证)
配置示例:记录关键 SSL 握手信息
在 http 块中定义自定义日志格式,包含 SSL 变量:
log_format ssl_info '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_user_agent" "$http_referer" '
'$ssl_protocol $ssl_cipher $ssl_session_reused';
access_log /var/log/nginx/ssl_handshake.log ssl_info;
然后确保对应 server 块启用了 SSL:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 其他配置...
}
重启 Nginx 后,访问日志中将出现类似以下条目:
203.0.113.42 - - [10/Jan/2025:14:22:33 +0000] "GET / HTTP/1.1" 200 1234 "curl/8.6.0" "-" TLSv1.3 ECDHE-ECDSA-AES128-GCM-SHA256 .
注意事项与限制
- 这些变量仅在 SSL 握手成功后填充;若握手失败(如协议不支持、证书错误、SNI 不匹配),请求甚至不会到达 access_log 阶段,因此无法记录失败原因
- 要捕获握手失败详情,需启用 Nginx 错误日志(
error_log ... debug),并编译时启用--with-debug(生产环境慎用) -
$ssl_client_cert等变量内容较长,写入 access_log 可能显著增大日志体积,建议仅在调试时启用,或使用map提取摘要(如证书指纹) - TLS 1.3 中部分传统字段(如
$ssl_session_id)语义变化,实际值可能为空或固定,推荐优先依赖$ssl_protocol和$ssl_cipher
进阶:按 TLS 版本或套件做条件日志
可结合 map 指令对 SSL 变量分类,便于后续分析:
map $ssl_protocol $tls_level {
default "unknown";
"TLSv1.1" "legacy";
"TLSv1.2" "modern";
"TLSv1.3" "current";
}
log_format tls_classified '$remote_addr $tls_level $ssl_cipher "$request"';
这样可在日志中快速识别使用弱协议的客户端,辅助安全策略优化。


















