charles使用

2018-07-30 fishedee 后端

1 概述

charles简单使用指南,使用的charles版本为4.2.6,charles是mac下最好的抓包软件,是开发网络程序的居家必备。

2 http抓包

2.1 开启http抓包

Screen Shot 2018-07-30 at 9.01.52 P

打开charles后,点击齿轮的Proxy Settings

Screen Shot 2018-07-30 at 9.03.36 P

设置抓包端口为8888

2.2 PC抓包

Screen Shot 2018-07-30 at 9.06.58 P

以chrome为例,我们使用SwitchyOmega作为客户端代理软件,点击Options

Screen Shot 2018-07-30 at 9.07.13 P

然后点击New profile

Screen Shot 2018-07-30 at 9.08.02 P

然后新建一个charles的选项,将protocol设置为http,端口指向本地的8888,最后记得点一下Apply Changes

Screen Shot 2018-07-30 at 9.09.29 P

然后打开一个http网站,我们就能在charles中看到网络包的运行情况了。

2.3 localhost代理

charles默认不抓本地包,我们需要在Charles修改一下,打开Tools的Rewrite

设置一下Location

设置一下Rewrite规则

然后访问的时候把地址都改成localhost.charlesproxy.com就行了

2.4 手机抓包

手机的抓包就麻烦一点了,但原理也是一样,我们将所有的流量都导向到charles的8888端口就可以了。

Screen Shot 2018-07-30 at 9.11.33 P

首先,打开settings,然后打开Internet Sharing,将本地的网络情况用wifi热点的方式释放出去。

然后,打开手机连接电脑释放的wifi热点,并输入密码,然后进入配置,选择配置代理,设置手动,服务器设置为wifi热点的地址,一般是192.168.1.1,这个要和wifi热点中的路由器配置一样!,端口设置为8888就可以了。

然后,随便用safari打开一个http网站,你都能在charle中看到抓包的信息了。

3 https抓包

在目前的网络环境下,http已经很少用了,绝大部份的网站都是用https了。所以,charles的重点在于如何使用https抓包,详情可以看这里

要注意的是,https本身是属于一个安全协议,是不允许中间人修改或者查看网络包的。所以,直接使用charles抓https包会出现上面的提示,浏览器会发现网络包被人查看或修改过的。

但是,我们可以通过在系统中强制信任一个我们自制的根证书来解决这个问题,相关原理看这里,所以,charles要成功执行https抓包的关键在于安装我们自制的根证书。

Https抓包,需要有三个条件:

  • Charles,打开https抓包模式,而不是https的透传模式
  • 设备(PC或者手机),安装Charles特殊的根证书
  • 设备(PC或者手机),设置Charles作为代理

3.1 开启https抓包

Screen Shot 2018-07-30 at 9.24.11 P

首先打开Proxy下的SSL Proxying Setting

Screen Shot 2018-07-30 at 9.24.52 P

然后点击Add,然后将Host设置为*,代表将所有网站的https包都抓。

3.2 新版本开启https抓包

默认情况下,Charles不对https的包进行解析,直接进行代理透传处理。

Https包透传模式下,包的数据都是乱码,看不到,请求的头部只有一个CONNECT

点击Proxy,Start SSL Proxying,开启Https包的拆包后,重新装包的传送模式。

这个时候,能看到页面的具体请求和响应内容了

3.3 PC安装根证书

Screen Shot 2018-07-30 at 9.25.53 P

在Charles中的Help选择Install Charles Root Certificate,然后系统会弹出Keychain Access

Screen Shot 2018-07-30 at 9.26.39 P

在Certificates中找到了Charles Proxy,选择右键,get info。

Screen Shot 2018-07-30 at 9.27.30 P

然后,点击Trust,然后选择Always Trust,然后关掉

Screen Shot 2018-07-30 at 9.28.21 P

这时候会弹出让你输入密码,没事,输入吧

Screen Shot 2018-07-30 at 9.29.01 P

成功后,证书是加号。

Screen Shot 2018-07-30 at 9.29.33 P

好了,我们成功了,这个时候我们连百度等https网站的包都能抓到了。

3.4 iOS手机安装根证书

Screen Shot 2018-07-30 at 9.30.46 P

我们选择Install Charles on a Mobile

Screen Shot 2018-07-30 at 9.31.26 P

然后,它提示我们用手机配置手动代理为192.168.1.1:8888,然后打开域名chls.pro/ssl地址,注意,chls.pro是域名,不是url。

我们手机打开后,会提示我们安装一个描述文件,我们点击安装。

注意,以上安装了描述文件还不行,必须要这样做。打开通用,关于本机,证书信任设置,然后勾选Charles Proxy CA。

至此,手机端的根证书也已经安装完毕了,charles也能顺利地抓https的包了。

3.5 安卓网页安装根证书,和代理配置

3.5.1 设置代理

打开,手机,选择Wifi,长按Wifi热点位置,选择修改网络。选择代理服务器(Charles的局域网IP地址),和端口(Charles端口为8888)

对于模拟器,可以用Settings,Proxy,Manual来手动设置代理

3.5.2 安装根证书

用浏览器打开手机,输入地址 chls.pro/ssl ,注意是域名就是chls.pro。正常情况下,会下载根证书,输入账号密码就能打开

打开Wifi,选择高级,选择安装证书,将证书安装进去就可以了

3.5.3 App允许自定义证书

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system"/>
            <certificates src="user"/>
        </trust-anchors>
    </base-config>
</network-security-config>

安卓7.0以后,不允许App默认能使用自定义的根证书了,需要明确指定。在App的res/xml/network_config.xml加入以上配置

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:networkSecurityConfig="@xml/network_config">
    xxxx
</application>

然后在AndroidManifest.xml中networkSecurityConfig加入指定这个xml文件即可。

3.6 安卓sd卡安装根证书,和代理配置

部分情况下,无法使用浏览器安装根证书,我们就需要借助adb的帮助了

3.6.1 设置代理

与3.5.1是一样的,就不多说了

3.6.2 安装根证书

先到Charles中下载根证书到本地

adb -s emulator-5554 push charles-ssl-proxying-certificate.pem /sdcard

传送根证书到sdcard的目录

在设置,安全,选择Install from SD card,最后选择证书就可以了

3.6.3 App允许自定义证书

与3.5.2是一样的,就不多说了

4 请求映射mapRemote

点击Charles的Tools的MapRemote中

输入add,我们就能将https域名aa.bb.com,转换为本地http的IP地址服务器。注意,映射https地址到http地址,是需要安装根证书,并打开https抓包功能的

注意,Rewrite与mapRemote是不同的。Rewrite不更改发送的地址,只是改一下包内容而已。mapRemote是更改地址的。

5 总结

不难,就是坑多,ios和mac添加根证书的步骤实在是很隐晦,毕竟根证书是如此的重要,一旦添加了流氓根证书https就形同虚设。

参考资料:

相关文章