平台和 DevOps

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

作者: · 最后核实

报错信息Error 526: invalid SSL certificate

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 确认:

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 发来的域名,返回了默认站点的证书。看证书里有哪些域名:

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,或者从云厂商下载证书时只拷了第一段。数一数源站发了几张证书:

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

公共 CA 的证书只返回 1 张,基本可以断定链不完整,详见 缺少中间证书。

5. 证书已被吊销

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

怎么修

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

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

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 源站证书教程。

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

把续期自动化。 公共 TLS 证书最长有效期已在 2026-03-15 降到 200 天,2027-03-15 再降到 100 天;Let's Encrypt 的 tlsserver 配置档已经在签 45 天的证书。按 自动续期教程 配好续期和重载钩子。

国内环境的常见遗漏

国内环境的 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. 用 证书链检查工具 检查链的顺序,用 SSL 检测 查看访客在边缘看到的证书。

常见问题

从 Full (strict) 改成 Full,526 就没了,这样安全吗?

不安全。网站能恢复,但 Cloudflare 文档写明:Full 模式下源站证书“不做任何校验”,过期、自签名、域名不对都照样放行。能截获 Cloudflare 到源站流量的人就能冒充源站。只把它当临时措施,证书修好后切回 Full (strict)。

浏览器里看源站证书好好的,Cloudflare 为什么还报 526?

原因有两个。一是开了代理后浏览器看到的是 Cloudflare 的边缘证书,看不到源站证书;二是浏览器会自己补全缺失的中间证书,而 Cloudflare 要求源站把叶子证书和中间证书一起发过来。用 openssl s_client -showcerts 直连源站数一数证书数量。

Cloudflare Origin CA 证书能配合 Full (strict) 用吗?

能,Cloudflare 把它列为 Full (strict) 认可的证书。但它只被 Cloudflare 信任,一旦关闭代理(小云朵变灰)或让访客直连源站,浏览器就会报证书不受信任。做法见 Origin CA 教程。

怎样避免续期后又出现 526?

用 ACME 客户端自动续期,续期钩子里重载 Web 服务器,并且自己监控源站证书的到期时间。公共 TLS 证书有效期从 2026-03-15 起最长 200 天、2027-03-15 起最长 100 天,靠手动续期迟早会出 526。

资料来源

  1. Cloudflare: Error 526
  2. Cloudflare: Full (strict) 模式
  3. Cloudflare: Full 模式
  4. Cloudflare: Origin CA 证书
  5. RFC 5280: X.509 证书与 CRL 规范