服务器和代理
"ssl_stapling" ignored:nginx OCSP 装订警告怎么处理
"ssl_stapling" ignored"ssl_stapling" ignored 的意思是:nginx 没法为某张证书设置 OCSP 装订,于是对它关闭了装订,其他照常运行。 这是警告不是错误:nginx 能启动,网站能访问,只是客户端收不到装订的 OCSP 响应。Let's Encrypt 在 2025 年 8 月关闭 OCSP 之后,最常见的写法是 "ssl_stapling" ignored, no OCSP responder URL in the certificate,对这类证书来说是预期之内、无害的。处理办法是在装订不可能生效的地方删掉装订指令。
具体的警告内容
逗号后面就是原因。nginx -t 或错误日志里看到的是:
nginx: [warn] "ssl_stapling" ignored, no OCSP responder URL in the certificate "/etc/letsencrypt/live/example.com/fullchain.pem"
| 写法 | 含义 |
|---|---|
no OCSP responder URL in the certificate "..." |
证书的 AIA 扩展里没有 OCSP 地址 |
issuer certificate not found for certificate "..." |
nginx 找不到签发这张证书的中间证书 |
host not found in OCSP responder "..." in the certificate "..." |
加载配置时解析不了 OCSP 服务器的域名 |
invalid URL prefix in OCSP responder "..." |
响应地址不是 http://,nginx 只支持 HTTP 的 OCSP 服务器 |
not supported |
nginx 链接的 OpenSSL 没有 OCSP 支持 |
这几种都是 warn 级别。
OCSP 装订原本是干什么的,为什么在退场
OCSP 装订原本让服务器代客户端查询吊销状态;它在退场,是因为 Let's Encrypt 等 CA 以隐私风险为由结束了 OCSP。有了 OCSP,浏览器可以向 CA 查询某张证书是否被吊销。装订(RFC 6066 里的 TLS 证书状态请求扩展)让服务器自己去取这份带签名的回答,在握手时一并发给客户端。这样省掉了客户端的一次查询,CA 也无从得知用户在访问哪个网站。前提是证书里写了 OCSP 服务器地址。Let's Encrypt 在公告里说,结束 OCSP 的主要原因是它对互联网隐私构成相当大的风险:CA 能立刻知道某个 IP 正在访问哪个网站。现在它只通过 CRL 发布吊销信息,CRL 地址写在证书的 CRL 分发点扩展里。所以对 Let's Encrypt 证书来说本来就没有东西可装订,这条警告只是在陈述事实。
到底有没有问题
一般没有。确认三件事:网站能正常用 HTTPS 打开;nginx -t 显示 syntax is ok 和 test is successful;警告里提到的都是 Let's Encrypt 或其他已经停用 OCSP 的 CA 签发的证书。三条都满足,这条警告就只是“看着难受”。需要认真对待的是:警告里出现了一张带 OCSP 地址的证书,说明装订因为缺中间证书、DNS 失败之类的原因悄悄失效了。
为什么很多教程还在让你开装订
OCSP 装订曾经是 TLS 优化的标准动作:网上大量 Nginx 配置模板、性能优化文章和 SSL 评测工具的建议里,都有 ssl_stapling on; 和 ssl_stapling_verify on; 这两行。这些内容大多写于 Let's Encrypt 停用 OCSP 之前,当时它的证书都带 OCSP 地址,开装订确实有好处。照搬到今天的 Let's Encrypt 证书上,就只剩一条警告。
所以判断要不要装订,不看教程,看证书本身:证书里有 OCSP 地址,就开装订并把中间证书和 resolver 配好;没有,就删掉这两行。同一台服务器上不同 CA 的证书,可以在各自的 server 块里分别处理。
常见原因(按出现频率排序)
最常见的原因是证书里没有 OCSP 地址,2025-05-07 以后签发的 Let's Encrypt 证书都是这样。
1. 证书里没有 OCSP 地址(2025 年以后的 Let's Encrypt 证书)
Let's Encrypt 在 2024-12-05 宣布结束 OCSP,2025-05-07 起新证书不再包含 OCSP 地址,2025-08-06 关闭 OCSP 服务。几年前照着教程写的 ssl_stapling on;,或者用 Certbot 的 --staple-ocsp 选项开启的装订,现在每次重载都会报这条警告。国内很多 Nginx 配置模板也带着这两行。确认方法:
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -ocsp_uri
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -ext crlDistributionPoints
第一条没有输出、第二条有 CRL 地址,就说明这是一张只用 CRL 的证书。阿里云、腾讯云等平台签发的证书带不带 OCSP 地址,也用同样的命令查。背景见 Let's Encrypt 停用 OCSP。
2. 缺中间证书
nginx 需要签发者证书来构造 OCSP 请求。nginx 文档写明:签发者证书要在 ssl_certificate 文件里,不在的话就要放进 ssl_trusted_certificate。用了 cert.pem 而不是 fullchain.pem,就会报 issuer certificate not found,同时一部分客户端也会出错,见 缺少中间证书。
3. nginx 启动时 DNS 还不可用
证书里有 OCSP 地址时,nginx 在加载配置时就会解析 OCSP 服务器的域名。开机时网络或 DNS 还没就绪,就会出现 host not found in OCSP responder。nginx 文档还要求配置 resolver 指令,用于运行时解析 OCSP 服务器。
4. 非 HTTP 的 OCSP 地址,或者 OpenSSL 不支持 OCSP
很少见:OCSP 地址不是 http:// 时报 invalid URL prefix,自己编译的 OpenSSL 去掉了 OCSP 时报 not supported。
怎么处理
处理方法看证书:没有 OCSP 地址就删掉装订指令,有 OCSP 地址就把装订配置补完整。
证书没有 OCSP 地址的,从对应的 server 块和公共配置片段里删掉装订指令:
# 删除这两行
ssl_stapling on;
ssl_stapling_verify on;
如果 resolver 只是为装订加的,也一并删掉;运行 Certbot 的脚本里去掉 --staple-ocsp,免得下次又加回来。宝塔面板用户在站点的配置文件里查找这两行,删掉后保存,再执行一次 nginx -t 确认没有其他问题。
证书仍带 OCSP 地址的,保留装订并把配置补完整:
ssl_certificate /etc/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/ssl/example.com/privkey.pem;
ssl_trusted_certificate /etc/ssl/example.com/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;
resolver 203.0.113.53 valid=300s; # 换成服务器实际可用的 DNS 地址
resolver 填服务器能用的 DNS 地址即可,比如云服务器所在内网提供的 DNS。TLS 配置生成器 可以生成不含过时装订指令的配置。
怎么确认已经处理好
nginx -t 不再输出这条警告,需要装订的证书在握手里带上了 OCSP 响应,就算处理好了。
sudo nginx -t不再输出[warn] "ssl_stapling" ignored,然后sudo systemctl reload nginx。- 对需要装订的证书检查握手:
bash
openssl s_client -connect example.com:443 -servername example.com -status </dev/null 2>/dev/null | grep -A2 'OCSP response'
显示 OCSP Response Status: successful 说明装订正常;Let's Encrypt 证书显示 no response sent 是预期结果。
3. 一些 SSL 评测工具仍可能把“未开启 OCSP 装订”列为提示项;对证书里本来就没有 OCSP 地址的证书,这一项可以忽略,不影响安全性,也不影响浏览器访问。没有 OCSP 之后吊销怎么运作,见 OCSP 与 CRL。
常见问题
不做 OCSP 装订,网站是不是就不安全了?
对 Let's Encrypt 证书来说没有区别:已经没有 OCSP 服务可以装订了。吊销信息改由 CRL 发布,主流浏览器对大多数证书也是用自己的吊销数据(比如 Chrome 的 CRLSets、Firefox 的 CRLite),而不是逐个去问 OCSP 服务器。
这条警告会导致 nginx 启动或重载失败吗?
不会。它是 warn 级别,nginx -t 仍然显示配置测试成功,重载也正常。只有 emerg 级别的错误才会让 nginx 停下来。
服务器上同时有两家 CA 的证书,要不要保留装订?
只在证书带 OCSP 地址的 server 块里开 ssl_stapling。用 openssl x509 -noout -ocsp_uri 逐张检查,输出为空就说明没有可装订的东西。
证书没有 OCSP 地址,会不会影响带 Must-Staple 的证书?
Let's Encrypt 从 2025-05-07 起拒绝 Must-Staple 申请,新证书不会再带这个扩展。其他 CA 签发的带 Must-Staple 的证书则必须能正常装订,否则 Firefox 会报 MOZILLA_PKIX_ERROR_REQUIRED_TLS_FEATURE_MISSING。