SSLProxyCheckPeerExpire on 作用是在TLS握手阶段检查后端证书的Not Before/Not After有效期,但仅与SSLProxyVerify require配合时生效,且依赖系统时间(允许≤5分钟漂移)。

SSLProxyCheckPeerExpire on 是什么行为
SSLProxyCheckPeerExpire on 不是独立生效的指令,它必须和 SSLProxyVerify require 配合使用,否则完全不触发校验。它的作用是在 TLS 握手阶段检查后端 HTTPS 服务返回的证书是否在有效期内——但仅检查「Not Before」和「Not After」字段,不检查 OCSP 或 CRL 吊销状态。
为什么开了 on 却没报错?常见失效原因
根本原因是:Apache 默认关闭该检查,且它依赖底层 OpenSSL 的时间判断逻辑。以下情况会导致它“看似没生效”:
-
SSLProxyVerify没设为require—— 只写SSLProxyCheckPeerExpire on无效 - 后端服务器系统时间偏差 ≤5 分钟:OpenSSL 默认允许最多 5 分钟时钟漂移,超了才拒绝;误差在阈值内仍会放行
- 代理配置中漏了
SSLProxyEngine on:整个 SSL 代理功能未启用,所有相关指令都被忽略 - 日志级别太低(
LogLevel warn或更低):证书过期只记info级日志,error_log 里看不到提示
如何验证它真正在起作用
别靠猜,用最直接的方式触发失败:
- 临时把后端服务的系统时间调快 1 年(如
date -s "2027-01-01"),再重启后端 HTTPS 服务 - 确保 Apache 配置含:
SSLProxyVerify require、SSLProxyCheckPeerExpire on、SSLProxyEngine on - 发起请求,观察是否返回
502 Bad Gateway,并检查 error_log 是否有类似SSL Proxy: Peer certificate expired的记录 - 恢复后端时间后重试,应恢复正常
注意:SSLProxyCheckPeerExpire 和 SSLProxyCheckPeerName 是正交开关,一个管时间、一个管域名,必须分开确认。
生产环境必须同步注意的点
这个检查本身轻量,但容易被忽略的是它和系统时间强耦合。Kubernetes Pod、Docker 容器、云主机都可能因 NTP 配置缺失或 drift 导致证书“突然过期”。不要只盯着证书文件有效期,更要监控后端节点的 ntpq -p 输出和 adjtimex -p 偏差值。一旦发现时钟漂移 >60 秒,SSLProxyCheckPeerExpire on 就会开始误杀合法连接。


















