apache的mod_log_config无法记录tls握手耗时,因其仅在tls握手成功且http请求进入处理流程后才工作;握手失败时无日志,需用tcpdump/wireshark抓包分析clienthello到serverhello时间差,或通过openssl s_client、sslscan等工具测量。

Apache 的 mod_log_config 无法记录 TLS 握手耗时,因为它根本接触不到握手过程。
握手发生在 TCP 连接建立之后、HTTP 请求到达之前,而 mod_log_config 只在请求进入 Apache 处理流程(即 TLS 已成功完成)后才开始工作。一旦握手失败,连接直接断开,日志模块完全无感知。
所以,你不能用 %D、%T 或任何 %{...}x 变量获取“握手耗时”——这些值反映的是 Apache 接收请求到发出响应头的时间,不包含 ClientHello 到 ServerHello-Completed 的毫秒级延迟。
要分析 TLS 握手阶段的网络瓶颈,需换用底层可观测工具:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
tcpdump + Wireshark / tshark
抓取 TLS 流量,过滤tls.handshake.type == 1(ClientHello)到tls.handshake.type == 2(ServerHello)之间的时间差。这是最准确的方式,能定位是客户端慢、网络延迟高、还是服务端响应卡顿。-
openssl s_client -debug(手动测试)
执行:openssl s_client -connect example.com:443 -servername example.com 2>&1 | grep "SSL handshake"
查看输出中
SSL handshake has read XXX bytes and written YYY bytes前后的系统时间戳,粗略估算单次握手耗时。 专用 TLS 代理或监控探针
如sslscan、ssllabs-devicescan、或 Prometheus +blackbox_exporter配合tls模块,可定期采集握手延迟、协议协商结果、SNI 支持等指标。-
Apache 错误日志辅助定位(非耗时,但可查瓶颈原因)
若大量握手失败,检查error_log中是否高频出现:-
no shared cipher→ 客户端与服务端密码套件无交集 -
unknown protocol→ TLS 版本不兼容(如只支持 TLSv1.3,但客户端仅支持 v1.2) -
SSL_accept failed→ 常见于证书加载失败、私钥权限错误、OCSP Stapling 超时
-
注意:提升 LogLevel ssl:debug 可看到 ClientHello 的协议版本、SNI、支持的加密套件列表,有助于比对客户端能力。
如果目标是优化而非测量,可重点配置:
- 启用 TLSv1.3(减少 RTT)
- 配置
SSLSessionCache shmcb:/path/to/cache(512000)加速会话复用 - 开启
SSLUseStapling on缩短证书验证链耗时
这些改动能显著降低实际用户感知的 TLS 延迟,但它们的效果必须通过外部抓包或探针验证,而非 Apache 日志。










