Apache启用OCSP Stapling需同时配置SSLUseStapling on、SSLStaplingCache(如"shmcb:/var/run/apache2/stapling-cache(128000)")和SSLUseStaplingWhenClientProvidesBuffer on,并确保SSLCertificateChainFile指向含完整中间证书的PEM文件,否则因无法验证OCSP响应签名而静默失败。

Apache 的 SSLUseStapling 不是“开启 OCSP 在线证书查询”,而是启用 OCSP 装订(stapling)——即服务器主动获取并缓存 OCSP 响应,再在 TLS 握手时一并发送给客户端。客户端不再自己查 OCSP 服务器。
为什么 SSLUseStapling on 后浏览器仍不显示 OCSP 响应?
常见现象:配置了 SSLUseStapling on,但用 openssl s_client -connect example.com:443 -status 测试时,输出里没有 OCSP response: 或提示 OCSP response: no response sent。
- 最常被忽略的是
SSLCertificateChainFile缺失或路径错误 —— Apache 需要中间证书才能验证 OCSP 响应签名,没它就拒绝装订 -
SSLUseStaplingWhenClientProvidesBuffer on是必要配套项(尤其 Apache ≥ 2.4.37),否则部分客户端 TLS 扩展协商失败,服务器干脆不发 stapling 数据 - OCSP 响应缓存默认由 Apache 内部内存缓存(
ssl_stapling_cache类似机制,但 Apache 不暴露配置项),不依赖外部文件;但若中间证书链不完整,缓存根本不会建立 - CA 的 OCSP 服务器不可达(如防火墙拦截、DNS 解析失败、OCSP URL 被墙)会导致首次 stapling 失败,后续请求会静默跳过,不会报错日志
SSLUseStapling 必须搭配的三项配置
只写 SSLUseStapling on 几乎一定失败。以下三者缺一不可:
-
SSLCertificateChainFile:必须指向包含**全部中间证书**的 PEM 文件(顺序为:中级 → 更高级,不能含根证书);例如 Let's Encrypt 用户应使用fullchain.pem而非cert.pem -
SSLUseStaplingWhenClientProvidesBuffer on:Apache 2.4.37+ 强制要求,用于兼容 TLS 1.3 和现代客户端的 OCSP 扩展协商 -
SSLStaplingCache:必须显式声明缓存位置和大小,例如SSLStaplingCache "shmcb:/var/run/apache2/stapling-cache(128000)";路径需 Apache 进程可读写,且目录存在
如何验证 OCSP stapling 实际生效?
别只信配置文件语法正确,得看真实握手数据:
- 用 OpenSSL 测试:
openssl s_client -connect example.com:443 -status -servername example.com 2>&1 | grep -A 17 "OCSP response"。成功时会看到 Base64 编码的响应体,以及Response verify OK - 检查 Apache 错误日志:
grep -i stapling /var/log/apache2/error.log。常见报错如stapling_get_response: responder error表示 OCSP 查询失败,stapling_callback: no issuer cert表示中间证书链缺失 - 注意
-servername参数:SNI 域名必须与虚拟主机配置一致,否则可能命中默认站点,返回空 stapling 响应
容易被忽略的兼容性细节
即使配置全对,某些组合仍会静默失效:
- Let’s Encrypt 的 OCSP URL(如
http://ocsp.int-x3.letsencrypt.org/)是 HTTP 协议,Apache 必须能出站访问该地址(部分内网环境 DNS 或代理策略会拦截) - 如果用了自定义 CA 或私有 PKI,
SSLStaplingResponder必须显式指定 OCSP 服务地址,且SSLCertificateChainFile中的 issuer 必须与 OCSP 响应签名证书匹配 - Apache 2.4.30 之前版本不支持
SSLUseStaplingWhenClientProvidesBuffer,此时需确保客户端明确支持 OCSP 扩展(旧版 Android/iOS 浏览器可能不触发) -
SSLSessionTickets Off不影响 stapling,但建议关闭——避免 session ticket 泄露 OCSP 响应有效期信息
真正卡住的地方往往不是配置项写错,而是中间证书链不完整、OCSP 服务器连不通、或缓存路径权限不对。每次改完配置,先 apache2ctl configtest,再 tail -f /var/log/apache2/error.log 看启动时有没有 stapling 相关警告。


















