mod_log_config可记录TLS握手成功后的密码套件名(%{SSL_CIPHER}x)和对称密钥位数(%{SSL_CIPHER_USEKEYSIZE}x),但无法记录握手失败、ClientHello等中间过程;需启用mod_ssl且配置于HTTPS虚拟主机内。

Apache 的 mod_log_config 可以记录成功完成 TLS 握手后的加密位数和密码套件名称,但前提是已启用 mod_ssl,且请求实际走通了 HTTPS 连接。它无法记录握手失败、ClientHello 或协议协商过程中的中间状态。
确认基础依赖已就绪
确保以下条件满足,否则相关日志变量将为空或报错:
-
mod_ssl已加载:运行httpd -M | grep ssl或a2enmod ssl(Debian/Ubuntu)验证; - 虚拟主机启用了 SSL:配置中包含
SSLEngine on和有效证书; - 日志格式定义在 HTTPS 虚拟主机内,或至少作用于启用了 SSL 的
块中。
使用标准 SSL 日志变量
Apache 通过 %{}x 语法提供 OpenSSL 会话级变量,其中两个关键字段直接对应需求:
-
%{SSL_CIPHER}x:记录协商成功的完整密码套件名,例如ECDHE-ECDSA-AES128-GCM-SHA256; -
%{SSL_CIPHER_USEKEYSIZE}x:记录对称加密的实际有效密钥位数,例如128或256(注意:不是算法最大支持位数,而是本次会话实际使用的)。
配置示例(推荐写法)
在 Apache 配置文件(如 /etc/apache2/sites-enabled/ssl.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
重启 Apache 后,日志行末尾会出现类似 ECDHE-RSA-AES256-GCM-SHA384 256 的内容。
注意事项与常见问题
这些字段只在 TLS 握手成功、HTTP 请求进入处理流程后才可用。若出现空值或短横线(-),通常说明:
- 该请求是 HTTP(非 HTTPS),变量不可用;
- TLS 握手失败(如协议不匹配、证书错误、SNI 不支持),请求根本未到达日志模块;
- 配置未生效于正确的虚拟主机,或
LogFormat定义位置不对(需在 SSL 主机块内或全局生效)。
如需排查握手失败原因,请查看 ErrorLog 并设置 LogLevel ssl:debug,而非依赖访问日志。











