需启用mod_ssl并使用%{SSL_CIPHER}x和%{SSL_CIPHER_USEKEYSIZE}x记录:前者输出协商套件名(如ECDHE-RSA-AES128-GCM-SHA256),后者输出对称密钥有效位数(如128),仅TLS握手成功后有效。

要在 Apache 中通过 mod_log_config 记录每个请求的加密位数与套件名,前提是已启用 mod_ssl 且 TLS 握手成功完成。这些信息属于 SSL/TLS 会话上下文,需使用 %{}x 语法访问特定变量。
确认 mod_ssl 已启用并正常工作
记录 SSL 握手信息依赖 mod_ssl 提供的上下文变量。若未启用或配置错误,%{}x 字段将为空或报错:
- 运行
apachectl -M | grep ssl或a2enmod ssl(Debian/Ubuntu)确认模块已加载 - 检查虚拟主机中是否配置了有效的 SSL 证书和
SSLEngine on - 用
curl -I --insecure https://yoursite.com测试 HTTPS 可达性,确保握手能完成
使用 %{}x 语法记录加密套件与密钥长度
mod_log_config 支持通过 %{SSL_CIPHER}x 和 %{SSL_CIPHER_USEKEYSIZE}x 获取协商后的加密套件名称与对称密钥有效位数:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
%{SSL_CIPHER}x:输出完整套件名,如ECDHE-ECDSA-AES256-GCM-SHA384或TLS_AES_256_GCM_SHA384(TLS 1.3) -
%{SSL_CIPHER_USEKEYSIZE}x:输出对称加密密钥的实际有效位数,如256、128;注意这不是协商最大值,而是本次连接实际使用的位数 - 这两个变量仅在 TLS 握手成功后可用;未建立 HTTPS 连接时(如 HTTP 请求),值为空
配置自定义日志格式并启用
在 Apache 配置中(如 httpd.conf 或虚拟主机内)添加:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{SSL_CIPHER}x %{SSL_CIPHER_USEKEYSIZE}x" ssl_cipher_log
CustomLog /var/log/apache2/ssl-access.log ssl_cipher_log
日志示例:
192.168.1.50 - - [28/Apr/2026:13:02:15 +0800] "GET /api/data HTTP/1.1" 200 342 "-" "Mozilla/5.0" ECDHE-RSA-AES128-GCM-SHA256 128注意事项与常见问题
这些字段反映的是客户端与 Apache 之间 TLS 层的实际协商结果,不经过 Java 应用(如 Tomcat)处理:
- 若 Apache 仅作反向代理且 SSL 终止在更前端(如 Nginx 或负载均衡器),则
%{}x变量不可用,因为 Apache 未参与 TLS 握手 - HTTP/2 或 HTTP/3 不影响这些字段——只要 Apache 执行了 SSL 终止,它们仍可正常记录
- 日志中若某字段为短横线
-,通常表示该请求非 HTTPS,或 TLS 握手失败(如证书校验不通过、ALPN 协商异常) - 不建议直接记录
%{SSL_PROTOCOL}x替代套件信息,因协议版本(如 TLSv1.3)本身不体现加密强度

















