Apache中SSLUseStapling启用的是OCSP装订(服务器主动获取、缓存并握手时发送响应),而非客户端在线查询;必须同时配置SSLUseStapling on、SSLStaplingCache(如shmcb:/var/run/apache2/stapling-cache(128000))和SSLCertificateChainFile(指向含完整中间证书的PEM文件),缺一不可。

Apache 中的 SSLUseStapling 并不是开启“OCSP 在线证书查询”,而是启用 OCSP 装订(Stapling)——即服务器主动向 CA 获取 OCSP 响应、本地缓存,并在 TLS 握手时直接把响应“装订”发给客户端。客户端无需再单独连接 CA 查询,从而降低延迟、保护隐私、减轻 CA 压力。
必须配齐的三项核心配置
只写 SSLUseStapling on 会失败,Apache 启动报错 SSLStaplingCache not configured。以下三者缺一不可:
- SSLUseStapling on:启用装订功能,但只是开关,不独立生效
-
SSLStaplingCache:指定缓存位置与大小,例如
SSLStaplingCache shmcb:/var/run/apache2/stapling-cache(128000)
推荐用shmcb(共享内存),路径需 Apache 进程可读写;数字单位是字节,不能写128k或128KB -
SSLCertificateChainFile:必须指向含完整中间证书的 PEM 文件(如 Let’s Encrypt 的
fullchain.pem),顺序为中级 → 更高级,不含根证书;缺少它会导致 OCSP 响应签名无法验证,装订静默失败
容易遗漏的关键配套项
尤其在 Apache ≥ 2.4.37 环境下,以下配置不加,客户端可能收不到 stapling 数据:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- SSLUseStaplingWhenClientProvidesBuffer on:启用 TLS 扩展协商缓冲区支持,现代浏览器(尤其是 TLS 1.3)依赖此项
- 确保虚拟主机块(
<VirtualHost *:443>)内同时包含SSLUseStapling和SSLUseStaplingWhenClientProvidesBuffer,不要误写在 HTTP 块或全局上下文里 - 检查中间证书是否含
Authority Information Access(AIA)扩展中的 OCSP URI,可用命令验证:openssl x509 -in chain.pem -noout -text | grep -A1 "OCSP"
验证是否真正生效
配置正确 ≠ 实际工作。需通过真实握手检测:
- 运行命令:
openssl s_client -connect example.com:443 -status -servername example.com 2>&1 | grep -A 17 "OCSP response" - 成功时输出含:
OCSP Response Status: successful (0x0)Response verify OK
以及 Base64 编码的响应体 - 若显示
OCSP response: no response sent,常见原因:
– 防火墙阻止 Apache 出站访问 OCSP 地址(如http://ocsp.digicert.com)
– DNS 解析失败(Apache 内部不走系统 resolver,需确保网络连通)
– 日志中无错误,但首次获取失败后会静默跳过,建议检查/var/log/apache2/error.log是否有 stapling 相关 warn
权限与路径注意事项
缓存路径看似简单,实则高频出错:
-
/var/run/下目录由 systemd 管理,重启自动清空,适合存放临时缓存;若改用/tmp/,需确认 SELinux/AppArmor 未拦截 - 确保父目录存在且 Apache 用户(如
www-data或apache)有读写权限:sudo mkdir -p /var/run/apache2sudo chown www-data:www-data /var/run/apache2 - 避免使用
dbm类型缓存(已废弃、不支持并发),仅用shmcb或gdbm(后者需额外模块)

















