经过Charles代理,咱们能很轻易的抓取手机的Http请求,由于Http属于明文传输,因此咱们能直接获取到咱们要抓取的内容。可是Https内容自己就是加密的,这时咱们会发现内容是加密的了。本文咱们来说述一下如何使用Charles抓取Https数据包及相关原理知识。html
其实Charles就是这么作的,当配置了Charles以后,理论上全部的http/https请求数据都被拦截到了。看下面一张简化的中间人抓包的图:api
注:为了保证最简单的方式实现,下面的Android设备默认都是Android 6.0及如下。安全
保证Android手机和抓取https请求的电脑在同一网络下,而后就能够开始进行抓取操做了。抓取主要分为三步,分别以下:服务器
按照以下图所示操做便可:网络
按照以下图的配置设置是最简单的:app
配置到此,咱们就能够正常抓取到Https明文数据了。dom
其实Charles上显示确实抓到了包,可是当咱们看抓包的详细数据时会发现报错 You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu
。Charles说手机端没有信任Charles的根证书,可是咱们手机上已经安装了Charles根证书了,为何会这样?编码
原来在Android 7.0(API 24 ) ,有一个名为“Network Security Configuration”的新安全功能。这个新功能的目标是容许开发人员在不修改应用程序代码的状况下自定义他们的网络安全设置。若是应用程序运行的系统版本高于或等于24,而且targetSdkVersion>=24,则只有系统(system)证书才会被信任。因此用户(user)导入的Charles根证书是不被信任的。加密
这里要分两种状况:spa
这两种状况有什么区别的,第一种app是咱们本身开发的,咱们手里有源码,可以修改,可以作到像官方文档里面说的同样进行配置。第二种咱们没有源码,要想作到像官方文档里面配置的话,只能反编译后,把配置文件添加进去而后从新打包,可是从新打包就会遇到不少坑,并不必定能成功,因此须要使用其余方式达到抓包目的。
引用官方文档一句话:默认状况下,来自全部应用的安全链接(使用 TLS 和 HTTPS 之类的协议)均信任预装的系统 CA,而面向 Android 6.0(API 级别 23)及更低版本的应用默认状况下还会信任用户添加的 CA 存储。应用可使用 base-config(应用范围的自定义)或 domain-config(按域自定义)自定义本身的链接。
1. Android 系统各个版本上https的抓包:https://www.jianshu.com/p/3b4cd6fdd8a9
2. Html标签清除:http://www.jiniannet.com/Page/clearhtml
3. Unicode编码转换:http://tool.chinaz.com/tools/unicode.aspx