必须启用SSLProxyCheckPeerExpire on并配合SSLProxyVerify require,才能在TLS握手阶段校验后端HTTPS证书有效期,否则即使证书过期仍可能转发请求导致安全隐患。

要防止 Apache 反向代理连接后端 HTTPS 服务时因证书过期导致中断,必须启用 SSLProxyCheckPeerExpire on,它会在 TLS 握手阶段主动检查后端证书是否在有效期内。该指令不单独生效,需与 SSLProxyVerify require 配合使用,否则校验逻辑被跳过。
SSLProxyCheckPeerExpire 的作用和触发条件
该指令控制 Apache 是否验证后端服务器证书的 Not Before 和 Not After 时间字段。只有当 SSLProxyVerify 设为 require(或 optional)时,此检查才会实际执行。若设为 none,即使开启此选项也无效果。
- 检查发生在 TCP 连接建立后的 TLS 握手阶段,失败直接返回 502 Bad Gateway
- 默认值是 off,即不检查有效期 —— 这意味着即使后端证书已过期数月,代理仍可能“成功”转发请求(前提是其他校验也关闭)
- 时间判断以 Apache 所在服务器的系统时间为基准,误差超过 5 分钟会导致误判
正确启用的必要配置组合
单开 SSLProxyCheckPeerExpire on 不够,必须形成完整校验链:
- SSLProxyEngine on:启用代理模式下的 HTTPS 客户端能力
- SSLProxyVerify require:激活证书链、签名、吊销及有效期等全部基础校验
- SSLProxyCheckPeerExpire on:在 require 基础上显式启用有效期检查
- SSLProxyCACertificateFile /path/to/ca-bundle.crt:提供可信 CA 根证书,否则 verify require 会因找不到信任锚而失败
常见失效原因与排查方法
启用后仍出现连接失败,大概率不是配置遗漏,而是环境偏差:
-
Apache 服务器时间不准:用
date -R检查时区和秒级精度,与 NTP 同步;后端服务器时间也需校准 - CA 证书未加载或路径错误:SSLProxyVerify require 依赖 CA 文件,若文件缺失或权限不足(如 www-data 无法读取),日志只报 “SSL handshake failed”,不会提示“证书过期”
-
后端证书本身已过期:用
openssl x509 -in cert.pem -text -noout | grep -A1 "Validity"直接查看;或用openssl s_client -connect backend:443 -CAfile ca-bundle.crt模拟握手并观察 Verify return code
调试建议:先验证再上线
不要直接改生产配置。可临时加一行日志辅助判断:
- 在虚拟主机中添加:
LogLevel ssl:trace3 proxy:debug - 触发一次请求后查看 error_log,搜索关键词 peer certificate expired 或 certificate has expired
- 若没看到相关提示,说明 SSLProxyCheckPeerExpire 实际未触发 —— 回头检查 SSLProxyVerify 是否为 require,以及 CA 路径是否生效











