现象
源站配好了 HTTPS,用 curl 带 Host 头直连源站返回 200,但通过 Cloudflare 访问一直 526 Invalid SSL Certificate。
误解一:以为 526 是源站配置问题
先确认源站:证书私钥匹配、有效期正常、Nginx 配置语法通过、本机测试 200。全都对。那问题只能在 Cloudflare 那一侧。
误解二:以为「自动 SSL/TLS」是安全的最佳选择
Cloudflare 的 SSL/TLS 模式有三个主要选项:
- 灵活 Flexible:CF 到源站走 HTTP,源站不需要证书
- 完全 Full:CF 到源站走 HTTPS,但不校验源站证书是否有效
- 完全(严格)Full (strict):校验源站证书必须有效且域名匹配
而「自动 SSL/TLS」是 Cloudflare 推荐的智能模式,它会根据源站实际情况动态判断。如果发现源站证书链不完整,就会拒绝连接。
它不是「第一个选项所以最安全」,而是「让 Cloudflare 自己看着办」。当源站条件不满足它的判断标准时,结果就是连不上。
证书链完整性问题
从 Cloudflare 下载的 Origin 证书默认只包含叶子证书。完整的证书链还需要中间 CA 证书。用 openssl 验证时会出现:
error 20 at 0 depth lookup: unable to get local issuer certificate
这种情况在 Full (strict) 和自动模式下都会失败,切到 Full 就能通过。
解决
把 SSL 模式从「自动」改成「完全 Full」。CF 到源站这一段仍然加密,只是不严格校验证书链完整性,安全性对个人站点完全够用。
记忆点
526 出现了,先看 Cloudflare 的 SSL 模式,再看证书链是否完整。别一头扎进源站配置里。
评论