nginx中ocsp stapling需同时满足证书含ocsp uri、nginx≥1.3.7、openssl≥1.0.1、系统时间偏差≤±5分钟、证书链完整,并在server块中配置ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate、resolver及resolver_timeout,否则静默失效。

在 Nginx 中配置 OCSP Stapling 不是加一行 ssl_stapling on 就能生效的开关,而是一套必须全部满足的协同机制。配置完整时,移动端 HTTPS 首次握手可减少 150–300ms 延迟;任一环节缺失,Nginx 会静默关闭 stapling,且不报错、不警告。
确认证书和运行环境是否达标
OCSP Stapling 要求基础条件严格,缺一不可:
- 证书必须含
authorityInfoAccess扩展,即提供有效的 OCSP 响应器地址。用命令验证:openssl x509 -in your.crt -text -noout | grep -A1 "OCSP"
输出中需有类似OCSP - URI:http://ocsp.int-x3.letsencrypt.org - Nginx ≥ 1.3.7(生产建议 ≥ 1.11.0),OpenSSL ≥ 1.0.1(推荐 1.1.1+ 或更新版)
- 服务器系统时间偏差 ≤ ±5 分钟(OCSP 响应含严格时间戳,超时即被拒绝)
- 证书链完整:要么
ssl_certificate指向包含站点证书 + 中间证书的文件(如 Let’s Encrypt 的fullchain.pem),要么单独用ssl_trusted_certificate指定可信链
server 块内必需的配置项
以下指令必须全部写入监听 443 的 server 块中(不能只放 http 块顶层,也不能遗漏任意一条):
-
ssl_stapling on;—— 必须显式开启,默认为 off -
ssl_stapling_verify on;—— 强烈启用,用于校验 OCSP 响应签名、有效期及颁发者 -
ssl_trusted_certificate /path/to/fullchain.pem;—— 指向根证书 + 所有中间证书的 PEM 文件(注意:不是你的站点证书,也不是ssl_certificate所指文件) -
resolver 8.8.8.8 1.1.1.1 223.5.5.5 valid=300s;—— 必须显式配置 DNS 解析器;Nginx 不读/etc/resolv.conf;多个 DNS 提升容错性;valid=300s表示 DNS 缓存 5 分钟 -
resolver_timeout 5s;—— DNS 查询超时设为 5 秒,避免因解析卡住拖慢整个 TLS 握手
特别注意 ssl_trusted_certificate 和 resolver 的细节
这两个最容易配错,直接导致 stapling 静默失效:
-
ssl_trusted_certificate内容必须按顺序拼接:中间证书在前,根证书在后(例如 Let’s Encrypt 的chain.pem或fullchain.pem)。不能包含站点证书本身,也不能混入无关 CA -
resolver必须能连通 OCSP 域名(如ocsp.int-x3.letsencrypt.org)。若使用内网 CA,resolver 应指向可解析其 OCSP 地址的内网 DNS(如 CoreDNS) - 避免只配一个 DNS(如仅
8.8.8.8),公网 DNS 可能屏蔽或延迟响应 OCSP 域名;建议至少两个不同来源的 DNS,比如114.114.114.114+223.5.5.5 - 不要用
127.0.0.1作为唯一 resolver——本地 DNS 服务一旦异常,stapling 立即不可用且无 fallback
验证是否真正生效
配置完成后,用以下命令检查 OCSP 响应是否成功返回:
openssl s_client -connect example.com:443 -status -servername example.com 2>&1 | grep -A1 "OCSP response"
理想输出为:OCSP Response Status: successful (0x0)
若显示 no response sent,说明某项配置未生效,需逐项回查上述要点。











