# "ssl_stapling" ignored：nginx OCSP 装订警告怎么处理

> nginx 无法做 OCSP 装订时会警告 "ssl_stapling" ignored。Let's Encrypt 2025 年关闭 OCSP 后证书里不再有 OCSP 地址，这条警告属于正常现象。

Source: https://ssl.sh/zh/errors/nginx-ssl-stapling-ignored/
Last updated: 2026-11-10

**`"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` 或错误日志里看到的是：

```text
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 配置模板也带着这两行。确认方法：

```bash
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](https://ssl.sh/zh/news/lets-encrypt-ends-ocsp/)。

### 2. 缺中间证书

nginx 需要签发者证书来构造 OCSP 请求。nginx 文档写明：签发者证书要在 `ssl_certificate` 文件里，不在的话就要放进 `ssl_trusted_certificate`。用了 `cert.pem` 而不是 `fullchain.pem`，就会报 `issuer certificate not found`，同时一部分客户端也会出错，见 [缺少中间证书](https://ssl.sh/zh/errors/missing-intermediate-certificate/)。

### 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` 块和公共配置片段里删掉装订指令：

```nginx
# 删除这两行
ssl_stapling on;
ssl_stapling_verify on;
```

如果 `resolver` 只是为装订加的，也一并删掉；运行 Certbot 的脚本里去掉 `--staple-ocsp`，免得下次又加回来。宝塔面板用户在站点的配置文件里查找这两行，删掉后保存，再执行一次 `nginx -t` 确认没有其他问题。

**证书仍带 OCSP 地址的**，保留装订并把配置补完整：

```nginx
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 配置生成器](https://ssl.sh/zh/tools/tls-config-generator/) 可以生成不含过时装订指令的配置。

## 怎么确认已经处理好

`nginx -t` 不再输出这条警告，需要装订的证书在握手里带上了 OCSP 响应，就算处理好了。

1. `sudo nginx -t` 不再输出 `[warn] "ssl_stapling" ignored`，然后 `sudo systemctl reload nginx`。
2. 对需要装订的证书检查握手：

   ```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](https://ssl.sh/zh/learn/ocsp-and-crl/)。
