项目最近由 http 转成了 https, 但是charles 不能抓 https 的包,而搜各种资料去发现都因为 charles 版本过低无法用,所以记录下我的解决办法.
Charles为什么能抓 https?
都知道 http是明文传输,而 https 的出现就是为了解决这个问题,https 协议是由 SSL+http 协议构建的加密传输网络协议.但既然是加密的,那为什么能抓到?
先看看 Charles 官网是怎么解释的:

很明显, "man-in-middle",就是使用中间人攻击. 因为 https 使用的是非对称加密,那就要了解https的传输交互过程:

当然 charles 使用的中间人攻击必须要我们要信任它的证书,不然还是不能得到数据,https是可以防止中间人攻击的,因为服务器的公钥是用证书的,
charles伪造的证书一般浏览器会警告,所以我们需要将charles的证书认为可靠的。从而实现中间人。 以上之后我了解的一点点的相关知识.
进入教程
Charles版本: V4.0.2 第一步:点击install Charles Root Certificate, 之后会跳到钥匙串

第二步:找到 Charles 的证书然后选择使用此证书时: 始终信任.

第三步:在手机上安装 Charles 的根证书

第四步:在手机上安装完之后,回到 Charles-Proxy-SSLProxying Setting, 把需要劫持的 host加上,端口号443,注意这里的 host 可以使用通配符也可以直接填 host.

到这里就差不多教程就结束了,这次在 charles 上抓 https 只是工作中的一个小插曲,但是去了解为什么能抓到让我产生兴趣,在去深入了解的过程中也加深和修正了一些知识点,记录为文.