如何用mitmproxy捕获本地Java运行的gRPC双向客户端服务器HTTP2流量
捕获gRPC双向HTTP/2流(mitmproxy + Java客户端/服务器配置)
1. 启动mitmproxy
mitmproxy默认支持HTTP/2,直接指定监听端口启动即可:
mitmproxy --listen-port 8080
2. 准备mitmproxy信任证书
因为gRPC基于TLS,Java客户端需要信任mitmproxy的CA证书才能正常建立连接:
- 找到mitmproxy默认生成的CA证书,路径一般是
~/.mitmproxy/mitmproxy-ca.pem - 用
keytool将PEM证书转换成Java支持的JKS格式:
keytool -importcert -file ~/.mitmproxy/mitmproxy-ca.pem -keystore mitmproxy-ca.jks -alias mitmproxy
执行时输入密钥库密码(推荐用changeit,和Java默认信任库密码一致),然后确认信任该证书。
3. 配置Java gRPC客户端
启动客户端时,通过JVM参数指定代理并导入信任证书,同时取消本地请求的代理豁免(因为服务器在本地):
java -jar Client.jar \ -Dhttp.proxyHost=127.0.0.1 \ -Dhttp.proxyPort=8080 \ -Dhttps.proxyHost=127.0.0.1 \ -Dhttps.proxyPort=8080 \ -Dhttp.nonProxyHosts="" \ -Djavax.net.ssl.trustStore=/path/to/mitmproxy-ca.jks \ -Djavax.net.ssl.trustStorePassword=changeit
把/path/to/mitmproxy-ca.jks替换成你实际生成的JKS证书路径。
4. 验证流量捕获
- 确保mitmproxy处于运行状态
- 启动配置好的Java客户端,发起gRPC双向流请求
- 在mitmproxy界面中,就能看到对应的HTTP/2请求,包括双向流的消息内容
额外注意
- 如果你的gRPC服务器未启用TLS(纯HTTP/2),只需保留
http相关代理参数,去掉HTTPS和证书配置即可,但这种生产场景极少。 - 建议使用最新版本的mitmproxy,避免旧版本对HTTP/2双向流的支持缺陷。
内容的提问来源于stack exchange,提问作者djGowda
相关产品推荐
相关产品推荐

