热门搜索 :
考研考公
您的当前位置:首页正文

09·iOS 面试题·如何用 Charles 抓 HTTPS 的

来源:东饰资讯网

前言

我们可以通过网络抓包,来分析网络请求和响应数据,甚至是可以修改请求或者响应来达到我们特殊的需求。在 Mac 环境下,一般使用 Charles 工具来进行网络抓包,当然 Charles 工具还提供了非常多其它实用的功能,在这里我们就只分析 Charles 是如何抓 HTTPS 的包的。

面对这个问题,我们首先需要了解 HTTP 通讯的流程,然后再引出 HTTPS 是什么,最后我们再看 Charles 工具是如何抓取 HTTPS 的包的。

HTTP 通讯过程及缺点

HTTP 超文本传输协议,是属于 TCP/IP 分层中的应用层,位于传输层之上(提供网络连接计算机之间的数据传输)。前面我们也知道,HTTP 为了快速的处理大量事务,确保协议的可伸缩性,所以设计的很简单:将 HTTP 的报文丢给传输层,利用传输层的 TCP 协议或者 UDP 协议来进行数据传输,然后再利用网络层的 IP 协议和数据链路层来进行最终的数据包传输。

这里我们主要看应用层和传输层:对于传输层,直接将应用层 HTTP 报文封装,然后直接传输,在这里不会做数据的加密,不会验证通信双方的身份,也不会校验报文的完整性。所以会导致一下问题:

  1. 由于通信报文是使用明文传输的,所以内容很容易被窃听。
  2. 由于不验证通信双方身份,这里很容易遭遇伪装(伪装服务器或者伪装客户端等),服务器也容易遭受 Dos 攻击。
  3. 不校验报文的完整性,会出现篡改报文信息的情况。

对于以上出现的问题,我们有必要对传输的报文做加密处理,校验报文的完整性,以及验证通信双方的身份。

HTTPS 通讯过程

对于上面 HTTP 出现的问题,我们需要定制一些机制和协议来完善:HTTP + 加密 + 认证 + 完整性保护 = HTTPS。然后就有了 SSL/TLS 协议,它处于应用层和传输层之间,在这里我们可以体会到分层的好处:可以很方便的扩展原有的功能。分层结构如下:

image

这里我们先不描述传输层 TCP 协议是如何进行三次握手(建立连接)和四次挥手(断开连接),我们直接描述 HTTPS 的通信流程:

  1. 对于报文的加密:有对称加密和非对称加密方式,HTTPS 采用混合加密机制,在交换密钥环节,使用非对称加密,在之后通信交换报文阶段则使用对称加密方式。
  2. 对于验证通信双方身份:使用 CA 证书来校验身份。
  3. SSL 协议具有完整性校验

HTTPS 大概流程如下,详细的流程图可以参考下文末链接;

  1. 客户端将自己支持的加密算法发送给服务器,请求服务器证书;
  2. 服务器选取一组加密算法,并将证书返回给客户端;
  3. 客户端校验证书合法性,生成随机对称密钥,用公钥加密后发送给服务器;
  4. 服务器用私钥解密出对称密钥,返回一个响应,HTTPS连接建立完成;
  5. 随后双方通过这个对称密钥进行安全的数据通信。

Charles 抓包原理

Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析(这里类似中间人攻击)。配合 Charles 的 SSL 功能,Charles 还可以分析 HTTPS 协议。

Charles 抓取 HTTPS 原理及流程

前面说过,HTTPS 可以有效防止中间人攻击,那 Charles 是如何抓取 HTTPS 包的呢

这里有个大前提,就是客户端信任了 Charles 自己制作的证书,然后导致 Charles 拿到 CA 证书和对称加密的公开密钥;这里我们简单总结下:

  1. 首先 Charles 假冒了客户端,拿到服务器的 CA 证书
  2. 然后 Charles 假冒了服务器,给客户端发送了一张自己制作的证书,客户端信任该证书
  3. Charles 再次假冒服务器,拿到客户端的对称密钥
  4. Charles 再次假冒客户端,将对称密钥加密发送给服务器,让服务器认为这次通信是没问题的,服务器发送成功响应
  5. 最后 Charles 假冒服务器将成功响应发给客户端
  6. 建立连接,客户端与 Charles 建立连接,Charles 与服务器建立连接(中间人攻击)

总结

Charles 抓包,主要用的是中间人攻击。对于 HTTP 的话,可以直接抓取,但是对于 HTTPS,就需要在建立 HTTPS 连接的时候(SSL 连接),偷取证书和密钥。

文中很多知识点都是从参考文献学习到了,这里就不再重复摘抄了。

以上。

参考文献

Top