怎样抓取jvm的https网络请求

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

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

1. 设置jvm的代理

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

  • 第一种方法,在gradle.properties中设置:

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 是导入的证书路径

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,613评论 25 709
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,999评论 6 342
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,308评论 6 13
  • 无意中在知乎看到这么一段话,人最痛苦的不是实现不了梦想,而是没有梦想,当人安于现状,没有进取心 一切就会顺其自然随...
    疯子梁阅读 410评论 0 1