# Error 526 invalid SSL certificate：Cloudflare 源站证书无效

> Cloudflare 526 表示 Full (strict) 模式下源站证书没通过校验：过期、自签名、域名不符或缺中间证书。逐项确认的命令和修复方法。

Source: https://ssl.sh/zh/errors/cloudflare-error-526-invalid-ssl-certificate/
Last updated: 2026-11-10

**Cloudflare 526 的意思是：Cloudflare 无法验证源站服务器出示的证书。** 和源站的 TLS 握手已经完成，但你的站点用的是 Full (strict) 模式，这个模式会像浏览器一样检查源站证书，检查没通过。最常见的原因依次是：证书过期、自签名证书、证书里没有这个域名、源站没发中间证书。

## Full (strict) 检查什么

按 Cloudflare 文档，Full (strict) 要求源站证书同时满足 5 项条件，任何一项不满足都会返回 526：

| 检查项 | 什么情况下不通过 |
|---|---|
| 未过期 | `notAfter` 已经过去，通常是续期失败 |
| 未吊销 | CA 已经吊销了这张证书 |
| 由 CA 签发 | 自签名证书（加入 Custom Origin Trust Store 的除外） |
| 域名匹配 | 所访问的域名不在 CN 或 SAN 里 |
| 证书链完整 | 源站只发了叶子证书，没发中间证书 |

公共 CA 签发的证书和 Cloudflare Origin CA 证书都能通过“由 CA 签发”这一项。Full 模式则什么证书都接受，所以同一台源站会出现“Full 下正常、Full (strict) 下 526”的情况。

## 526 第一次出现的时间点，往往就是线索

526 首次出现前你刚做过的操作，通常直接指向原因。

- **刚把加密模式改成 Full (strict)**：源站证书本来就不合格，只是 Full 模式不检查。重点看下面第 2 到第 4 条。
- **什么都没动，某天突然 526**：源站证书到了 `notAfter` 那一天，看第 1 条。
- **刚搬到新服务器或换了面板**：新机器上跑的是自签名占位证书，或者部署时漏了中间证书。
- **刚新增了一个开代理的子域名**：原来的源站证书里没有这个新名字。
- **只有部分请求 526**：负载均衡或 DNS 轮询后面有多台源站，其中一台的证书没更新。把每台源站的 IP 分别测一遍。

## 常见原因（按出现频率排序）

源站证书过期是最常见的原因，其次是自签名证书和证书没覆盖访问的域名。

### 1. 源站证书过期

续期任务几个月前就坏了，一直没人发现。Let's Encrypt 从 2025-06-04 起不再发送到期提醒邮件，Cloudflare 也不给 Origin CA 证书发到期通知，所以 526 往往就是第一个“报警”。直连源站 IP 确认：

```bash
openssl s_client -connect 203.0.113.10:443 -servername example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -dates
```

### 2. 自签名证书或内部 CA 证书

不少主机面板会在 443 上先放一张自签名的占位证书，Full 模式下没问题，Full (strict) 下必然 526。用 `openssl x509 -noout -subject -issuer` 看一下，自签名证书的 subject 和 issuer 完全相同。

### 3. 证书没覆盖这个域名

证书只签了 `example.com`，代理的记录却是 `www.example.com` 或 `api.example.com`；或者源站的 SNI 配置不认识 Cloudflare 发来的域名，返回了默认站点的证书。看证书里有哪些域名：

```bash
openssl s_client -connect 203.0.113.10:443 -servername www.example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -ext subjectAltName
```

### 4. 缺中间证书

Nginx 里 `ssl_certificate` 指向了 `cert.pem` 而不是 `fullchain.pem`，或者从云厂商下载证书时只拷了第一段。数一数源站发了几张证书：

```bash
openssl s_client -connect 203.0.113.10:443 -servername example.com -showcerts </dev/null 2>/dev/null \
  | grep -c 'BEGIN CERTIFICATE'
```

