Cloudflare 525 和 526 怎么排查?源站 TLS 与证书验证修复

先区分握手失败与严格证书验证失败,再安全恢复源站 HTTPS

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_DOMAINORIGIN_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,因此需要直连源站的业务应安装公开可信证书。

替换证书时怎样避免把站点切断

  1. 先确认目标站点、域名覆盖、证书链文件和私钥是一组,不在原文件上直接粘贴覆盖。
  2. 把新文件保存到新的受限路径,记录原 ssl_certificatessl_certificate_key 路径。
  3. 只修改目标站点的 server 块,运行 nginx -t。语法失败就恢复原路径,不执行 reload。
  4. 语法通过后使用 reload 平滑加载,不先停止整个 Web 服务。
  5. 再次用 openssl s_clientcurl --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 配置与证书路径;若使用多节点,先摘除未通过测试的节点。临时降低验证模式只能保留到源站证书修复完成,不能把应急状态当成最终验收。

继续排查相关问题

官方依据

云服务器教程Vue、React 单页应用刷新后 404 怎么办?Nginx History 路由与 API 分流2026-09-13云服务器教程Docker 提示 pull access denied 怎么办?镜像名、仓库权限与登录排查2026-09-13云服务器教程MySQL 报 ERROR 1205 Lock wait timeout 怎么办?阻塞事务与安全止损2026-09-12

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区