# MOZILLA_PKIX_ERROR_REQUIRED_TLS_FEATURE_MISSING：缺 OCSP 装订

> Firefox 提示 MOZILLA_PKIX_ERROR_REQUIRED_TLS_FEATURE_MISSING，说明带 Must-Staple 标记的证书没有附上 OCSP 装订响应。原因和修法。

Source: https://ssl.sh/zh/errors/mozilla-pkix-error-required-tls-feature-missing/
Last updated: 2026-11-10

**MOZILLA_PKIX_ERROR_REQUIRED_TLS_FEATURE_MISSING 的意思是：证书承诺“每次连接都会附上最新的 OCSP 响应”，这次连接却没有。** 这个承诺叫 [OCSP Must-Staple](https://ssl.sh/zh/glossary/must-staple/)。Firefox 会要求服务器兑现承诺，做不到就拒绝连接；其他浏览器会忽略这个标记。

## 先判断是网站的问题还是你电脑的问题

是网站的问题。用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 确认，它会显示证书是否带 Must-Staple、服务器是否装订了 OCSP 响应：

```bash
curl ssl.sh/example.com
```

访客修不了。刷新几次也许能打开（服务器已经取到响应），这本身就说明服务器在“按需装订”。

## 原因

这些原因的结果相同：服务器没把 OCSP 响应装订进 TLS 握手。

### 1. 没开启装订

申请证书时加了 Must-Staple（比如 `certbot --must-staple`），Web 服务器却没开 `ssl_stapling`。看看服务器发了什么：

```bash
openssl s_client -connect example.com:443 -servername example.com -status </dev/null 2>/dev/null \
  | grep -A3 "OCSP response"
```

显示 `OCSP response: no response sent` 就是这个问题。

### 2. Nginx 重启后按需获取

Nginx 是用到时才去取 OCSP 响应的，所以重启或重载之后的头几个连接没有[装订](https://ssl.sh/zh/glossary/ocsp-stapling/)。证书带 Must-Staple 时，这些访客在 Firefox 里就会失败。

### 3. 服务器连不上 OCSP 响应服务器

出站防火墙、没配 `resolver`、DNS 故障，都会让服务器取不到响应。国内服务器访问境外 CA 的 OCSP 地址时偶尔也会超时。Nginx 日志里对应的警告见 [ssl_stapling ignored](https://ssl.sh/zh/errors/nginx-ssl-stapling-ignored/)。

### 4. CA 已不再提供 OCSP

签发 CA 关闭了 OCSP 服务，装订就永远取不到。[Let's Encrypt 在 2025 年停止接受 Must-Staple 申请并关闭了 OCSP](https://ssl.sh/zh/news/lets-encrypt-ends-ocsp/)，续期配置里还留着 Must-Staple 的，续期会失败或拿到无法使用的证书。

### 5. TLS 终止设备不支持装订

有些负载均衡和 CDN 不做装订，Must-Staple 证书不能用在这些地方。

## 在各浏览器/系统上的样子

只有 Firefox 会因为这个问题拒绝连接，Chrome、Edge 和 Safari 照常打开。

| 浏览器 | 显示内容 |
|---|---|
| Firefox | “建立安全连接失败”，代码 `MOZILLA_PKIX_ERROR_REQUIRED_TLS_FEATURE_MISSING` |
| Chrome / Edge / 360 / QQ 浏览器 | 正常打开（不执行 Must-Staple） |
| Safari | 正常打开 |

## 站长怎么修

推荐的修法是换一张不带 Must-Staple 的证书；坚持用 Must-Staple，就必须让每次握手都带上 OCSP 响应。

**1. 推荐：换一张不带 Must-Staple 的证书。** certbot 从续期配置里去掉这个选项，再强制重新签发：

```bash
sudo sed -i '/must_staple/d' /etc/letsencrypt/renewal/example.com.conf
sudo certbot certonly --nginx -d example.com --force-renewal
sudo systemctl reload nginx
```

acme.sh 重新签发时不要加 `--ocsp-must-staple`。

**2. 坚持用 Must-Staple 的话**，开启装订，并保证服务器能取到响应：

```nginx
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/example.com.chain.pem;
resolver 223.5.5.5 119.29.29.29 valid=300s;
```

每次重启后预热缓存（比如手动跑几次 `openssl s_client -status`），或者换用会预先获取响应的服务器软件。

**3. 验证。** 用 `curl ssl.sh/example.com` 和 Firefox 测试。