公共 CA 的证书只返回 1 张，基本可以断定链不完整，详见 [缺少中间证书](https://ssl.sh/zh/errors/missing-intermediate-certificate/)。

### 5. 证书已被吊销

比较少见，一般发生在私钥泄露被举报、或者 CA 批量吊销之后。CA 的通知邮件和证书的 CRL 记录可以确认。

## 怎么修

要消除 526，源站必须出示一张未过期、覆盖所有代理域名、链完整、由受信任 CA 签发的证书。

**续期或更换证书。** 用 Certbot 的服务器：

```bash
sudo certbot renew --cert-name example.com
sudo systemctl reload nginx
```

宝塔面板用户在网站的“SSL”页面点续签，或者重新申请 Let's Encrypt 证书；阿里云、腾讯云的免费证书到期后需要重新申请并重新部署到服务器上。

**发送完整证书链。** Nginx 的 `ssl_certificate` 要指向“叶子证书 + 中间证书”的文件（`fullchain.pem`）；Apache 2.4.8 及以上版本把中间证书拼进 `SSLCertificateFile` 指定的文件；IIS 要把中间证书导入“中间证书颁发机构”存储。云厂商下载的 Nginx 格式证书包里，`.pem` 或 `.crt` 文件通常已经包含了中间证书，别手动删掉第二段。

**覆盖所有代理的域名。** 重新签发时把域名写全，比如 `certbot -d example.com -d www.example.com`，或者用 DNS 验证申请通配符证书。

**改用 Cloudflare Origin CA 证书。** 如果访客永远不会直连源站，这是最省事的方案：默认覆盖主域名和一级通配符，Full (strict) 认可。步骤见 [Cloudflare 源站证书教程](https://ssl.sh/zh/guides/cloudflare-origin-certificate/)。

**坚持用自签名证书**，就必须把它加进 Cloudflare 的 Custom Origin Trust Store。

**把续期自动化。** 公共 TLS 证书最长有效期已在 2026-03-15 降到 200 天，2027-03-15 再降到 100 天；Let's Encrypt 的 tlsserver 配置档已经在签 45 天的证书。按 [自动续期教程](https://ssl.sh/zh/guides/renew-certificates-automatically/) 配好续期和重载钩子。

## 国内环境的常见遗漏

国内环境的 526 多出在部署环节：证书没部署到源站、被别的站点抢先匹配，或者续期后没重载。

- **证书只部署到了 CDN 或负载均衡，没部署到源站。** 在阿里云、腾讯云控制台“一键部署”证书时，部署目标可能是 CDN 或负载均衡实例，源站机器上的 Nginx 还是旧证书。Cloudflare 回源连的是哪个 IP，就要检查哪个 IP 上的证书。
- **宝塔里有多个站点绑定同一个域名。** 默认站点、旧站点残留的 443 配置会抢先匹配，Cloudflare 拿到的是另一张证书。删掉不用的站点，再执行 `nginx -t` 检查。
- **续期成功但没重载。** 证书文件已经换了新的，Nginx 进程还在用内存里的旧证书。续期脚本最后要有 `nginx -s reload` 或 `systemctl reload nginx`。

## 怎么确认已经修好

判断标准有两条：用 `curl --resolve` 直连源站校验通过，经 Cloudflare 访问不再出现 526。

1. 在 Cloudflare 之外用和它类似的方式校验源站：把域名强制解析到源站 IP 再请求：

   ```bash
   curl -sv --resolve example.com:443:203.0.113.10 https://example.com/ -o /dev/null 2>&1 \
     | grep -E 'expire date|subjectAltName|SSL certificate verify'
   ```

   看到 `SSL certificate verify ok` 说明公共 CA 证书有效且链完整。Origin CA 证书不受公共信任，这个测试一定失败，属正常现象，只需核对日期和域名。
2. 通过 Cloudflare 打开网站，确认 526 页面消失。
3. 用 [证书链检查工具](https://ssl.sh/zh/tools/chain-builder/) 检查链的顺序，用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 查看访客在边缘看到的证书。
