开启 OCSP Stapling 可减少 150–300ms TLS 握手延迟,但需同时满足五项前提:证书含有效 OCSP URI、Nginx≥1.3.7 且 OpenSSL≥1.0.1、系统时间误差≤±5 分钟、证书链完整、服务器能直连 OCSP 地址,并在 server 块中正确配置 ssl_stapling on、ssl_stapling_verify on、ssl_trusted_certificate 和 resolver 指令。

开启 OCSP Stapling 能让 Nginx 在 TLS 握手时,把证书吊销状态直接“装订”进响应,省去浏览器单独查 OCSP 的一次网络请求,实测可减少 150–300ms 首次握手延迟。它不是加一行 ssl_stapling on 就能生效的开关,而是一套必须全部满足、协同工作的机制。
确认五项基础前提是否全部满足
缺任何一项,stapling 都会静默关闭——Nginx 不报错、不警告,但实际不工作:
- 证书含有效 OCSP URI:运行
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 分钟:用
chronyc tracking或ntpdate -q pool.ntp.org检查 - 证书链完整:确保
ssl_certificate指向的是域名证书 + 所有中间证书合并的 PEM 文件(如 Let’s Encrypt 的fullchain.pem) - 服务器能直连 OCSP 地址:用
curl -v http://ocsp.int-x3.letsencrypt.org或openssl ocsp -url http://ocsp.int-x3.letsencrypt.org -cert your.crt -CAfile fullchain.pem -text测试,返回responseStatus: successful
HTTPS server 块内写全四条核心指令
所有配置必须放在监听 443 的 server { listen 443 ssl; } 块内,不能写在 http 块顶层或 location 块中:
-
ssl_stapling on;——显式启用装订功能 -
ssl_stapling_verify on;——强制校验 OCSP 响应签名、颁发者及有效期,防止伪造或过期数据被缓存 -
ssl_trusted_certificate /path/to/full-chain-trusted.pem;——指向仅含中间证书 + 根证书的 PEM 文件,顺序为中间证书在前、根证书在后;不能包含你的站点证书,也不能复用ssl_certificate所指文件 -
resolver 1.1.1.1 8.8.8.8 223.5.5.5 valid=300s;——Nginx 不读/etc/resolv.conf,必须显式指定至少两个 DNS;valid=300s表示 DNS 缓存 5 分钟
规避两个最易出错的关键点
这两个问题最常导致 stapling 静默失效,且日志提示极隐蔽:
-
ssl_trusted_certificate内容必须纯净:只含中间证书和根证书,按顺序拼接(中间在前、根在后),不能混入站点证书,也不能直接复用ssl_certificate对应的文件 - 必须显式配置
resolver:若缺失,Nginx 日志仅显示no resolver defined to resolve OCSP responder hostname,然后自动关闭 stapling,无任何握手报错
验证是否真正生效
配置完成后,用以下命令检查 OCSP 响应是否成功返回:
openssl s_client -connect your-domain.com:443 -servername your-domain.com -status -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"
若看到 OCSP Response Status: successful (0x0),说明已正常启用;若为空或提示 no response sent,说明某环节未满足。


















