问题 问题排查

TLS 握手失败怎么办?SSL 证书错误与握手超时排查

出现 TLS handshake timeout、ERR_SSL_PROTOCOL_ERROR 或证书无效提示时,常见原因是系统时间错误、安全软件解密 HTTPS、DNS 返回错误地址或客户端内核过旧。本文给出排查方法。

首次发布
最后更新
内容类型
问题排查
阅读时间
约 1 分钟

直接答案

TLS 握手失败表示客户端与服务器在建立加密连接时没有达成一致。最常见的原因是系统时间不准确导致证书校验失败,其次是杀毒软件或企业网络对 HTTPS 进行解密检查、DNS 把域名解析到了错误的服务器、节点或网络中间设备干扰握手,以及客户端内核过旧不支持机场使用的 TLS 特性。先校准时间、关闭 HTTPS 扫描,再检查 DNS 与客户端版本。

可能原因

  1. A

    系统时间不准确

    证书有有效期,系统时间偏差较大时,正常证书也会被判定为未生效或已过期。

  2. B

    安全软件或企业网络解密 HTTPS

    杀毒软件的 HTTPS 扫描、企业代理会替换网站证书,客户端不信任这些证书时握手失败。

  3. C

    DNS 解析到错误地址

    DNS 污染使域名指向了错误的服务器,对方返回的证书与域名不匹配,或者握手直接被中断。

  4. D

    网络中间设备干扰

    部分网络环境会根据 SNI 等特征中断 TLS 连接,表现为握手超时或连接被重置。

  5. E

    客户端或内核版本过旧

    机场使用了 Reality、uTLS 指纹等较新的 TLS 相关特性,旧版本内核不支持时会握手失败。

  6. F

    节点证书过期或配置错误

    机场节点的证书过期或域名配置有误时,所有使用该节点的连接都会握手失败。

检查方法

  • 检查系统时间、日期和时区是否正确,是否开启了自动同步。
  • 查看杀毒软件或安全软件是否开启了 HTTPS 扫描、网页防护等功能。
  • 在浏览器中查看出错网站的证书颁发者,判断是否被替换为安全软件或企业的证书。
  • 用 nslookup 查询域名,确认解析结果是否异常。
  • 对比同一网络下多个节点、多种协议的表现,判断是单个节点问题还是全局问题。

解决步骤

  1. 校准系统时间

    在系统设置中开启自动设置时间和时区,同步后重启浏览器和代理客户端。

  2. 关闭 HTTPS 扫描

    在杀毒软件中暂时关闭 HTTPS 扫描或加密连接检查功能,重新测试是否恢复。

  3. 排除 DNS 干扰

    刷新系统 DNS 缓存,检查浏览器安全 DNS 设置,必要时开启 TUN 模式让客户端统一接管 DNS。

  4. 升级客户端与内核

    将代理客户端升级到较新的稳定版本,确保支持机场使用的协议与 TLS 特性。

  5. 更换节点与协议

    如果只有部分节点握手失败,换同地区其他节点或其他协议;如果全部失败,更新订阅后再试。

先看报错发生在哪一层

TLS 错误可能出现在两个位置:一是浏览器访问网站时报错,二是代理客户端连接节点时报错。前者看浏览器提示,常与时间、DNS、安全软件有关;后者看客户端日志,常与节点证书、协议特性和网络干扰有关。分清位置再排查,能少走很多弯路。

常见错误信息对照

错误信息 出现位置 常见原因
ERR_SSL_PROTOCOL_ERROR 浏览器 握手被干扰或协议不兼容
ERR_CERT_DATE_INVALID 浏览器 系统时间错误
ERR_CERT_AUTHORITY_INVALID 浏览器 证书被安全软件或企业网络替换
ERR_CERT_COMMON_NAME_INVALID 浏览器 DNS 解析到错误服务器
TLS handshake timeout 客户端日志 网络干扰或节点不可达
x509: certificate has expired 客户端日志 时间错误或节点证书过期
remote error: tls 客户端日志 协议参数不匹配、内核过旧

注意不要为了消除报错而在客户端中开启 skip-cert-verify 或在浏览器中忽略证书警告继续访问。证书错误可能正是中间人攻击的信号。

不同客户端的排查重点

  • Clash Verge Rev / Mihomo:日志中的 TLS 错误通常带有节点名称,可据此判断是单节点还是全局问题;内核版本可在设置中查看。
  • Shadowrocket:节点测试失败时,先检查 iOS 系统时间,再更新订阅。
  • v2rayN:注意所选内核对 Reality 等特性的支持情况,切换内核后重新测试。

提示系统时间问题在长时间关机的电脑、更换主板电池的台式机以及双系统设备上尤其常见,优先检查。

协议层面的差异可参考 代理协议对比;DNS 引起的证书不匹配见 DNS 错误怎么办。

仍然无法解决怎么办?

如果以上步骤处理后仍然握手失败,建议换一款客户端导入同一订阅交叉验证,并联系机场客服说明报错信息和出现的节点,询问节点证书或配置是否有问题;同时查看机场状态页。在企业网络中,HTTPS 检查可能是单位的安全策略,请遵守所在单位的网络使用规定。

常见问题

TLS 握手失败怎么办?

TLS 握手失败表示客户端与服务器在建立加密连接时没有达成一致。最常见的原因是系统时间不准确导致证书校验失败,其次是杀毒软件或企业网络对 HTTPS 进行解密检查、DNS 把域名解析到了错误的服务器、节点或网络中间设备干扰握手,以及客户端内核过旧不支持机场使用的 TLS 特性。先校准时间、关闭 HTTPS 扫描,再检查 DNS 与客户端版本。

可以开启跳过证书验证来解决 TLS 错误吗?

不建议。跳过证书验证会让连接失去对中间人攻击的防护,应先找到时间、DNS 或安全软件等根本原因。

只有某个网站报证书错误,其他网站正常?

可能是该网站的 DNS 被污染或证书本身有问题,用其他节点或其他网络访问对比即可判断。

TLS 握手超时和连接超时有什么区别?

连接超时是 TCP 连接没有建立;TLS 握手超时是 TCP 已连上,但加密协商阶段没有完成,常与网络干扰或协议不兼容有关。