Mitmproxy 11 发布 —— 完整支持 HTTP/3!

一、HTTP/3 支持

在反向代理模式中,HTTP/3 现在已经可以直接使用,你的 mitmproxy 实例将监听 TCP 和 UDP 两种协议,自动处理所有版本的 HTTP:

$ mitmproxy --mode reverse:https://http3.is

本地代理模式和 WireGuard 模式也已支持 HTTP/3:

$ mitmproxy --mode wireguard
$ mitmproxy --mode local

我们已经在 Firefox、Chrome、各种 cURL 构建和其他客户端上成功测试 HTTP/3 支持,解决了兼容性问题。

唯一的已知限制是:Chrome 默认 不信任用户添加的证书颁发机构(CA)用于 QUIC 协议。因此,你可以通过以下方式绕过限制:

  • 使用 Let’s Encrypt 等公有信任证书
  • 启动 Chrome 时添加命令行参数
  • 接受 Chrome 自动回退到 HTTP/2

而 Firefox 则没有这个问题。

HTTP/3 的支持始于 2022 年,由 Manuel Meitinger 和 Maximilian Hils 推动开发。如今 QUIC 和 HTTP/3 已成为网络主流协议,我们很高兴 mitmproxy 终于正式支持它了!

二、DNS 支持升级

随着 HTTPS DNS 记录和 ECH(Encrypted Client Hello)等新隐私技术的出现,mitmproxy 的 DNS 功能也迎来了升级:

2.1.支持更多 DNS 查询类型

旧版本中 mitmproxy 使用 getaddrinfo 进行 DNS 查询,该 API 仅支持 A(IPv4)和 AAAA(IPv6)记录,无法处理 HTTPS 类型等新兴记录。

现在我们基于 Rust 的 Hickory DNS 库重写了 DNS 模块,支持任意查询类型,并可自定义 DNS 服务器:

$ mitmdump --mode dns --set dns_name_servers=8.8.8.8

2.2. 可选择是否跳过 /etc/hosts

通过 dns_use_hosts_file=false,你可以让 mitmproxy 忽略系统 hosts 文件(如 Linux 的 /etc/hosts),这对透明代理重定向特别有用。

示例对比:

# 设置 hosts 映射
$ echo "192.0.2.1 mitmproxy.org" >> /etc/hosts

# 默认启用 hosts 文件
$ mitmdump --mode dns
$ dig @127.0.0.1 +short mitmproxy.org
192.0.2.1

# 忽略 hosts 文件
$ mitmdump --mode dns --set dns_use_hosts_file=false
$ dig @127.0.0.1 +short mitmproxy.org
3.161.82.13

2.3.支持 DNS-over-TCP

DNS 默认使用 UDP,但在响应太大时会自动回退到 TCP。在支持 HTTPS 和复杂记录类型的背景下,DNS-over-TCP 的支持显得尤为关键。mitmproxy 11 现已完整支持!

2.4. 移除 ECH 密钥以保证中间人代理正常

ECH(加密的 Client Hello)是一种前沿隐私技术,目的是隐藏客户端访问的目标域名。但这也影响了 mitmproxy 的证书生成流程 —— 如果握手信息被加密,mitmproxy 无法得知目标域名。

为此,mitmproxy 现在会主动从 HTTPS 记录中剥离 ECH 密钥,防止客户端加密首次握手。这样,mitmproxy 仍能获取域名并生成有效证书。

虽然这让 mitmproxy 使用起来稍复杂,但我们依然支持这些对整个互联网隐私保护非常有益的技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello.Reader

请我喝杯咖啡吧😊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值