必须开启SSLProxyCheckPeerExpire on,因为默认不检查后端证书有效期,仅SSLProxyVerify require无法拒绝已过期证书;需配合SSLProxyEngine on、SSLProxyVerify require和SSLProxyCheckPeerName on四者同时生效,否则校验不触发。

SSLProxyCheckPeerExpire on 是 Apache mod_ssl 中用于在反向代理连接后端 HTTPS 服务时,强制检查其证书是否在有效期内的关键指令。它不单独起作用,必须与 SSLProxyVerify require 和 SSLProxyCheckPeerName on 配合使用,否则校验逻辑不会触发。
为什么必须开启 SSLProxyCheckPeerExpire
后端服务若使用自签名、内网 CA 签发或长期未轮换的证书,极易出现过期问题。Apache 默认不检查有效期(即使开了 SSLProxyVerify require,也只校验证书链和签名,不主动拒绝已过期证书)。开启该指令后,只要后端返回的证书 Not After 时间早于当前服务器时间(允许约 ±5 分钟误差),连接将立即中止,返回 502 Bad Gateway,并在 error_log 中记录类似:
SSL Proxy: Peer certificate has expired正确启用的最小必要配置
仅写 SSLProxyCheckPeerExpire on 不够,必须确保以下四点同时满足:
- SSLProxyEngine on —— 启用代理模式下的 HTTPS 客户端能力
- SSLProxyVerify require —— 激活完整证书链校验(含签名、吊销等),是 Expire 检查的前提
- SSLProxyCheckPeerName on —— 当前唯一有效的主机名校验开关(SSLProxyCheckPeerCN 已废弃)
- SSLProxyCheckPeerExpire on —— 显式启用有效期强制检查
常见失败原因与修复
启用后出现 502 或连接重置,往往不是配置语法错误,而是环境偏差:
- 后端服务器时间不准:误差超过 5 分钟即被拒绝。建议统一用 NTP 同步所有服务节点时间
-
Apache 本地时间错误:宿主机系统时间跳变或未同步,也会导致误判。运行
date确认时间准确 - 证书尚未生效(Not Before 过晚):SSLProxyCheckPeerExpire 同时检查 Not Before 和 Not After,若后端证书设置了未来生效时间,也会失败
-
日志中无明确提示:错误信息极简,需结合
tail -f /var/log/apache2/error.log实时观察,避免只看响应码
调试建议:快速确认是否生效
临时部署一个已过期的测试证书到后端服务(如用 OpenSSL 生成 Not After 设为昨天的证书),然后发起请求:
- 若返回 502 且 error_log 出现 Peer certificate has expired → 配置生效
- 若返回 200 或 500 → 检查是否漏了 SSLProxyVerify require 或 SSLProxyEngine on
- 若返回 502 但日志只有 SSL handshake failed → 可能是 CA 证书路径错误或权限不足,先排除信任链问题


















