本文目录
日志里都有 handshake failed,失败的却可能是下载订阅、连接代理服务器或打开目标网站。对应的证书与设置不同,盲目换节点或关闭验证会掩盖原问题。找出错误发生的位置,再按原文检查时间、信任链和服务器名称,最后重复同一条失败请求。
TLS 握手失败:日志原文与失败位置决定排查方向
复制完整 TLS 错误,并记录它发生在订阅下载、节点连接还是目标网站访问。握手会协商加密通信,普通 HTTPS 通常由客户端验证服务端身份;下表按时间、证书和节点字段区分检查方向。
常见原文
| 日志文字 | 优先方向 |
|---|---|
| x509: certificate has expired or is not yet valid | 系统时间、证书有效期 |
| x509: certificate signed by unknown authority | 系统 CA、企业 SSL 检查、私有证书 |
| remote error: tls: handshake failure | SNI、协议字段、服务端 TLS 配置 |
| tls: failed to verify certificate: x509 | 证书链、servername 与实际证书名称 |
| EOF / connection reset by peer | 对端提前关闭、网络拦截;不能只凭这一句断定证书问题 |
复制错误前后几行,保留时间、目标域名和端口,但遮住订阅 token、UUID 与密码。只截“TLS failed”会丢掉真正能区分原因的部分。
订阅、单个节点与目标网站报错,检查对象不同
Profile 更新报 TLS,现有节点还能用
失败在订阅 URL;检查该域名证书、系统时间和网络检查设备。
只有一个节点报 handshake failure
失败在客户端到代理服务器;比较该节点的 server、port、SNI 与 TLS 字段。
节点能连,只有一个 HTTPS 网站报证书错误
查看目标站证书、浏览器/应用证书库和是否被安全软件解密。
所有节点同时开始 x509 报错
先看系统时间、内核升级和网络是否统一替换了证书。
证书报过期或尚未生效时,检查系统时间
# Linux
date -R
timedatectl status
# Windows PowerShell
Get-Date
w32tm /query /status证书有 Not Before 与 Not After。双系统切换、虚拟机快照、长期断电的 OpenWrt 或关闭自动校时,都可能让时间偏离。把日期、时区和 NTP 同步恢复后,重新启动 Mihomo 再复现一次;错误仍完全相同才继续检查握手字段。
单个节点失败时,对照 SNI 与服务端证书名称
TLS 节点连接的 server 可能是 IP,证书却签发给域名;这时配置通常需要正确的 servername 或 sni。值必须来自服务端配置,不能从网上猜一个热门域名。端口、传输类型、ALPN、Reality public-key/short-id 等字段也必须成套匹配。
proxies:
# 下列 IP、域名和密码都是占位值,不能直接连接
- name: tls-example
type: trojan
server: 203.0.113.10
port: 443
password: REDACTED
sni: edge.example.com
skip-cert-verify: false在同一网络查看服务器实际返回的证书
openssl s_client -connect edge.example.com:443 -servername edge.example.com -verify_hostname edge.example.com -verify_return_error -showcerts </dev/null
curl -Iv https://edge.example.com/在 openssl 输出中查看 subject、issuer、有效期与 Verify return code。以域名连接时,SNI 可能自动发送,不能仅凭删掉参数判断它未发送。
比较无 SNI 的结果前,确认所用 OpenSSL 支持 -noservername。删除 -servername 及其值,再加入 -noservername;保留同一目标、-verify_hostname 和 -verify_return_error。两个 SNI 参数不可并用。
同一目标在手机热点正常、公司网络却返回企业 CA 证书时,说明证书可能被检查设备替换。把两边结果交给管理员,不自行安装陌生根证书。
代理协议端口不一定提供普通 HTTPS 页面,curl 失败并不自动说明节点坏了;openssl 的证书与握手信息更有参考价值。Reality 等协议也不能按普通网站证书逐项套用,应回到对应协议文档。
公司网络的 HTTPS 检查是否替换了证书?
企业代理、安全网关和部分杀毒软件会重新签发 HTTPS 证书。受管设备应由管理员安装组织 CA 并说明哪些流量允许检查;个人不要从报错网页下载陌生根证书,也不要为让 Clash 更新成功关闭全系统证书验证。
换手机热点后同一订阅 URL 立即正常,是网络路径差异的证据。把公司网络下的 issuer、错误时间和目标域名交给管理员,比不断换节点更有用。
修复后重复原来失败的那条连接
验证结果
- 系统时间与时区正确,重启内核后不再出现 not yet valid/expired
- 订阅失败时,手动更新成功且更新时间变化
- 节点失败时,同一节点完成握手并产生真实连接记录
- 目标网站失败时,证书 issuer 与域名符合预期
- 临时关闭的证书检查或安全设置已经恢复
- skip-cert-verify 保持 false,除非受控测试有明确理由
