系统时间不对导致机场连不上:TLS 握手失败原理与各平台校时方法
节点全部超时,日志里出现 certificate has expired、x509、handshake failure 或 VMess 的 invalid timestamp,很可能只是设备时间不准。本文解释为什么 TLS 和 VMess 对时间敏感、几分钟的误差为什么就能让所有节点失效、各平台怎么开自动校时,以及虚拟机、双系统、主板电池这些反复出问题的场景。
为什么时间会影响代理
绝大多数现代代理协议在建立连接时都有一步依赖时间:
- TLS 握手:Trojan、VLESS + TLS、Reality、Hysteria2、TUIC、Shadowsocks + TLS 插件,建连时客户端要校验服务器证书。证书有生效和过期时间,客户端用本机时间去比对。本机时间落后太多,证书「还没生效」;超前太多,证书「已过期」。两种情况都会让握手失败。
- VMess:协议本身把时间戳编进认证信息里,服务器用自己的时间去验证,默认允许的误差是前后 90 秒。差过这个范围,服务器直接丢弃数据包,客户端看到的就是超时。
- Reality:对时间的敏感程度和 TLS 一样,并且会伪装成真实网站的握手,时间不对连伪装的目标站也不会信。
- Shadowsocks(无 TLS)、SOCKS5:不依赖时间。所以偶尔出现「只有 SS 节点能用,其他全超时」的现象,时间问题是重要怀疑对象。
一般而言,时间误差超过一两分钟就可能出问题,超过几小时几乎必然全部失效。
怎么确认是时间问题
- 看日志。Clash / Mihomo 日志出现
x509: certificate has expired or is not yet valid、tls: handshake failure、remote error: tls: bad certificate;sing-box 出现类似的TLS handshake错误;v2rayN / Xray 的 VMess 出现invalid user或timestamp相关字样。 - 对时间。打开手机(手机一般会自动跟运营商校时)或访问 time.is,和电脑右下角时间比。注意看秒和分,差一两分钟肉眼不明显。
- 协议对比。同一机场的纯 Shadowsocks 节点能用、TLS 类节点全超时,概率很大。
- 回想最近做过什么。装过系统、换过主板电池、从休眠恢复、用过虚拟机快照、切过双系统、手动改过时间或时区。
各平台校时
Windows
设置 → 时间和语言 → 日期和时间:
- 「自动设置时间」打开;
- 「自动设置时区」打开(时区错也会导致显示时间对、实际 UTC 时间错);
- 点「立即同步」。显示「同步成功」才算完成。
同步失败的话:
- 默认 NTP 服务器 time.windows.com 国内访问不稳定。在「控制面板 → 日期和时间 → Internet 时间 → 更改设置」里把服务器改成
ntp.aliyun.com或ntp.ntsc.ac.cn,点「立即更新」。 - 命令行方式(管理员 PowerShell):
w32tm /resync;服务没运行时先net start w32time。 - Windows Time 服务被禁用的精简系统,要在「服务」里把 Windows Time 改成自动。
macOS
系统设置 → 通用 → 日期与时间 → 「自动设置时间和日期」打开,时区也设自动。NTP 服务器默认 time.apple.com,国内一般可用;不行时终端里 sudo sntp -sS ntp.aliyun.com 手动同步一次。
Android
设置 → 系统 → 日期和时间 → 「自动设置时间」「自动设置时区」。国内运营商会下发网络时间,一般很准。没有 SIM 卡的平板可能拿不到网络时间,开 Wi-Fi 后系统会用 NTP,但部分国产系统的 NTP 服务器国内不通,手动对一次。
iOS / iPadOS
设置 → 通用 → 日期与时间 → 「自动设置」。被关掉的情况多半是为了某个游戏或 App 的时间作弊,开代理之前先打开。
Linux
timedatectl 查看状态,sudo timedatectl set-ntp true 开启同步。用的是 chrony 或 systemd-timesyncd 的,在配置里把服务器改成国内 NTP。
路由器
OpenClash、ShellCrash 跑在路由器上时,路由器自己的时间也要对。OpenWrt 在「系统 → 系统」里设 NTP 服务器并启用客户端,路由器每次断电重启后时间会重置,NTP 没配好就会出现开机后代理不通、几分钟后自己恢复的现象。
反复出问题的场景
主板电池没电
台式机或老笔记本的 CMOS 电池耗尽,每次断电重启时间都回到出厂日期(常见 2000 年或某个固定年份)。开机后在联网校时完成前,所有 TLS 节点都不通。换一颗 CR2032 电池解决根本问题;临时办法是开机后手动同步一次。
虚拟机
虚拟机休眠、暂停、恢复快照后,客户机的时钟停留在挂起时刻,不会自动追上。表现为「虚拟机里代理突然全断,宿主机正常」。
处理:安装虚拟机增强工具(VMware Tools、VirtualBox Guest Additions、Parallels Tools、Hyper-V 集成服务)并开启「与宿主机同步时间」;或者在虚拟机里也开 NTP 自动校时;恢复快照后手动校一次。
Windows 与 Linux 双系统
Windows 默认把主板硬件时钟当作本地时间,Linux 默认当作 UTC。两边切换后其中一方显示的时间会差一个时区(国内是 8 小时),而 8 小时足以让所有 TLS 和 VMess 握手失败。
统一一种即可:
- 让 Linux 也用本地时间:
timedatectl set-local-rtc 1 --adjust-system-clock; - 或让 Windows 用 UTC:注册表
HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation新建 DWORDRealTimeIsUniversal值为 1。
手动改过时间
为了游戏、试用期、某个 App 的限制手动调过时间的,改回自动设置。有的用户忘了这件事,排查了半天节点和订阅。
时区错
时间看起来对,但时区设错了,实际 UTC 时间偏了几小时。TLS 校验用的是 UTC,所以照样失败。确认时区是「(UTC+08:00) 北京」而不是别的 +8 地区之外的值。
长时间关机的设备
放了几个月没开的笔记本、备用手机、电视盒子,开机后时间还停在上次关机那天。手机连上网后一般几秒内自动校准,但电视盒子和部分平板不一定,开机后先进设置看一眼时间,再打开代理。路由器方案尤其明显:路由器断电一晚,第二天早上开机后代理不通,几分钟后恢复,就是 NTP 校时还没完成。
国内 NTP 不通
少数网络环境下 NTP 端口(UDP 123)被运营商或公司网络限制,自动校时一直失败但系统不会明显提示。这时手动改 NTP 服务器也没用,只能对着手机手动把时间调准,然后关掉再打开自动校时,等网络条件允许时它会自己追上。
时间对了还是连不上
校时之后重新测延迟。如果仍然全超时,那就不是时间问题,按正常流程排查,参考节点全部超时和连上了但打不开网页。各协议对时间的依赖差异见代理协议详解。
速查
| 现象 | 时间相关的可能 |
|---|---|
| 日志 x509 / handshake / timestamp | 时间或时区错 |
| 只有 SS 能用 | TLS / VMess 节点因时间失效 |
| 开机前几分钟不通,之后恢复 | 主板电池或 NTP 慢 |
| 虚拟机里突然全断 | 休眠 / 快照后时钟没追上 |
| 双系统切换后不通 | RTC 本地时间 / UTC 不一致 |
相关
常见问题
时间差几分钟真的会导致所有节点连不上吗?
会。VMess 默认只允许前后 90 秒误差,TLS 证书校验也依赖本机时间。超出范围服务器直接拒绝握手,表现就是全部超时。
怎么判断是不是时间问题?
看日志有没有 certificate、x509、handshake、timestamp 字样;同时把设备时间和手机或网页时间对一下,差超过一分钟就先校时。
开了自动校时还是不对?
自动校时依赖 time.windows.com 等服务器,国内有时连不上。手动点一次「立即同步」,或者把 NTP 服务器改成 ntp.aliyun.com、ntp.ntsc.ac.cn。
虚拟机里的时间老是跑偏?
虚拟机休眠恢复后时钟不会自动追上。装虚拟机增强工具(VMware Tools、VirtualBox Guest Additions)开时间同步,或在虚拟机里也开 NTP。
双系统每次切换时间就差 8 小时?
Windows 默认把硬件时钟当本地时间,Linux 当 UTC。在 Linux 里执行 timedatectl set-local-rtc 1,或在 Windows 注册表里设 RealTimeIsUniversal,二者统一即可。
本文为信息整理与个人经验,不构成购买建议。机场政策与软件界面可能变化,以官方为准。发现过期内容请 联系纠错。