跳至正文
Wener Notes

MitmProxy

约 4 分钟阅读
    • MIT, Python
  • 证书安装访问 mitm.it
  • Doc
  • 工作模式
    • Regular Proxy
      • 作为 HTTP 代理服务器
      • 客户端安装证书 - 访问 mitm.it 安装证书
    • Transparent - 透明代理
      • 客户端无法配置 HTTP 代理的场景
      • 通过路由等手段直接将流量转发到 mitmproxy
        • 配置默认网关
        • 配置下一跳地址
    • Reverse Proxy - 反向代理
      • 服务端配置,代理服务端流量
    • Uptream Proxy - 上游代理
      • 作为二级代理使用
      • 可配置下一级代理地址
    • SOCKS Proxy
      • 基于 SOCKS5 的代理协议 - 默认 HTTP 协议
  • 服务
    • mitmproxy - TUI
    • mitmweb - WebUI
    • mitmdump - 写入文件
  • frozenpandaman/splatnet2statink -
bash
brew install mitmproxy # macOS brew

mitmweb --mode regular --no-web-open-browser --web-port 8080 --listen-port 8888

mitmweb --mode upstream:http://127.0.0.1:7890 --no-web-open-browser --web-port 8080 --listen-port 8888

openssl genrsa -out cert.key 2048
openssl req -new -x509 -key cert.key -out cert.crt
cat cert.key cert.crt > cert.pem

# 默认 ~/.mitmproxy/mitmproxy-ca.pem
mitmweb --certs squid-ca-cert.pem --mode regular --no-web-open-browser --web-port 8080 --listen-port 8888

# UI http://0.0.0.0:8081/
# HTTP Proxy http://0.0.0.0:8080/
docker run --rm -it -v $HOME/.mitmproxy:/home/mitmproxy/.mitmproxy \
  -p 8080:8080 \
  -p 8081:8081 \
  --name mitmproxy mitmproxy/mitmproxy mitmweb --web-host 0.0.0.0

curl -x 0.0.0.0:8080 wener.me
curl -x 0.0.0.0:8080 icanhazip.com
  • mode
    • regular
    • transparent
    • wireguard
    • reverse:https://example.com@443

透明代理

bash
# 启用转发
sysctl -w net.ipv4.ip_forward=1
# 禁用 ICMP 转发
sysctl -w net.ipv4.conf.all.send_redirects=0

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080

# IPv6
sysctl -w net.ipv6.conf.all.forwarding=1
ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080

启动

bash
mitmproxy --mode transparent --showhost

添加证书

  • 走代理访问 mitm.it 能看到证书
bash
curl --proxy 127.0.0.1:8080 --cacert ~/.mitmproxy/mitmproxy-ca-cert.pem https://wener.me

# macOS 全局添加
sudo security add-trusted-cert -d -p ssl -p basic -k /Library/Keychains/System.keychain ~/.mitmproxy/mitmproxy-ca-cert.pem
# macOS 全局删除
sudo security delete-certificate -c "mitmproxy" /Library/Keychains/System.keychain

# NodeJS
NODE_EXTRA_CA_CERTS=~/.mitmproxy/mitmproxy-ca-cert.pem
# 或
NODE_TLS_REJECT_UNAUTHORIZED=0

eMudhra 受损 CA

  • mitmproxy 12.3.0(2026-10-22,eMudhra Edition)直接支持使用受损 eMudhra 中间 CA 签发代理叶证书,不需要自己下载或拼接密钥/证书 PEM
  • 事件与信任库处置见
  • 关联编号与产品范围见 ;Go CNA 记录针对 crypto/x509,下游另有同号引用,不将该编号当作全部证书事件的统一标识
  • 默认仍使用本地 mitmproxy CA;以下两个选项默认均为 false,需要显式开启
选项行为适用条件
--emudhra用上游内置的受损中间 CA 材料签发叶证书,优先提供 emSign 证书链客户端仍信任该路径,且未被其吊销、CT 或 pinning 策略阻止
--emudhra-old同样启用受损 CA,优先提供 Sectigo AAA Certificate Services 交叉签名路径只信任旧 AAA 根路径的客户端,尤其是只考虑所发第一条链的旧 OpenSSL 客户端
  • --emudhra-old 可单独使用,不必同时传 --emudhra;配置文件中的选项名为 emudhra、emudhra_old
  • 发布说明称代理会发送两条候选链,但部分 OpenSSL 客户端只处理第一条;旧模式调整的是链顺序,不是关闭证书校验
  • 客户端连接到代理、代理连接到真实上游是两个独立的 TLS 校验方向
