疑难解答进阶

TLS 握手失败怎么办?证书错误、SNI 不匹配与系统时间不同步

TLS 握手失败意味着连接在传输任何数据之前就断了。最常见的原因是系统时间不准,其次是订阅过旧、SNI 与证书不匹配,以及网络中间设备干扰。

文章目录
  1. TLS 握手失败是什么意思
  2. 第一优先:系统时间
  3. 时间正确之后:配置与证书
  4. 网络环境与协议
  5. 快速自查清单
  6. 常见问题
  7. 参考资料

简要回答

TLS 握手失败时,第一件事是校准系统时间并确认时区为 UTC+8,时间偏差会让所有基于 TLS 的节点同时失败。时间无误后,更新订阅、删除旧节点重新导入,对照原始订阅检查 SNI 是否被改动。如果只在校园网或公司网络失败、换手机热点就正常,问题在网络中间设备,可以换网络或换协议测试。

TLS 握手失败是什么意思

TLS 握手TLS Handshake

客户端与服务器在正式传输数据前互相确认身份、协商加密方式的过程。握手失败,说明连接在传输任何数据之前就被中止了。Trojan、VLESS、VMess+TLS 等协议都依赖这一步。

SNIServer Name Indication

客户端在握手开始时告诉服务器「我要访问哪个域名」。服务器据此返回对应的证书。对于 Trojan、VLESS 这类协议,节点配置里的 SNI 必须与服务器证书对得上,否则握手会被判失败。

第一优先:系统时间

证书有生效时间和过期时间,客户端用本机时钟去判断证书是否在有效期内。时钟偏差几个小时以上,有效的证书也会被当成「尚未生效」或「已过期」,于是所有走 TLS 的节点一起失败。

现象所有 TLS 节点同时失败,日志出现 x509: certificate has expired or is not yet valid 或 failed to verify certificate

检查电脑显示的时间与真实时间是否一致、时区是否为 UTC+08:00

处理

开启自动同步时间并立即同步一次,然后重启客户端。不开代理时浏览器访问普通 HTTPS 网站也报证书或时钟错误,基本可以确定是时间问题。

  1. Windows

    在「设置 → 时间和语言 → 日期和时间」中打开「自动设置时间」,点击「立即同步」;也可以在管理员终端运行 w32tm /resync。

  2. macOS

    在系统设置的「日期与时间」里打开自动设置;或在终端运行 sudo sntp -sS time.apple.com。

  3. Linux

    运行 timedatectl set-ntp true,再用 timedatectl 确认显示已同步。

现象每次开机时间都回到很久以前的日期

检查主板纽扣电池是否没电

处理

主板电池(通常是 CR2032)耗尽后,断电期间时钟会停走。换一块电池即可;更换前每次开机手动同步一次。

现象Windows 与 Linux 双系统,每次切换后时间差 8 小时

检查两个系统对硬件时钟的理解是否一致

处理

一个系统把硬件时钟当本地时间,另一个当 UTC。可以在 Linux 上运行 timedatectl set-local-rtc 1 统一按本地时间处理。

时间正确之后:配置与证书

现象机场调整线路或换域名后开始失败

检查本地订阅是否过旧

处理

机场可能更换了证书、域名或 SNI,旧配置自然对不上。更新订阅,删除旧节点后重新导入。

现象日志提示域名不匹配或握手失败,节点配置是手动改过或转换过的

检查SNI、伪装域名是否与原始订阅一致

处理

对照机场原始订阅内容逐字核对 SNI 和伪装域名,常见错误来自手动编辑或订阅转换工具。

现象开关 skip-cert-verify 后结果不同

检查机场对证书校验的要求

处理

按机场的说明设置。不要把它当成长期解决方案,它掩盖的往往是时间、SNI 或 DNS 问题。

现象改了 DNS 之后就能连上

检查节点域名是否被解析到了错误 IP

处理

解析到错误地址,拿到的自然是不匹配的证书。在客户端里使用加密 DNS,详见 DNS 错误排查。

网络环境与协议

现象在学校或公司网络失败,换手机热点正常

检查网络中是否有替换证书、拦截 TLS 的中间设备

处理

换一个网络使用,或者改用其他协议的节点。

现象某一种协议的所有节点都在握手阶段被重置,其他协议正常

检查该协议的 TLS 特征是否被识别干扰

处理

切换到机场提供的其他协议,例如 Hysteria2、TUIC 或 Reality 类节点。

现象退出杀毒软件后恢复正常

检查安全软件是否开启了 HTTPS 扫描

处理

关闭安全软件的 HTTPS 扫描,或把客户端加入白名单;系统根证书损坏或过期时,通过系统更新修复。

快速自查清单

检查项 正常表现
系统时间 与标准时间一致,已开启自动同步
时区 UTC+08:00
订阅 已更新,旧节点已删除
SNI 与伪装域名 与原始订阅一致
skip-cert-verify 按机场说明设置
换手机热点测试 结果与原网络一致
安全软件 未开启 HTTPS 扫描或已加白名单

时间准确、订阅最新、多个网络下同一批节点都失败,而其他节点正常,说明可能是机场一侧证书过期或推送了错误配置,把节点名称和日志发给客服。同类证书问题反复出现,属于运维层面的问题,可以参考机场稳定性测试方法重新评估。握手成功但仍连不上,转看代理连接失败排查。查看日志的方法见 V2RayN 使用教程。

常见问题

系统时间只差几分钟,也会导致 TLS 握手失败吗?

证书的有效期是按天计算的,几分钟的偏差通常不会让证书失效,几个小时以上的偏差才是常见诱因。不过 VMess 等协议本身对时间较敏感,服务端可能拒绝偏差过大的连接,所以无论如何都建议开启自动同步时间。

打开 skip-cert-verify 就能连上,可以一直这样用吗?

不建议。它会关闭对服务器身份的校验,在可能被劫持的网络里风险更高,只适合临时用来判断是不是证书问题。是否需要开启,以机场的说明为准:少数使用自签证书的节点确实要求开启。

开代理后访问普通网站也出现证书错误,是机场的问题吗?

先关掉代理再访问。关掉后仍报错,原因在系统时间、根证书或网络中间设备;只在开代理时报错,检查客户端是否启用了 HTTPS 解密或 MITM 类功能。

参考资料

  1. 机场Z:TLS 握手错误怎么办?证书错误、SNI 与时间不同步
  2. 梯子指南:系统时间不对导致连不上怎么办?TLS 握手失败排查