整体架构
- 何为Charles ?
- 有什么用处Charles。
- 如何安装Charles。
- Charles 抓包的原理。对应http和https的原理区别。
- Charles 对应的证书配置,如何配?
正篇
-
何为Charles
Charles官网:https://www.charlesproxy.com/。 Charles又名青花瓷,小花瓶。是用于网络抓包的工具,对应的还有一款不错的软件,比如Wireshark也是分析网络的不错的一个工具。我们可以看到我们的request,response 的 请求行,请求头,请求体,响应行,响应头,响应体的工具。
注意:https 固然传输是安全的,但是顶不住用户自己作安装一些信任证书,所以我们除了app在application 和 transport 层之间的tls/ssl ,我们还要做适当的请求加密。这样即使我们的请求被抓包了,我们也可以保证app数据的安全。
-
有什么用处?
我们可以用来观察数据是否正确。测试的时候我们页面显示不正确的时候我们可以观察是不是数据返回有误导致的。快速定位问题的所在。是开发的问题,还是后台数据接口的问题。 我们还可以修改数据的返回值,通过设置Breakpoints。
-
如何安装Charles
- 到官网安装 : https://www.charlesproxy.com/download/
- 通过homebrew 安装: brew cask install Charles
注意: 下载安装完成Charles ,基本上就可以对 http进行抓包了。不过要做响应的配置。如下:
step 1.jpeg
我们就可以监听http了。
-
http 抓包原理
http里面涉及三次握手,抓包还是比较容易的,Charles作为中间人比较好监听。比如相对于客户端他可以伪装成服务端。相对于服务端,他可以伪装成客户端,在中间起到一个转承的作用。
-
https 的抓包原理
问题:
我们经常会碰到用Charles抓包的时候https总是一堆乱码。前提:
我们需要了解https的原理 ,传送门:简要概述:
https 即为 http + s。我们需要关注的就是SSL/TLS之间是怎么通信的。1. 客户度发送随机数,加密算法列表,TLS/SSL版本好给服务器 2. 服务器下派证书,随机数,加密算法 给客户端 3. 用CA的公钥解开证书签名,如果能够解开则是服务器发给我们的。然后生成随机数,用server 的public key 进行加密得到加密随机数。再然后将上面发送的内容进行hash,得到一段hash后再用随机数进行加密,得到加密hash。然后将加密随机数,加密hash ,传给服务器,并且告诉服务端以商量好的方式生成一个对称加密密钥,通过这个密钥进行内容加密。至此客户端的握手完成。 4. 服务端用公钥解开拿到随机数,再用随机数解开hash得到解开hash值。对内容进行hash,然后对比hash相等则没有被篡改。就告诉客户端用上面的方式加密。加密hash 提供客户端验证。
-
Charles抓https的包的原理就明朗了。
- 客户端向服务端"实际上是Charles端",say hello ,即 发送随机数,加密算法列表,以及SSL/TLS版本号。
- Charles 监听这个请求参数,当服务器返回证书,随机数,加密算法,Charles拦截这个请求,拿到服务器的公钥。然后发送自己的证书给客户端,随机数,加密方式。
- 客户端进行证书验证,需要手机或者浏览器信任Charles的证书。然后客户端拿到Charles的公钥加密pre-master-key ,得到加密随机数。将加密随机数,还有按照约定的方式进行加密通信。再用随机数加密hash内容后的hash。发送给服务器(实际上是Charles)。客户端握手完成。
- Charles 拿到后,用自己的私钥解开加密的premaster - key,得到后,再用真正服务器的公钥进行加密随机数,双方按照约定的方式得到加密key进行通信。然后再用随机数加密hash内容后的hash。发送给服务器。
- 服务器拿到后用私钥解开Charles的加密信息,得到随机数。用随机数解开得到hash ,验证hash。然后发送消息按照双方的约定进行通信。
这就是Charles 作为中间人的一个原理
https 一般如果没有配置证书会出现乱码的情况
解决之道:
网友评论