系统时间不对导致连不上怎么办?TLS 握手失败排查
客户端提示证书错误、TLS 握手失败、或订阅更新报证书问题?系统时间偏差过大是常被忽略的原因。本文讲清时间与加密连接的关系并给出校准方法。
直接回答:日志里出现 x509: certificate has expired or is not yet valid,或者订阅更新、节点连接同时报证书错误,先看系统时间。证书有生效期和过期期,系统时钟偏差超过几小时,客户端就会把所有证书判成无效,表现为「全部连不上」。校准时间,问题即消失。
怎么确认是时间问题
三个信号同时出现基本就是它:
- 浏览器打开随便一个 HTTPS 网站(不开代理)也提示「证书无效 / 您的时钟不正确」——Chrome 会直接写出「时钟慢了」;
- 客户端日志里是证书类报错而不是超时:Mihomo / sing-box 都是 Go 写的,报错原文是
x509: certificate has expired or is not yet valid;v2rayN 的日志里是tls: failed to verify certificate(日志位置见 v2rayN 教程); - 问题出现在重装系统、换主板、长期断电的电脑,或者刚从另一个时区回来。
订阅更新失败但节点能连,通常不是时间问题,见订阅更新失败怎么办。
校准时间
先看当前时间和真实时间差多少,再开自动同步:
- Windows:「设置 → 时间和语言 → 日期和时间」,打开「自动设置时间」,点「立即同步」;命令行(管理员)
w32tm /resync强制同步一次; - macOS:「系统设置 → 通用 → 日期与时间」,打开「自动设置日期与时间」;终端
sudo sntp -sS time.apple.com立即校准; - Linux:
timedatectl set-ntp true,timedatectl查看是否System clock synchronized: yes。
同步本身要联网,而你现在可能正因为时间不对连不上——先关掉代理用直连同步,国内时间服务器(如 ntp.aliyun.com)直连可达。
时区错了也算时间错
时间「看起来」对但时区不对,系统内部的 UTC 时间照样偏了好几个小时,效果一样。确认时区是「(UTC+08:00) 北京」;双系统(Windows + Linux)的电脑常见一边按本地时间、一边按 UTC 写硬件时钟,每次切换系统就差 8 小时,在 Linux 里执行 timedatectl set-local-rtc 1 统一即可。
每次关机都回到过去
开机就是某个固定的旧日期,是主板的 CMOS 电池没电了,关机后时钟停走。换一颗纽扣电池(CR2032),几块钱;换之前每次开机手动同步一次也能凑合。
校准后仍报证书错误的,才是线路层的问题(少数中转在特殊时期会被做 TLS 干扰),转节点连接不上;内核起不来另见客户端内核无法启动。同类问题见网络问题排查 · 客户端与系统。
常见问题
时间不准为什么会连不上?
加密连接(TLS)会校验证书有效期,依赖系统时间。时间偏差过大时证书被判为「未生效」或「已过期」,握手失败,表现为连不上或证书错误。
怎么快速排除?
检查系统日期时间是否正确,开启「自动设置时间」。校准后重试,若恢复即为时间问题。
时间总是不准怎么办?
多为主板电池老化或时区设置错误。开启网络自动同步时间,并确认时区正确。