直接在 nginx 的 server 块里加 ssl_stapling on 是无效的,ocsp 装订需同时满足五项硬性条件(nginx≥1.3.7、证书含有效 ocsp uri、服务器可直连该 uri、证书链完整、系统时间误差≤±5分钟)并配齐四条核心指令(ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate、resolver),缺一不可。

直接在 Nginx 的 server 块里加 ssl_stapling on 是无效的。OCSP 装订是一整套服务端主动拉取、签名验证、缓存分发的机制,必须同时满足五项硬性条件:Nginx 版本 ≥ 1.3.7(生产建议 ≥ 1.11.0)、证书含有效 OCSP URI、服务器能直连该 URI、证书链完整、系统时间误差 ≤ ±5 分钟;再配齐四条核心指令,缺一不可。
确认基础前提是否全部到位
任何一项不满足,stapling 都会静默关闭,Nginx 日志通常不报错,你完全察觉不到它没生效:
- 用
openssl x509 -in your.crt -text -noout | grep -A1 "OCSP"检查证书是否含OCSP - URI:行; - 用
openssl ocsp -url http://ocsp.int-x3.letsencrypt.org -cert your.crt -CAfile fullchain.pem -text测试能否拿到responseStatus: successful; -
ssl_certificate必须是域名证书 + 中间证书合并的 PEM 文件(如 Let’s Encrypt 的fullchain.pem); - 系统时间不准会导致 OCSP 响应中
thisUpdate/nextUpdate校验失败,可用ntpdate -q pool.ntp.org或chronyc tracking检查偏差。
四条核心配置必须共存且位置正确
全部写在 HTTPS 的 server { listen 443 ssl; } 块内,不能放在 location 或其他嵌套块中:
-
ssl_stapling on;—— 显式启用装订功能; -
ssl_stapling_verify on;—— 强制校验 OCSP 响应签名、颁发者和有效期,防止伪造或过期数据被缓存使用; -
ssl_trusted_certificate /path/to/full-chain-trusted.pem;—— 这不是你的站点证书文件,而是专用于验证 OCSP 响应签名的信任链,需包含中间 CA 和根 CA,顺序为中间证书在前、根证书在后; -
resolver 8.8.8.8 1.1.1.1 223.5.5.5 valid=300s;—— Nginx 不读/etc/resolv.conf,必须显式指定至少两个 DNS,valid=300s防止 DNS 缓存过期导致 stapling 中断。
推荐补充的稳定性配置
这些不是必需项,但能显著提升实际运行中的鲁棒性:
-
resolver_timeout 5s;—— 避免 DNS 查询卡住整个 TLS 握手; -
ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;—— 启用会话复用,减少重复触发 OCSP 查询; - 若用 Let’s Encrypt,
ssl_trusted_certificate可直接指向chain.pem或fullchain.pem(确保不含私钥); - 禁用旧协议:
ssl_protocols TLSv1.2 TLSv1.3;,因 OCSP Stapling 仅在 TLS 1.2+ 生效。
验证是否真正生效
别只看配置有没有语法错误,要实测握手响应内容:
- 终端执行:
openssl s_client -connect your-domain.com:443 -status -servername your-domain.com 2>&1 | grep -i "ocsp response"; - 若输出含
OCSP Response Status: successful (0x0),说明已成功装订; - 也可用 SSL Labs 在线测试,结果页中 “OCSP stapling” 显示为 Yes 即通过。











