问题 问题排查
TLS 握手失败怎么办?SSL 证书错误与握手超时排查
出现 TLS handshake timeout、ERR_SSL_PROTOCOL_ERROR 或证书无效提示时,常见原因是系统时间错误、安全软件解密 HTTPS、DNS 返回错误地址或客户端内核过旧。本文给出排查方法。
- 作者
- 网络研究组
- 首次发布
- 最后更新
- 内容类型
- 问题排查
- 阅读时间
- 约 1 分钟
直接答案
TLS 握手失败表示客户端与服务器在建立加密连接时没有达成一致。最常见的原因是系统时间不准确导致证书校验失败,其次是杀毒软件或企业网络对 HTTPS 进行解密检查、DNS 把域名解析到了错误的服务器、节点或网络中间设备干扰握手,以及客户端内核过旧不支持机场使用的 TLS 特性。先校准时间、关闭 HTTPS 扫描,再检查 DNS 与客户端版本。
可能原因
- A
系统时间不准确
证书有有效期,系统时间偏差较大时,正常证书也会被判定为未生效或已过期。
- B
安全软件或企业网络解密 HTTPS
杀毒软件的 HTTPS 扫描、企业代理会替换网站证书,客户端不信任这些证书时握手失败。
- C
DNS 解析到错误地址
DNS 污染使域名指向了错误的服务器,对方返回的证书与域名不匹配,或者握手直接被中断。
- D
网络中间设备干扰
部分网络环境会根据 SNI 等特征中断 TLS 连接,表现为握手超时或连接被重置。
- E
客户端或内核版本过旧
机场使用了 Reality、uTLS 指纹等较新的 TLS 相关特性,旧版本内核不支持时会握手失败。
- F
节点证书过期或配置错误
机场节点的证书过期或域名配置有误时,所有使用该节点的连接都会握手失败。
检查方法
- 检查系统时间、日期和时区是否正确,是否开启了自动同步。
- 查看杀毒软件或安全软件是否开启了 HTTPS 扫描、网页防护等功能。
- 在浏览器中查看出错网站的证书颁发者,判断是否被替换为安全软件或企业的证书。
- 用 nslookup 查询域名,确认解析结果是否异常。
- 对比同一网络下多个节点、多种协议的表现,判断是单个节点问题还是全局问题。
解决步骤
-
校准系统时间
在系统设置中开启自动设置时间和时区,同步后重启浏览器和代理客户端。
-
关闭 HTTPS 扫描
在杀毒软件中暂时关闭 HTTPS 扫描或加密连接检查功能,重新测试是否恢复。
-
排除 DNS 干扰
刷新系统 DNS 缓存,检查浏览器安全 DNS 设置,必要时开启 TUN 模式让客户端统一接管 DNS。
-
升级客户端与内核
将代理客户端升级到较新的稳定版本,确保支持机场使用的协议与 TLS 特性。
-
更换节点与协议
如果只有部分节点握手失败,换同地区其他节点或其他协议;如果全部失败,更新订阅后再试。
先看报错发生在哪一层
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 等特性的支持情况,切换内核后重新测试。
提示系统时间问题在长时间关机的电脑、更换主板电池的台式机以及双系统设备上尤其常见,优先检查。
仍然无法解决怎么办?
如果以上步骤处理后仍然握手失败,建议换一款客户端导入同一订阅交叉验证,并联系机场客服说明报错信息和出现的节点,询问节点证书或配置是否有问题;同时查看机场状态页。在企业网络中,HTTPS 检查可能是单位的安全策略,请遵守所在单位的网络使用规定。
常见问题
TLS 握手失败怎么办?
TLS 握手失败表示客户端与服务器在建立加密连接时没有达成一致。最常见的原因是系统时间不准确导致证书校验失败,其次是杀毒软件或企业网络对 HTTPS 进行解密检查、DNS 把域名解析到了错误的服务器、节点或网络中间设备干扰握手,以及客户端内核过旧不支持机场使用的 TLS 特性。先校准时间、关闭 HTTPS 扫描,再检查 DNS 与客户端版本。
可以开启跳过证书验证来解决 TLS 错误吗?
不建议。跳过证书验证会让连接失去对中间人攻击的防护,应先找到时间、DNS 或安全软件等根本原因。
只有某个网站报证书错误,其他网站正常?
可能是该网站的 DNS 被污染或证书本身有问题,用其他节点或其他网络访问对比即可判断。
TLS 握手超时和连接超时有什么区别?
连接超时是 TCP 连接没有建立;TLS 握手超时是 TCP 已连上,但加密协商阶段没有完成,常与网络干扰或协议不兼容有关。