apache启用ocsp stapling必须同时配置sslusestapling on、sslstaplingcache shmcb:/var/run/apache2/stapling-cache(128000)和sslcertificatechainfile指向完整中间证书链的pem文件,缺一不可;apache 2.4.37+还需添加sslusestaplingwhenclientprovidesbuffer on。

开启 SSLUseStapling 不是简单加一行 SSLUseStapling on 就能生效。它本质是让 Apache 主动获取、缓存并“装订”OCSP 响应到 TLS 握手过程,从而避免客户端直连 CA 查询状态。但必须三者齐备:启用指令、有效缓存、完整证书链,缺一不可。
必须配齐的三项核心配置
单独写 SSLUseStapling on 会导致 Apache 启动失败或静默不工作。以下三项需同时出现在同一 <virtualhost></virtualhost> 块中(仅 HTTPS 的 443 端口块):
- SSLUseStapling on:明确启用 OCSP 装订功能
-
SSLStaplingCache shmcb:/var/run/apache2/stapling-cache(128000):使用共享内存缓存(
shmcb),路径需存在且 Apache 进程可读写;大小单位必须是纯数字(如128000),不能写128k或128KB -
SSLCertificateChainFile /path/to/fullchain.pem:必须指向含全部中间证书的 PEM 文件(如 Let’s Encrypt 的
fullchain.pem),顺序为中级证书在前、更高级别在后,不含根证书;缺失或错误将导致 OCSP 响应签名验证失败,装订被跳过
Apache 2.4.37+ 必须添加的兼容项
现代 Apache 版本(≥2.4.37)要求显式启用客户端缓冲协商支持,否则部分 TLS 1.3 客户端或新版浏览器会拒绝接收 stapled 数据:
-
SSLUseStaplingWhenClientProvidesBuffer on:加在同个虚拟主机内,与上述三项并列;不加此项,
openssl s_client -status测试可能显示no response sent,但无错误日志提示
验证是否真正生效的实操方法
配置正确 ≠ 实际工作。必须通过真实 TLS 握手抓取响应数据:
- 运行命令:
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及Next Update时间戳 - 失败常见原因:
– 防火墙阻止 Apache 出向访问 CA 的 OCSP 地址(如http://ocsp.digicert.com)
– 中间证书缺失或 AIA 扩展中无 OCSP URI(可用openssl x509 -in cert.pem -text -noout | grep -A1 "Authority Information Access"检查)
–SSLStaplingCache路径权限不足或目录不存在
权限与路径细节避坑指南
看似简单的路径配置,实际最容易出错:
-
/var/run/下的缓存文件由 systemd 管理,重启自动清理,推荐使用;若改用/tmp/,需确认 SELinux/AppArmor 未拦截 Apache 写入 - 缓存路径所在目录(如
/var/run/apache2/)必须提前创建,并赋予 Apache 运行用户(如www-data或apache)读写权限:sudo mkdir -p /var/run/apache2 && sudo chown www-data:www-data /var/run/apache2 - 不要用
dbm缓存类型——已废弃、不支持并发,高负载下易锁死










