Skip to content

mihomo 中的 TLS —— 概览

与 Xray 和 sing-box 不同,mihomo 没有 集中化的 TLS 块。每个代理 适配器与每个监听器入站都把自己一套 TLS 相关字段直接放在代理对象上。 本页归纳重复出现的字段集合,省得在每个协议页上反复查找。

通用 TLS 字段集

下列字段几乎出现在每个使用 TLS 的 mihomo 出站上(VLESS、VMess、 Trojan、Hysteria2、TUIC、AnyTLS、HTTP、SOCKS,以及通过插件启用的普通 Shadowsocks):

字段类型默认值描述
tlsboolfalse总开关 —— 用 TLS 包裹流。部分协议(Hysteria2、TUIC、AnyTLS)必须 TLS,会忽略该开关。
snistring(server 名)TLS Server Name Indication。默认为 server 字段。
servernamestring(sni)备用名(较旧适配器)。等价于 sni
alpn[]string(无)TLS 握手时宣告的 ALPN 列表。常见值:VLESS/VMess/Trojan 用 [h2, http/1.1];HTTP/3 协议用 [h3]
skip-cert-verifyboolfalse禁用证书校验。仅供测试。
fingerprintstring(未设置)把服务端证书锚定到 SHA-256 指纹(小写 hex,无冒号)。
certificatestring(未设置)mTLS 的客户端证书。
private-keystring(未设置)certificate 配对的私钥。
client-fingerprintstring(global)uTLS ClientHello 指纹。未设置时回退到顶层的 global-client-fingerprint

入站监听器侧的字段稍有不同:

字段类型默认值描述
certificatestring必填服务端证书(路径或内联 PEM)。
private-keystring必填服务端私钥。
client-auth-typestringno-client-certmTLS 客户端鉴权模式。五个值:no-client-certrequest-client-certrequire-any-client-certverify-client-cert-if-givenrequire-and-verify-client-cert
client-auth-certstring(未设置)client-auth-type 要求校验时,作为客户端根的 CA 集合。
ech-keystring(未设置)ECH 配置 / 密钥。参见 ECH

client-fingerprint 取值

mihomo 的 uTLS 实现接受:

取值模拟对象
chromeChrome 100+
firefoxFirefox 102+
safariSafari 16+
iosiOS Safari 16+
androidAndroid Chrome
edgeEdge Chromium
360360 安全浏览器
qqQQ 浏览器
random每条连接随机选其一
randomized每条连接生成一个合成的随机指纹

若按代理的 client-fingerprint 与顶层 global-client-fingerprint 都 未设置,mihomo 会发出标准的 Go crypto/tls ClientHello(DPI 会识 别为「不是浏览器」)。

承载 TLS 的子块

当协议需要超出扁平字段集的设置时,mihomo 把它们放进命名子块。最常用 的有:

  • reality-opts —— REALITY 客户端配置。
  • ech-opts —— Encrypted Client Hello 配置。
  • ws-opts.tlsgrpc-opts.tlsh2-opts.tls —— 传输块内的 TLS 开关。多数用户直接设置协议层的 tls: true,对这些保持默认。

在 mihomo 哪里设置 TLS

需要记住三处:

  1. 按出站 —— 直接放在 proxies: 的代理条目上。客户端 TLS 的 常用位置。
  2. 按入站 —— 放在 listeners: 的监听器条目上。certificate / private-key 对加可选 mTLS 字段。
  3. 顶层 tls: —— 见 TLS。仅 external-controller-tls(Clash API 端点)使用。它 作为 代理适配器的默认。

跨内核说明

  • Xray-core 把一切集中到 streamSettings.tlsSettings(按连接) 与 streamSettings.security: "tls"。参见 TLS — Xray-core
  • sing-box 在每个入站 / 出站上内嵌单一的 tls: { ... } 块, REALITY / ECH / uTLS 作为子字段。参见 TLS — sing-box

由 Argsment 出品的 Core Tutorial