Nginx 通过 $ssl_protocol 和 $ssl_cipher 变量实时记录 HTTPS 协议版本与加密套件,实现轻量级加密强度审计;需禁用 TLSv1.0/1.1、弱套件及非前向安全交换,推荐 TLSv1.2+ 与强 cipher 配置。

直接用 Nginx 的 $ssl_protocol 和 $ssl_cipher 变量,就能在每条访问日志里留下真实连接所用的协议版本和加密套件——这是最轻量、最实时的 HTTPS 加密强度审计方式。
明确你要盯住的合规红线
不同场景要求略有差异,但核心底线基本一致:
- 协议层:禁用 TLSv1.0 和 TLSv1.1(PCI DSS、等保2.0、Azure 等主流标准均强制)
- 套件层:禁用含 NULL、EXPORT、RC4、DES、MD5、SHA1 的套件
- 密钥交换:优先启用前向安全(PFS),即套件中必须含 ECDHE 或 DHE
- 对称加密:最低要求 AES-128 或 ChaCha20,密钥长度 ≥128 bit
在 Nginx 中开启记录能力
无需额外模块或代理,只需修改日志格式并重载配置:
- 在
http块中定义带这两个变量的日志格式,例如:log_format tls_audit '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $ssl_protocol $ssl_cipher'; - 将该格式应用到你的
access_log指令中 - 执行
nginx -t && nginx -s reload生效
之后每条 HTTPS 请求日志末尾都会追加类似 TLSv1.2 ECDHE-ECDSA-AES256-GCM-SHA384 或 TLSv1.0 RC4-SHA 这样的字段。
用命令快速筛出风险连接
日志有了,下一步就是高效识别问题。常用 grep 组合示例:
- 查老旧协议:
grep -E 'TLSv1\.0|TLSv1\.1' access.log - 查弱套件:
grep -i -E '(rc4|des|export|null|md5|sha1)' access.log - 查缺失前向安全(仅限 TLSv1.2+):
grep 'TLSv1\.2' access.log | grep -v -E '(ECDHE|DHE)' - 查明文连接($ssl_protocol 为空):
awk '$12 == "-" {print}' access.log(假设 $ssl_protocol 是第12字段)
定位问题后闭环处理
发现不合规连接不能只归档,要追因施策:
- 结合
$remote_addr和$http_user_agent判断是旧设备(如 WinXP IE6)、嵌入式终端,还是恶意扫描器 - 若大量 TLSv1.0 出现在特定 IP 段,可能是客户端不支持 SNI 导致降级
- 确认是否真需兼容——多数业务可安全关闭 TLSv1.0/1.1;若必须保留,至少把弱套件从
ssl_ciphers中剔除 - 加固建议:Nginx 配置中显式声明
ssl_protocols TLSv1.2 TLSv1.3;,并使用强套件如TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256


















