Clash MITM 抓包配置教程:解密 HTTPS 流量的完整指南
什么是 Clash MITM
MITM(Man-in-the-Middle,中间人)是 Clash Meta / mihomo 内核提供的一项进阶功能。它允许 Clash 在代理流量的过程中,对经过的 HTTPS 请求进行“解密再加密”,从而让外部抓包工具(如 Charles、mitmproxy、Wireshark)能够看到原本加密的 HTTPS 报文内容。
听起来有点“黑客”对不对?但实际上这是合规场景下非常重要的调试工具:
- 调试移动 App 的 API 请求是否符合预期
- 检查某些客户端是否偷偷上传隐私数据
- 分析某个海外服务(如 AI 工具)的请求结构
- 在自建节点出现异常时定位是哪个域名走了代理
本教程以 Clash Meta (mihomo) 内核 为例展开说明,Clash Verge Rev、Clash for Windows 等客户端的 MITM 配置思路完全一致。
MITM 的工作原理简述
正常 HTTPS 通信是这样的:
客户端 ──TLS──> 服务端
(请求被加密,只有客户端和服务端能看到明文)
开启 MITM 后,Clash 会自己签发一张 CA 证书,假装自己是服务端:
客户端 ──TLS(用Clash证书解密)──> Clash ──TLS(用原证书)──> 真实服务端
(Clash 能看到明文,但两端仍然以为自己在和对端通信)
为了不让浏览器/系统报错,你必须把这张 CA 证书“信任”到系统/浏览器的证书存储里。所以 MITM 配置的核心是两个步骤:① 让 Clash 启用 MITM;② 让系统信任 Clash 的 CA。
准备工作
在开始配置之前,确认以下条件:
- Clash Meta 内核:确保你的 Clash 客户端使用的是 Meta 版本(mihomo),原版 Clash 不支持完整的 MITM 功能
- 配置文件 config.yaml:能够找到并编辑当前的 Clash 配置
- 管理员权限:安装系统级 CA 需要管理员权限(macOS 需要开机密码)
- 浏览器或设备:决定你给哪个客户端安装证书(电脑/手机/平板)
第一步:生成 CA 证书
方法一:让 Clash 自动生成
Clash Meta 内核启动时,如果配置中启用了 MITM,会自动在以下目录生成一对证书:
- Windows:
C:\Users\<用户>\.config\mihomo\mitm.ca.crt - macOS:
~/.config/mihomo/mitm.ca.crt - Linux:
~/.config/mihomo/mitm.ca.crt
文件包含:
mitm.ca.crt:CA 证书(公钥)mitm.ca.key:CA 私钥(请勿泄露)
方法二:手动生成自定义证书
如果想用自己的证书(推荐企业用户),可以用 OpenSSL 生成:
# 1. 生成 CA 私钥
openssl genrsa -out clash-ca.key 2048
# 2. 生成 CA 证书(3650天=10年)
openssl req -new -x509 -days 3650 -key clash-ca.key -out clash-ca.crt \
-subj "/C=CN/ST=GD/L=SZ/O=Private/OU=Dev/CN=Clash MITM CA"
# 3. 转换为 DER 格式(某些 Android 设备需要)
openssl x509 -in clash-ca.crt -outform DER -out clash-ca.der
把生成的 clash-ca.crt 和 clash-ca.key 放到上面提到的 mihomo 配置目录下,重启 Clash 即可生效。
第二步:修改 Clash 配置文件
打开你的 config.yaml,添加或修改 mitm 段。下面是一个最小可用配置:
# ============ MITM 配置 ============
mitm:
enable: true # 启用 MITM
force-https: true # 强制将 http 重写为 https
# cacert: "./mitm/ca.crt" # 可选:自定义 CA 证书路径
# 抓包白名单:只有这些域名会走 MITM 解密
snell:
warn-握-shares-cert: true
hosts:
# MITM 不处理的域名(防止解密本地服务)
"127.0.0.1": []
"localhost": []
# 抓包白名单
# 留空表示对所有 HTTPS 流量都解密(不建议生产环境用)
# 实际配置中通常配合 rule-provider 精细控制
注意:上述配置是简化版。完整配置通常通过 rule-provider 实现按域名选择性 MITM:
rule-providers:
mitm-target:
type: http
url: "https://cdn.jsdelivr.net/.../my-mitm-list.yaml"
interval: 86400
behavior: classical
rules:
# 这些域名走 MITM 解密
- DOMAIN-SUFFIX,openai.com,MITM
- DOMAIN-SUFFIX,anthropic.com,MITM
- DOMAIN-SUFFIX,api.example.com,MITM
# 其他规则保持不变
- GEOIP,CN,DIRECT
- MATCH,Proxy
MITM 是一个特殊的“动作”,告诉 Clash 对该流量启用中间人解密。完整的 actions 列表参考 mihomo 官方文档。
第三步:在系统中安装并信任 CA 证书
证书生成了,配置也改了,但浏览器/系统仍然不信任这张证书,访问 HTTPS 站点时会报 NET::ERR_CERT_AUTHORITY_INVALID。接下来把证书安装到系统信任存储。
Windows 系统
- 双击
mitm.ca.crt→ “安装证书” - 选择“本地计算机” → 下一步
- 选择“将所有证书放入下列存储” → 浏览 → “受信任的根证书颁发机构”
- 完成导入
或者用 PowerShell 静默安装(需管理员):
Import-Certificate -FilePath "$env:USERPROFILE\.config\mihomo\mitm.ca.crt" `
-CertStoreLocation Cert:\LocalMachine\Root
macOS 系统
- 打开“钥匙串访问”(Keychain Access)
- 系统 → 文件 → 导入项目 → 选择
mitm.ca.crt - 导入后双击该证书 → 展开“信任” → “使用此证书时” 选择“始终信任”
- 需要输入开机密码确认
或者用命令行:
sudo security add-trusted-cert -d -r trustRoot \
-k /Library/Keychains/System.keychain \
~/.config/mihomo/mitm.ca.crt
iOS 设备
- 把
mitm.ca.crt通过 AirDrop / 邮件传到 iPhone - 系统会提示“已下载描述文件”,进入 设置 → 通用 → VPN与设备管理
- 点击证书 → “安装” → 输入锁屏密码
- 安装后还需要去 设置 → 通用 → 关于本机 → 证书信任设置 → 开启该 CA 的“完全信任”
Android 设备
Android 7.0+ 默认不信任用户安装的 CA 证书,需要额外配置:
- 把
mitm.ca.crt放到设备 - 设置 → 安全 → 加密与凭据 → 安装证书 → CA证书 → 选择文件
- 关键步骤:修改 App 的
network_security_config.xml,或在开发模式下使用:
# 把证书 push 到系统证书目录(需要 root)
adb root
adb remount
adb push mitm.ca.crt /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/mitm.ca.crt
adb reboot
非 root 设备 + Android 14+:进入 设置 → 隐私 → 加密与凭据 → 更多信任设置,把 CA 设为“专用”。
第四步:启用系统代理并验证
- 启动 Clash Meta(mihomo)客户端,确保配置加载成功
- 开启系统代理(Windows 设置 / macOS 网络偏好设置)
- 用浏览器访问一个你加入 MITM 名单的 HTTPS 站点
- 检查浏览器是否报错——正常情况下应该能正常访问
如果浏览器弹出了证书警告,说明 CA 没装好,回到第三步重做。
第五步:使用抓包工具查看明文
MITM 解密后,Clash 自身不会显示明文(这是设计如此),你需要配合外部抓包工具:
方案一:Charles(最简单)
- 打开 Charles → Proxy → SSL Proxying Settings
- 添加 SSL Proxying:Host
*,Port443 - Charles 会自动接收 Clash 转发的明文
方案二:mitmproxy(最灵活)
# 安装
pip install mitmproxy
# 启动并监听 8080 端口
mitmproxy --listen-port 8080
把系统代理指向 mitmproxy 端口就能看到所有明文请求。
方案三:Wireshark + SSLKEYLOGFILE(更专业)
# 设置环境变量让浏览器导出 session key
export SSLKEYLOGFILE=~/sslkey.log
# Chrome / Firefox 会把 TLS session key 写到该文件
# Wireshark 打开抓包文件
# Edit → Preferences → Protocols → TLS → (Pre)-Master-Secret log → 选择 sslkey.log
这种方法不需要安装任何 CA,是更隐蔽的方案。
常见排坑指南
排坑1:证书一直报错
症状:浏览器打开任意 HTTPS 站点都报 NET::ERR_CERT_AUTHORITY_INVALID
原因:CA 证书没有正确安装到“受信任的根证书颁发机构”(而不是“中间证书颁发机构”)
解决:
# Windows 检查证书是否在正确位置
Get-ChildItem Cert:\LocalMachine\Root | Where-Object { $_.Subject -like "*mihomo*" }
# 如果没找到,重新安装到 Root
Import-Certificate -FilePath "mitm.ca.crt" -CertStoreLocation Cert:\LocalMachine\Root
排坑2:部分 App 抓不到内容
症状:浏览器能解密,但某个 App 死活抓不到
原因:
- 该 App 使用了证书绑定(SSL Pinning),拒绝非系统证书
- 该 App 用了 HTTP/3 (QUIC) 而不是 TLS
解决:
- 绕过 SSL Pinning:用 Frida + objection 框架 hook 校验函数
- 关闭 QUIC:在 Chrome 地址栏输入
chrome://flags/#enable-quic改为 Disabled - 用旧版 App:部分老版本 App 没有 SSL Pinning
排坑3:MITM 后某些网站打不开
症状:开启 MITM 后某些网站(如银行、政府)显示证书错误
原因:这些网站用了 HSTS(强制 HTTPS)并把 CA 加入了 HSTS Preload List
解决:把这类域名加入 MITM 排除列表:
# 不解密的域名
rules:
- DOMAIN-SUFFIX,icbc.com.cn,DIRECT,no-resolve
- DOMAIN-SUFFIX,alipay.com,DIRECT,no-resolve
排坑4:mitm.ca.key 泄露风险
症状:CA 私钥在多台设备间共享
风险:拿到你的 CA 私钥的人可以解密你所有的 HTTPS 流量
解决:
- 私钥仅保存在本地设备
- 排查完成后立即关闭 MITM(
enable: false) - 给每台设备生成独立的 CA,不要复用
进阶用法:自动化抓包分析
配合脚本批量提取数据
以分析某个 AI 服务的请求结构为例:
import mitmproxy.http
import json
class AIMITM:
def response(self, flow: mitmproxy.http.HTTPFlow):
# 只关心目标域名
if "openai.com" in flow.request.pretty_host:
data = {
"url": flow.request.pretty_url,
"method": flow.request.method,
"headers": dict(flow.request.headers),
"body": flow.request.content.decode('utf-8', errors='ignore')[:500]
}
with open("openai_requests.jsonl", "a") as f:
f.write(json.dumps(data, ensure_ascii=False) + "\n")
addons = [AIMITM()]
在 CI 中跑回归测试
# 用 curl + --cacert 验证证书替换是否正确
curl --cacert ./mitm.ca.crt https://api.openai.com/v1/models
# 期望输出:能正常返回模型列表(明文)
关闭 MITM 的正确姿势
调试完成后,记得关闭 MITM 并卸载证书:
- 修改
config.yaml→mitm.enable: false - 重启 Clash Meta
- 在系统中删除 CA 证书:
- Windows:
certlm.msc→ 受信任的根证书颁发机构 → 找到 mihomo 证书 → 删除 - macOS:钥匙串访问 → 系统钥匙串 → 找到 mihomo 证书 → 删除
- Windows:
- 把
mitm.ca.key文件安全删除(粉碎,避免恢复)
总结
Clash MITM 是一项强大但需要谨慎使用的功能。本教程涵盖了从证书生成、配置编写到系统信任的完整流程:
- 核心是 CA 证书:让系统信任 Clash 签发的 CA 证书是关键
- 配合 rule-provider:通过域名白名单精细控制解密范围
- 移动端比桌面端复杂:Android 7+ 默认不信任用户 CA
- 抓包工具搭配:Charles 最简单、mitmproxy 最灵活、Wireshark+SSLKEYLOGFILE 最隐蔽
- 安全第一:调试完立即关闭 MITM,私钥妥善保管
掌握这套方法后,无论是调试 App、审计隐私数据还是分析 API 请求,都能事半功倍。
这篇教程有帮助吗?立即下载Clash入门试试吧!
全平台支持 · 安全无毒 · 官方最新版