charles 抓不到Https包的特征
-
如下图显示红色x<unknown>
电脑上安装根证书
-
打开charles->Help->SSL Proxying->Install Charles Root Certificate
-
有时候电脑上的证书已经安装过了,但是就是抓包不成功,可以把之前安装的证书删掉重新安装一下。
安装后需要打开钥匙串,找到刚才安装的证书,选中,右键,显示简介
-
在弹出的窗口中点开信任,选择始终信任
到这一步,电脑上的证书算是安装好了
安装手机上的证书
- 选择 charles-> Help-> SSL Proxying->Install Charles Root Certificate on a Mobile Device or Remote Browser ,弹出对话框如下
-
配置手机代理 服务器为自己电脑ip,端口号为8888
- 然后手机打开 safari 输入 chls.pro/ssl 下载证书
- 下载成功后,通过 设置->通用->描述文件与设备管理 去安装证书
- 安装成功后,通过 设置 ->通用 ->关于本机 ->证书信任设置 找到刚才安装的证书,信任证书即可
配置charles
-
打开 charles -> Proxy-> SSL Proxying Settings,选中 SSL Proxying Tab 选中Enable SSL Proxying 添加 *:443
- 到此charles 可以抓包https
原理简析
如果是HTTP请求,因为数据本身并没加密所以请求内容和返回结果是直接展现出来的。
但HTTPS是对数据进行了加密处理的,如果不做任何应对是无法获取其中内容。所以Charles做的就是对客户端把自己伪装成服务器,对服务器把自己伪装成客户端:
Charles拦截客户端的请求,伪装成客户端向服务器进行请求
服务器向“客户端”(实际上是Charles)返回服务器的CA证书
Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
Charles拦截服务器的响应,替换成自己的证书后发送给客户端
当然,如果用户不选择信任安装Charles的CA证书,Charles也无法获取请求内容。还有一种,如果客户端内置了本身的CA证书,这时如果Charles把自己的证书发送给客户端,客户端会发现与程序内的证书不一致,不予通过,此时Charles也是无法获取信息的。
后续
20200909今天在使用charle抓包时突然不行了,不论是http还是https都报红,把电脑上的根证书删了重装也不行,把手机上的证书删了之后,重装手机证书时连chls.pro/ssl都打不开,charle还是报红,然后发现charle报错的原因竟然是白名单white list,才突然想起之前设置过黑名单和白名单,把黑名单和白名单都取消后,再去chls.pro/ssl安装证书,果然可以了,安装好证书后抓包成功了
Wireshark抓包WebSocket
- 项目中经常会使用到ws来下发消息,可以常用的抓包工具却不能抓WS 的数据包,下面分享一种可以抓WS数据的工具Wireshark,MAC 和Windows 平台上都可以用。
- 首先去官网下载客户端
- 下载完成后安装
-
安装完成之后设置共享WiFi,这里要记住共享来源的链接
- 设置好共享wifi后,手机连上共享的wifi,设置代理
- 第一次打开会提示你安装
Install ChmodBPF
,点击安装就好。 -
安装完后共享网络的的来源链接,就是设置共享的时候让你记住的
-
双击来源链接进到的页面就可以抓ws的数据包了