JVMAndroid开发Android知识

怎样抓取jvm的https网络请求

2017-02-18  本文已影响48人  亚克西

用gradle构建时,常有需要去查看其网络请求,怎样抓取其网络请求呢?下面介绍gradle代理到charles上的抓包办法。

由于gradle是运行在jvm上,所以配置jvm的代理方法,即是实现了对gradle的代理,代理设置分为步:

1. 设置jvm的代理

在gradle上设置jvm的代理有两种方式

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8888
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8888

gradle在运行时自动会将属性设置加载到jvm中。

gradlew
-Dhttp.proxyHost=127.0.0.1
-Dhttp.proxyPort=8888
-Dhttps.proxyHost=127.0.0.1
-Dhttps.proxyPort=8888

代理设置完成后,发现http请求是可以在charles中正常代理查看的,但https请求却无法代理成功。原因是jvm上https的ssl握手环节证书验证不通过。由于Charles是以中间人的方式代理https请求,所以需要将charles的证书添加到jvm信任证书的列表中去。

2.添加代理证书倒jvm的证书信任列表

java工具包中集成了证书管理工具keytool,只需要用它将代理工具的证书(charles证书)导入到jvm证书信任列表中即可。
导入方法:

sudo keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt -alias certAliasName -file certPath.cert

JAVA_HOME是系统的java的安装目录。
jvm证书仓库的默认密码是“changeit”,如果修改过,请用重设的密码替换它。
certAliasName 是你给导入的证书起的名字。
certPath.cert 是导入的证书路径

上一篇下一篇

猜你喜欢

热点阅读