Clash MITM 抓包配置教程:解密 HTTPS 流量的完整指南

立即下载Clash入门 全平台支持 · 官方最新版

什么是 Clash MITM

MITM(Man-in-the-Middle,中间人)是 Clash Meta / mihomo 内核提供的一项进阶功能。它允许 Clash 在代理流量的过程中,对经过的 HTTPS 请求进行“解密再加密”,从而让外部抓包工具(如 Charles、mitmproxy、Wireshark)能够看到原本加密的 HTTPS 报文内容。

听起来有点“黑客”对不对?但实际上这是合规场景下非常重要的调试工具:

本教程以 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。

准备工作

在开始配置之前,确认以下条件:

  1. Clash Meta 内核:确保你的 Clash 客户端使用的是 Meta 版本(mihomo),原版 Clash 不支持完整的 MITM 功能
  2. 配置文件 config.yaml:能够找到并编辑当前的 Clash 配置
  3. 管理员权限:安装系统级 CA 需要管理员权限(macOS 需要开机密码)
  4. 浏览器或设备:决定你给哪个客户端安装证书(电脑/手机/平板)

第一步:生成 CA 证书

方法一:让 Clash 自动生成

Clash Meta 内核启动时,如果配置中启用了 MITM,会自动在以下目录生成一对证书:

文件包含:

方法二:手动生成自定义证书

如果想用自己的证书(推荐企业用户),可以用 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 系统

  1. 双击 mitm.ca.crt → “安装证书”
  2. 选择“本地计算机” → 下一步
  3. 选择“将所有证书放入下列存储” → 浏览 → “受信任的根证书颁发机构”
  4. 完成导入

或者用 PowerShell 静默安装(需管理员):

Import-Certificate -FilePath "$env:USERPROFILE\.config\mihomo\mitm.ca.crt" `
  -CertStoreLocation Cert:\LocalMachine\Root

macOS 系统

  1. 打开“钥匙串访问”(Keychain Access)
  2. 系统 → 文件 → 导入项目 → 选择 mitm.ca.crt
  3. 导入后双击该证书 → 展开“信任” → “使用此证书时” 选择“始终信任”
  4. 需要输入开机密码确认

或者用命令行:

sudo security add-trusted-cert -d -r trustRoot \
  -k /Library/Keychains/System.keychain \
  ~/.config/mihomo/mitm.ca.crt

iOS 设备

  1. 把 mitm.ca.crt 通过 AirDrop / 邮件传到 iPhone
  2. 系统会提示“已下载描述文件”,进入 设置 → 通用 → VPN与设备管理
  3. 点击证书 → “安装” → 输入锁屏密码
  4. 安装后还需要去 设置 → 通用 → 关于本机 → 证书信任设置 → 开启该 CA 的“完全信任”

Android 设备

Android 7.0+ 默认不信任用户安装的 CA 证书,需要额外配置:

  1. 把 mitm.ca.crt 放到设备
  2. 设置 → 安全 → 加密与凭据 → 安装证书 → CA证书 → 选择文件
  3. 关键步骤:修改 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 设为“专用”。

第四步:启用系统代理并验证

  1. 启动 Clash Meta(mihomo)客户端,确保配置加载成功
  2. 开启系统代理(Windows 设置 / macOS 网络偏好设置)
  3. 用浏览器访问一个你加入 MITM 名单的 HTTPS 站点
  4. 检查浏览器是否报错——正常情况下应该能正常访问

如果浏览器弹出了证书警告,说明 CA 没装好,回到第三步重做。

第五步:使用抓包工具查看明文

MITM 解密后,Clash 自身不会显示明文(这是设计如此),你需要配合外部抓包工具:

方案一:Charles(最简单)

  1. 打开 Charles → Proxy → SSL Proxying Settings
  2. 添加 SSL Proxying:Host *,Port 443
  3. 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 死活抓不到

原因:

  1. 该 App 使用了证书绑定(SSL Pinning),拒绝非系统证书
  2. 该 App 用了 HTTP/3 (QUIC) 而不是 TLS

解决:

排坑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 流量

解决:

进阶用法:自动化抓包分析

配合脚本批量提取数据

以分析某个 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 并卸载证书:

  1. 修改 config.yaml → mitm.enable: false
  2. 重启 Clash Meta
  3. 在系统中删除 CA 证书:
    • Windows:certlm.msc → 受信任的根证书颁发机构 → 找到 mihomo 证书 → 删除
    • macOS:钥匙串访问 → 系统钥匙串 → 找到 mihomo 证书 → 删除
  4. 把 mitm.ca.key 文件安全删除(粉碎,避免恢复)

总结

Clash MITM 是一项强大但需要谨慎使用的功能。本教程涵盖了从证书生成、配置编写到系统信任的完整流程:

  1. 核心是 CA 证书:让系统信任 Clash 签发的 CA 证书是关键
  2. 配合 rule-provider:通过域名白名单精细控制解密范围
  3. 移动端比桌面端复杂:Android 7+ 默认不信任用户 CA
  4. 抓包工具搭配:Charles 最简单、mitmproxy 最灵活、Wireshark+SSLKEYLOGFILE 最隐蔽
  5. 安全第一:调试完立即关闭 MITM,私钥妥善保管

掌握这套方法后,无论是调试 App、审计隐私数据还是分析 API 请求,都能事半功倍。

这篇教程有帮助吗?立即下载Clash入门试试吧!

全平台支持 · 安全无毒 · 官方最新版

下载Clash入门