Apache需启用mod_ssl并使用%{SSL_PROTOCOL}e变量记录TLS版本,如TLSv1.2或TLSv1.3,配合LogFormat与CustomLog写入日志,未HTTPS请求或配置错误时该字段为空或显示短横线。

Apache 本身不直接在访问日志中记录 TLS/SSL 协议版本(如 TLSv1.2、TLSv1.3),因为 SSL/TLS 握手发生在 HTTP 层之下,标准 %r、%{Referer}i 等日志格式变量无法捕获该信息。但可通过启用 mod_ssl 提供的专用环境变量,将客户端协商使用的 TLS 版本写入日志。
启用 SSL 环境变量记录
Apache 的 mod_ssl 模块导出多个以 SSL_ 开头的环境变量,其中 %{SSL_PROTOCOL}e 就表示本次连接实际协商达成的协议版本(例如 TLSv1.2 或 TLSv1.3)。
- 确保已加载
mod_ssl:检查httpd.conf或mods-enabled/ssl.load中存在LoadModule ssl_module modules/mod_ssl.so - 在虚拟主机或主配置中定义自定义日志格式,包含该变量:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{SSL_PROTOCOL}e %{SSL_CIPHER}e" ssl_combined
- 然后在
<VirtualHost *:443>块中启用该格式:
CustomLog logs/ssl_access.log ssl_combined
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
验证协议版本是否生效
重启 Apache 后,发起 HTTPS 请求(如 curl -kI https://yoursite.com),再查看日志文件(如 logs/ssl_access.log)。正常情况下,每行末尾会追加类似 TLSv1.3 ECDHE-ECDSA-AES128-GCM-SHA256 的字段,分别对应协议版本和加密套件。
- 若显示为空或
-,说明该连接未走 HTTPS(比如被重定向前的 HTTP 请求),或虚拟主机未正确匹配 443 端口 - 若始终显示旧版本(如 TLSv1),需检查
SSLProtocol配置是否禁用了新协议,或客户端本身不支持
补充:获取更详细的 TLS 信息
除协议版本外,还可一并记录以下常用 SSL 变量:
-
%{SSL_CIPHER}e:实际使用的加密套件名称 -
%{SSL_SERVER_S_DN_CN}e:服务器证书中的 Common Name -
%{SSL_CLIENT_VERIFY}e:客户端证书验证状态(用于双向认证场景) -
%{SSL_SECURE_RENEGOTIATION}e:是否启用安全重协商
这些变量均需在启用 SSLEngine on 的 HTTPS 虚拟主机内才有效。

















