mihomo 中的 TLS —— 概览
与 Xray 和 sing-box 不同,mihomo 没有 集中化的 TLS 块。每个代理 适配器与每个监听器入站都把自己一套 TLS 相关字段直接放在代理对象上。 本页归纳重复出现的字段集合,省得在每个协议页上反复查找。
通用 TLS 字段集
下列字段几乎出现在每个使用 TLS 的 mihomo 出站上(VLESS、VMess、 Trojan、Hysteria2、TUIC、AnyTLS、HTTP、SOCKS,以及通过插件启用的普通 Shadowsocks):
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
tls | bool | false | 总开关 —— 用 TLS 包裹流。部分协议(Hysteria2、TUIC、AnyTLS)必须 TLS,会忽略该开关。 |
sni | string | (server 名) | TLS Server Name Indication。默认为 server 字段。 |
servername | string | (sni) | 备用名(较旧适配器)。等价于 sni。 |
alpn | []string | (无) | TLS 握手时宣告的 ALPN 列表。常见值:VLESS/VMess/Trojan 用 [h2, http/1.1];HTTP/3 协议用 [h3]。 |
skip-cert-verify | bool | false | 禁用证书校验。仅供测试。 |
fingerprint | string | (未设置) | 把服务端证书锚定到 SHA-256 指纹(小写 hex,无冒号)。 |
certificate | string | (未设置) | mTLS 的客户端证书。 |
private-key | string | (未设置) | 与 certificate 配对的私钥。 |
client-fingerprint | string | (global) | uTLS ClientHello 指纹。未设置时回退到顶层的 global-client-fingerprint。 |
入站监听器侧的字段稍有不同:
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
certificate | string | 必填 | 服务端证书(路径或内联 PEM)。 |
private-key | string | 必填 | 服务端私钥。 |
client-auth-type | string | no-client-cert | mTLS 客户端鉴权模式。五个值:no-client-cert、request-client-cert、require-any-client-cert、verify-client-cert-if-given、require-and-verify-client-cert。 |
client-auth-cert | string | (未设置) | 当 client-auth-type 要求校验时,作为客户端根的 CA 集合。 |
ech-key | string | (未设置) | ECH 配置 / 密钥。参见 ECH。 |
client-fingerprint 取值
mihomo 的 uTLS 实现接受:
| 取值 | 模拟对象 |
|---|---|
chrome | Chrome 100+ |
firefox | Firefox 102+ |
safari | Safari 16+ |
ios | iOS Safari 16+ |
android | Android Chrome |
edge | Edge Chromium |
360 | 360 安全浏览器 |
qq | QQ 浏览器 |
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.tls、grpc-opts.tls、h2-opts.tls—— 传输块内的 TLS 开关。多数用户直接设置协议层的tls: true,对这些保持默认。
在 mihomo 哪里设置 TLS
需要记住三处:
- 按出站 —— 直接放在
proxies:的代理条目上。客户端 TLS 的 常用位置。 - 按入站 —— 放在
listeners:的监听器条目上。certificate/private-key对加可选 mTLS 字段。 - 顶层
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。
