跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

怎么在Apache中通过mod_log_config记录每个请求的SSL加密位数与套件名

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
)中添加: Apache 2.4.62 PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。 下载
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
,而非依赖访问日志。

相关文章