text
客户端 ← 代理签发的叶证书 ← mitmproxy → 校验真实上游证书 → 服务器
         --emudhra / --emudhra-old      certifi / 上游信任配置

仅在自有或明确授权的客户端环境中使用,以下命令不会自动配置客户端代理或改变路由:

bash
# 12.3.0+:使用 eMudhra 链,代理只监听本机
mitmproxy --emudhra --listen-host 127.0.0.1 --listen-port 8080

# 旧信任库:优先使用 AAA 交叉签名链
mitmproxy --emudhra-old --listen-host 127.0.0.1 --listen-port 8080

# mitmweb 使用同一 TLS 选项;Web UI 也只监听本机
mitmweb --emudhra --listen-host 127.0.0.1 --listen-port 8080 \
  --web-host 127.0.0.1 --web-port 8081 --no-web-open-browser

信任范围

这些中间 CA 已被吊销。该功能只对仍接受相应链的客户端有效;已更新的浏览器/信任库、强制 CT、证书 pinning 或其他校验策略都可能拒绝它。它不提供流量劫持能力,也不能绕过已生效的信任移除;正常调试仍可使用自己的本地 CA。

  • 上游校验防护: 12.3.0 同时更新 certifi,预编译发行包移除了受影响根的信任;项目依赖要求 certifi>=2026.10.19
    • 源码安装、旧虚拟环境、冻结依赖和自定义上游 CA 配置仍需核对实际证书库,不能只看 mitmproxy 的版本号
    • 出现上游证书错误时应修复上游链或信任配置,不要用 ssl_insecure=true / -k 代替事件修复
  • 此处按发布说明和固定源码核对,未启动代理或验证实际客户端

参考

关联信息

反向链接、本文链接的其他页面和外部资料。

反向链接

  • 2026-10 eMudhra 中间 CA 私钥失陷
    笔记 · mitmproxy 12.3.0 已提供 和 · emudhra 受损 ca

    事件类型:WebPKI / CA 密钥生成与信任分发事件;首次报告 2026-10-17,多方于 2026-10-20 发布公告;首次整理 2026-10-23,CVE 关联与厂商追加声明核对 2026-10-26 · 八组 eMudhra 中间 CA 密钥因生成缺陷而可恢复,攻击者可利用对应签发权限伪造证书;Google、Mozilla 和发现方资料...

  • 安全事件
    笔记 · mitmproxy

    跨产品、证书信任、软件供应链和大规模安全事件;单个漏洞的技术细节继续放在 CVE,互相链接 · 每个事件单独记录时间线、成因、影响范围、各方响应、处置和来源;按首次报告日期倒序索引 · 时间注明来源和时区;已确认事实、厂商声明、推断与待验证项分别记录,公告日期不等于事件开始时间

  • CVE-2026-111943
    笔记 · mitmproxy 的 eMudhra 支持 · emudhra 受损 ca

    Go 对已失陷中间 CA 的拒绝检查;对应 GO-2026-6809,影响入口为 · 背景是 eMudhra 中间 CA 私钥失陷事件;该事件的密钥生成缺陷发生在 CA 侧,Go 的修复是在证书验证时拒绝受损公钥 · Go 安全版本发布:2026-10-19;CVE 公开:2026-10-21;资料核对:2026-10-26

  • Proxy Awesome
    笔记 · mitmproxy

    Note · 建议基于 overlay 组件内部 proxy,更安全,更好跨网。 · 对外暴露甚至选择 · | protocol | transport | UDP | Note | · | socks4 | tcp | ❌ | · | socks5 | tcp | ✅ |

站内链接

  • 2026-10 eMudhra 中间 CA 私钥失陷
    笔记 · 2026-10 eMudhra 中间 CA 私钥失陷

    事件类型:WebPKI / CA 密钥生成与信任分发事件;首次报告 2026-10-17,多方于 2026-10-20 发布公告;首次整理 2026-10-23,CVE 关联与厂商追加声明核对 2026-10-26 · 八组 eMudhra 中间 CA 密钥因生成缺陷而可恢复,攻击者可利用对应签发权限伪造证书;Google、Mozilla 和发现方资料...

  • CVE-2026-111943
    笔记 · CVE-2026-111943

    Go 对已失陷中间 CA 的拒绝检查;对应 GO-2026-6809,影响入口为 · 背景是 eMudhra 中间 CA 私钥失陷事件;该事件的密钥生成缺陷发生在 CA 侧,Go 的修复是在证书验证时拒绝受损公钥 · Go 安全版本发布:2026-10-19;CVE 公开:2026-10-21;资料核对:2026-10-26

参考资料

GitHub5 条
其他外链6 条
最近更新commit c5df7af编辑