mod_log_config无法直接记录TLS实际算法位数与套件全名,因其仅支持有限SSL变量(如%{SSL_CIPHER}x、%{SSL_CIPHER_USEKEYSIZE}x),不导出密钥交换曲线、签名算法等握手细节,需借助Nginx代理、OpenSSL调试日志或外部抓包分析。
虚拟主机无法直接通过 mod_log_config 记录 tls 加密请求的实际算法位数与套件名,因为 mod_log_config 本身不提供原生的 tls 握手细节变量(如密钥交换强度、对称加密位数、完整套件名称),这些信息不属于 apache 日志模块的标准字段。
为什么标准 mod_log_config 不支持
Apache 的 mod_log_config 只能记录由模块显式导出的环境变量或响应/请求属性。TLS 层的详细协商结果(例如 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、AES-256 的 256 位、ECDHE 密钥交换强度等)由 OpenSSL 或 BoringSSL 在 SSL/TLS 握手时确定,但 Apache 2.4 默认不将这些细节映射为可记录的 log format 变量。
即使启用 mod_ssl,它只提供有限的几个 SSL 环境变量(如 %{SSL_PROTOCOL}x、%{SSL_CIPHER}x、%{SSL_CIPHER_USEKEYSIZE}x),其中:
-
%{SSL_CIPHER}x可记录套件名称(如ECDHE-RSA-AES256-GCM-SHA384),但格式取决于 OpenSSL 版本和编译选项,不一定与 RFC 名称完全一致; -
%{SSL_CIPHER_USEKEYSIZE}x提供对称加密密钥长度(如 256),但不反映实际协商的密钥交换位数(如 ECDHE 使用的曲线强度); - 没有内置变量能输出“算法位数”(比如 RSA-2048、secp384r1)或标准化套件全名(RFC 7919 格式)。
可行的替代方案
若你确实需要记录完整 TLS 套件名及各算法位数,需组合使用以下方法:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
启用 mod_ssl 并使用基础 SSL 日志变量:在虚拟主机配置中添加自定义日志格式,例如:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{SSL_PROTOCOL}x %{SSL_CIPHER}x %{SSL_CIPHER_USEKEYSIZE}x" sslcombinedCustomLog /var/log/apache2/ssl_access.log sslcombined -
升级到 Apache 2.4.52+ 并启用 ssl_var_lookup(实验性):新版 Apache 引入了更细粒度的 SSL 变量(如
%{SSL_CIPHER_ALGKEYSIZE}x、%{SSL_CIPHER_EXPORT}x),但仍不包含 ECDHE 曲线名称或签名算法位数; -
改用 TLS 会话日志 + 外部解析(推荐):启用 OpenSSL 的
SSLSessionCache和SSLStaplingCache,配合openssl s_client -reconnect或 Wireshark 抓包分析;或部署mod_ssl的调试日志(LogLevel ssl:trace6),从中提取握手详情(性能开销大,仅限调试); -
前置代理方案(最实用):用 Nginx 或 Envoy 作为 TLS 终结点,在其 access_log 中使用
$ssl_cipher、$ssl_protocol、$ssl_curves、$ssl_session_reused等变量,Nginx 1.19.4+ 还支持$ssl_ciphers(客户端支持列表)和$ssl_client_fingerprint。
注意事项
即使获得套件名(如 ECDHE-ECDSA-AES128-GCM-SHA256),其隐含的位数需人工对照标准解读:
-
AES128→ 对称加密 128 位; -
ECDHE→ 椭圆曲线密钥交换,位数取决于曲线(如prime256v1≈ 256 位安全强度); -
ECDSA→ 签名算法,同样依赖曲线参数; - 无变量能自动输出 “secp384r1” 或 “x25519”,除非后端应用(如 PHP/Python)通过 OpenSSL 扩展主动读取并写入自定义 header 或日志。
不复杂但容易忽略:虚拟主机环境通常受限于服务商提供的 Apache 版本与模块集,多数共享主机甚至禁用 mod_ssl 的高级日志功能。真要审计 TLS 强度,建议在负载均衡器或反向代理层统一采集,而非依赖虚拟主机自身日志模块。

















