Cloudflare 525/526 时先区分 TLS 握手失败与严格证书验证失败,再核对 SNI、443、证书域名、有效期和完整链。
先按错误码处理:Cloudflare 525 SSL handshake failed 表示 Cloudflare 与源站建立 TLS 连接时握手失败;526 Invalid SSL certificate 表示连接进入证书验证阶段,但源站证书不满足严格模式要求。进入 Cloudflare 控制台,选择域名后先打开“SSL/TLS → 概述”记录当前加密模式,再到“分析和日志 → HTTP 错误”记录发生时间、主机名和 Ray ID。普通网站默认应修好源站证书并保持“完全(严格)”,不要一看到 526 就长期降为“完全”或“灵活”。
查看模式、证书和日志通常不额外收费;申请公开可信证书或 Cloudflare Origin CA 证书也可能免费,但服务器扩容、托管证书和日志产品可能收费,提交前以当前服务商页面为准。525/526 本身不会删除网站数据,不过替换错私钥、覆盖证书、重启错误站点或切换 DNS 会造成 HTTPS 中断。操作前备份 Nginx 站点配置、现用证书和私钥路径,私钥不得粘贴到聊天、工单或公开检测网站。
525 和 526 的区别决定先查哪里
浏览器到 Cloudflare、Cloudflare 到源站是两段独立连接。访客能看到 Cloudflare 的边缘证书,不代表源站 443 端口、SNI 虚拟主机和证书链正确。525 发生在第二段连接的握手阶段,常见方向是 443 未监听、TLS 协议或密码套件不兼容、SNI 命中了错误站点、源站主动重置连接,或负载过高导致握手间歇失败。526 通常只会在严格验证源站证书的模式下出现,重点检查有效期、域名覆盖、签发机构和中间证书链。
先保留错误页面上的主机名、时间、时区和 Ray ID。多个子域名共用源站时,必须按发生错误的具体主机名测试;只用服务器 IP 打开 HTTPS,往往会命中默认证书,不能证明目标域名的虚拟主机有问题。
| 现场结果 | 优先判断 | 下一步 |
|---|---|---|
| Cloudflare 显示 525,源站 443 也无法完成握手 | 监听、SNI、TLS 协议、密码套件或源站容量问题 | 检查 443 监听、Nginx 错误日志与带 SNI 的握手结果 |
| Cloudflare 显示 526,带 SNI 可握手但验证失败 | 过期、域名不匹配、自签名或证书链不完整 | 核对 SAN、有效期、签发者和完整链文件 |
| 只在一个子域名失败 | 该主机名的 DNS、证书覆盖或 server_name 配置不同 | 单独核对该记录和对应 Nginx server 块 |
| 错误间歇出现 | 多源站配置不一致、负载过高或连接被重置 | 按 Ray ID 时间对照每台源站日志与负载 |
| 灰云直连报证书不受信任,橙云正常 | 可能使用仅供 Cloudflare 到源站信任的 Origin CA | 若必须允许访客直连,改用公开可信证书 |
先用带主机名的只读测试确认源站
下面命令不会修改源站。把 YOUR_DOMAIN 和 ORIGIN_IP 换成报错域名及真实源站 IP;不要把私网 IP、后台域名或完整响应头公开发布。第一条检查 TLS 握手和证书链,第二条模拟访问目标虚拟主机。
openssl s_client -connect ORIGIN_IP:443 -servername YOUR_DOMAIN -showcerts </dev/null
curl --resolve YOUR_DOMAIN:443:ORIGIN_IP -Iv https://YOUR_DOMAIN/
openssl 输出要看返回证书的主题、签发者、有效期、SAN 域名以及最后的验证结果。curl 能完成 TLS 并返回 200、301 或应用自己的 HTTP 状态,说明目标主机至少可以握手;连接拒绝先查监听和防火墙,超时先查路由、安全组与源站负载,返回错误证书则查 SNI 和虚拟主机顺序。
如果源站只允许 Cloudflare IP 访问,本地直接测试可能被防火墙拒绝。应在受控来源临时放行自己的固定公网 IP,测试后立即回收;不要为了排障把 443 或管理端口的来源限制永久取消。
遇到 525:确认 443、SNI 与握手能力
先在源站 SSH 或宝塔终端检查 Nginx 是否监听 443、配置是否可通过语法检查。不同系统的日志路径可能不同,宝塔可从“网站 → 目标站点 → 日志”查看,系统包安装通常还能通过服务日志定位。以下命令只读取状态;如果服务名不是 nginx,按实际服务替换。
sudo ss -lntp | grep ':443'
sudo nginx -t
sudo systemctl status nginx --no-pager
sudo journalctl -u nginx --since '30 minutes ago' --no-pager
没有 443 监听时,先确认站点是否启用了 SSL、证书和私钥路径是否存在、端口是否被其他进程占用。nginx -t 失败时不要 reload;按报错文件和行号修正。监听正常但握手失败时,检查目标域名是否进入正确的 server_name,以及该站点是否加载了目标证书。
525 间歇发生时,不要只在正常时重复刷新首页。按 Ray ID 的时间窗口查看 Nginx TLS 错误、进程重启、CPU、内存、连接数和所有源站节点。负载均衡后只有一台机器装了新证书,或者一台机器仍使用旧 TLS 配置,会让同一域名时好时坏。应逐个源站 IP 用相同 SNI 测试,修齐后再恢复全部节点流量。
遇到 526:逐项验证有效期、域名和完整链
确认正在使用“完全(严格)”后,读取 Nginx 实际加载的证书文件,而不是只看控制台里曾上传过的文件。把路径替换为站点配置中的 ssl_certificate;不要对私钥运行或展示下面的证书读取命令。
sudo nginx -T | grep -E 'server_name|ssl_certificate'
openssl x509 -in /path/to/fullchain.pem -noout \
-subject -issuer -dates -ext subjectAltName
证书必须处于有效期内,SAN 或证书名称必须覆盖 Cloudflare 请求的主机名。形如 *.YOUR_DOMAIN 的通配符通常只覆盖一层子域名,不等于覆盖更深层的主机名。公开 CA 证书要让源站发送叶子证书和所需中间证书,因此 Nginx 的 ssl_certificate 通常应指向完整链文件,而不是只有站点证书的单文件。
自签名证书不会自动满足公开信任要求。若源站只接受 Cloudflare 代理流量,可以使用 Cloudflare Origin CA,并在证书中包含实际主机名;这类证书用于 Cloudflare 到源站的连接。暂停 Cloudflare 或把 DNS 记录改为仅 DNS 后,访客浏览器不一定信任 Origin CA,因此需要直连源站的业务应安装公开可信证书。
替换证书时怎样避免把站点切断
- 先确认目标站点、域名覆盖、证书链文件和私钥是一组,不在原文件上直接粘贴覆盖。
- 把新文件保存到新的受限路径,记录原
ssl_certificate与ssl_certificate_key路径。 - 只修改目标站点的 server 块,运行
nginx -t。语法失败就恢复原路径,不执行 reload。 - 语法通过后使用 reload 平滑加载,不先停止整个 Web 服务。
- 再次用
openssl s_client和curl --resolve检查源站,然后再通过 Cloudflare 正常访问。
修改后可执行以下两步。第一步必须显示配置测试成功才执行第二步;若发行版或面板管理的 Nginx 路径不同,应使用面板提供的重载操作。
sudo nginx -t
sudo systemctl reload nginx
重载失败或新证书仍不匹配时,恢复之前记录的证书和私钥路径,再次运行 nginx -t 并 reload。不要删除旧证书,直到 Cloudflare 边缘访问、源站 SNI 测试、登录、支付回调和 API 域名都完成验收。
能不能临时把“完全(严格)”改成“完全”
Cloudflare 官方把改为“完全”列为 526 的临时绕过方式,但它会停止严格验证源站证书,不能代替修复。只有业务必须先恢复、当前确认源站身份且有明确时间窗口时,才可把它作为短时应急动作,并记录原模式、负责人和恢复时间。源站证书修好并通过验证后应立即切回“完全(严格)”。
不要改成“灵活”来解决 525/526。“灵活”会让 Cloudflare 以 HTTP 连接源站,既降低源站链路保护,也可能与源站 HTTPS 强制跳转形成循环。若只有某个旧子域名暂时不具备严格模式条件,应优先修该子域名;具备相应产品能力时再评估小范围配置规则,不要降低整个域名的安全级别。
修复后怎样验收,失败怎样回退
- 从外网访问报错域名,连续请求首页、登录、上传或回调等关键路径,确认不再出现 525/526。
- Cloudflare 仍保持预期代理状态和“完全(严格)”,边缘证书与源站证书不要混为一张。
- 对每个源站 IP 做带 SNI 的握手测试,证书域名、有效期和完整链均正确。
- 检查 Nginx 错误日志和 Cloudflare 错误分析,在至少一个业务高峰窗口内没有新的握手失败。
- 确认旧 Cookie、登录会话、API 和非首页子域名正常,避免只验收首页 200。
如果错误扩大,先停止继续改 DNS、TLS 版本和密码套件,恢复原 Nginx 配置与证书路径;若使用多节点,先摘除未通过测试的节点。临时降低验证模式只能保留到源站证书修复完成,不能把应急状态当成最终验收。
继续排查相关问题
- Cloudflare 521 和 522:源站拒绝与连接超时
- Let's Encrypt 自动续签失败:DNS、ACME 与短周期准备
- Nginx 反向代理与 HTTPS 配置
- CDN CNAME 与 DNS 解析排查

