直接在 Nginx 里加 ssl_stapling on 不会生效;OCSP Stapling 是需同时满足 5 项硬性前提(Nginx≥1.3.7、证书含有效 OCSP URI、服务器可直连该 URI、证书链完整、系统时间误差≤±5 分钟)并配置 4 条核心指令(ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate、resolver)的整套机制,缺一不可,否则静默失效。

直接在 Nginx 里加 ssl_stapling on 不会生效。OCSP Stapling 是服务端主动拉取、校验、缓存并分发证书吊销状态的一整套机制,必须同时满足底层条件和四条核心配置,缺一不可。
先确认五个硬性前提是否全部达标
任一不满足,stapling 就会静默关闭,Nginx 日志通常不报错,你根本察觉不到它没工作:
- Nginx 版本 ≥ 1.3.7(生产环境强烈建议 ≥ 1.11.0,旧版对 OCSP 错误响应处理不稳定)
- 证书含有效 OCSP URI:运行
openssl x509 -in your.crt -text -noout | grep -A1 "OCSP",看到OCSP - URI:行才算合格 - 服务器能直连该 OCSP 地址:例如
openssl ocsp -url http://ocsp.int-x3.letsencrypt.org -cert your.crt -CAfile fullchain.pem -text,返回responseStatus: successful才通 - 证书链完整:Nginx 的
ssl_certificate必须是域名证书 + 中间证书合并的 PEM 文件(如 Let’s Encrypt 的fullchain.pem) - 系统时间误差 ≤ ±5 分钟:用
chronyc tracking或ntpdate -q pool.ntp.org检查;高并发场景建议更严,控制在 ±60 秒内
四条核心配置必须共存且位置正确
全部写在 HTTPS 的 server { listen 443 ssl; } 块内,不能放在 location 或其他嵌套块中:
-
ssl_stapling on;—— 显式启用装订功能 -
ssl_stapling_verify on;—— 强制校验 OCSP 响应签名、颁发者和有效期,防止伪造或过期数据被缓存 -
ssl_trusted_certificate /path/to/ca-bundle.pem;—— 这不是你的站点证书,而是专用于验证 OCSP 响应的信任链,必须包含中间 CA 和根 CA,顺序为中间证书在前、根证书在后(Let’s Encrypt 可直接用chain.pem) -
resolver 1.1.1.1 8.8.8.8 223.5.5.5 valid=300s;—— Nginx 不读/etc/resolv.conf,必须显式指定至少两个 DNS;valid=300s防止 DNS 缓存过期导致 stapling 中断
推荐追加的稳定性配置
这些不是必需项,但能显著减少瞬时毛刺、避免握手卡顿:
-
resolver_timeout 3s;—— 防止 DNS 查询拖住 TLS 握手(默认 30s 太长) -
ssl_stapling_cache shared:OCSP:10m;—— 在http块顶层声明,实现多 worker 进程共享缓存 -
ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;—— 启用会话复用,降低重复触发 OCSP 查询频率 -
ssl_protocols TLSv1.2 TLSv1.3;—— 明确禁用 TLS 1.0/1.1,既安全又减少协商分支
验证是否真正生效
别只看配置有没有加,要用真实连接验证:
- 命令行测试:
openssl s_client -connect example.com:443 -servername example.com -status,输出中出现OCSP Response Status: successful (0x0)才算成功 - 浏览器开发者工具 → Security 标签页 → 查看“Certificate”右侧是否有 “Valid” 状态及“OCSP stapling”提示
- 检查 Nginx error_log:若出现
no resolver defined或no suitable OCSP responder URLs found,说明对应环节失败











