Cloudflare 报错 526(无效 SSL 证书)怎么解决
526 错误表示 Cloudflare 在 Full (Strict) 模式下无法验证源站证书。解决:给源站装有效证书(或 Cloudflare Origin Certificate),或临时降级为 Full 模式。附源站证书自测命令。
一句话回答:526 错误发生在 Cloudflare 回源阶段——SSL/TLS 模式设为 Full (Strict) 时,Cloudflare 会严格校验源站证书,源站证书无效(自签、过期、域名不匹配)就会报 526。根治办法是给源站装一张有效证书(推荐用 Cloudflare 免费提供的 Origin Certificate,或 Let's Encrypt);临时恢复可把 SSL 模式从 Full (Strict) 降为 Full,但这降低了回源安全性,不宜长期使用。
先确认源站证书状态
绕过 CDN 直接对源站 IP 发起请求,看证书到底什么问题:
curl -svo /dev/null --resolve example.com:443:源站IP https://example.com/
- 返回
SSL certificate problem: self signed certificate→ 源站是自签证书(也可能是正常的 Origin CA 证书未加入本机信任库) - 提示证书过期/域名不匹配 → 对应更换证书
检查命令默认使用本机 CA 库,而 Cloudflare Origin CA 不受普通浏览器/curl 默认信任。本机 curl 验证失败不等于 Cloudflare 验证也失败;必要时从 Cloudflare 官方获取 Origin CA 根证书,用 --cacert 显式校验,并核对证书链、域名和期限。
三种修复方案
方案一:装 Cloudflare Origin Certificate(推荐)
Cloudflare 提供免费、最长 15 年有效期的源站证书,专门用于"Cloudflare ↔ 源站"这段链路:
- Cloudflare 控制台 → SSL/TLS → Origin Server → Create Certificate
- 把证书和私钥部署到源站 Nginx/Apache
- 源站防火墙只放行 Cloudflare IP 段,外部无法直连,证书不被浏览器信任也无所谓
方案二:装公信 CA 证书
给源站装 Let's Encrypt 等公信证书。注意 DNS 已指向 Cloudflare 时,HTTP-01 验证可能失败,改用 DNS-01 验证。
方案三:降级为 Full(临时手段)
SSL/TLS → Overview → 把 Full (Strict) 改成 Full。Full 模式加密回源但不校验证书有效性,自签证书也能通过。只作过渡,尽快回到 Strict。
换证并 reload 后,从 CDN 域名重新访问,确认 526 已消失。持续验证可用观测云 HTTP 拨测检查预期状态码;源站证书仍按前面的直连步骤单独验证,因为 CDN 域名的证书检查通常看到的是边缘证书。
为什么不该用 Flexible 或 Full 长期凑合
- Flexible:用户→CF 加密、CF→源站明文 HTTP,回源流量可被窃听,还常引发重定向循环
- Full:加密但不验证身份,回源链路仍可被中间人攻击
- Full (Strict) 验证 Cloudflare 到源站的身份,是常规代理站点应保持的模式;TLS 在 CDN 终止,并非浏览器直接到源站的一条端到端连接
常见问题(FAQ)
Q:源站自签证书明明能加密,为什么 Strict 模式不认?
A:Strict 要求证书由受信任 CA 签发(或 Cloudflare Origin CA)。自签证书无法证明源站身份,回源链路上的中间人可以用任意自签证书冒充你的服务器——这正是 Strict 要防的。
Q:526 是用户浏览器的问题吗?
A:不是。526 是 Cloudflare 返回给用户的错误页,问题出在 Cloudflare 与源站之间,访客的浏览器/网络与此无关。站长修源站证书才是正解。
Q:改完证书后还报 526?
A:检查:源站 Web 服务器是否 reload 加载了新证书;网络不通应另查防火墙,它通常导致 521/522 而非证书校验类 526;证书 CN/SAN 是否包含回源所用的域名(回源 Host 通常是站点域名,不是源站主机名)。
核查依据
本文依据官方文档核对,示例未在实际业务环境运行;上线前请按部署版本、权限与数据范围验证。