美文网首页iOS开发攻城狮的集散地iOS学习资料基础
09·iOS 面试题·如何用 Charles 抓 HTTPS 的

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

作者: pengxuyuan | 来源:发表于2018-10-12 16:08 被阅读14次

前言

我们可以通过网络抓包,来分析网络请求和响应数据,甚至是可以修改请求或者响应来达到我们特殊的需求。在 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 工具,可以参考这篇博客:Charles 从入门到精通

Charles 抓取 HTTPS 原理及流程

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

Charles 作为一个“中间人代理”,当浏览器和服务器通信时,Charles接收服务器的证书,但动态生成一张证书发送给浏览器,也就是说Charles作为中间代理在浏览器和服务器之间通信,所以通信的数据可以被Charles拦截并解密。由于Charles更改了证书,浏览器校验不通过会给出安全警告,必须安装Charles的证书后才能进行正常访问。

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

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

详细图文流程:浅谈Charles抓取HTTPS原理

总结

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

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

以上。

参考文献

Charles 从入门到精通

浅谈Charles抓取HTTPS原理

图解 HTTPS:Charles 捕获 HTTPS 的原理

关于HTTPS,你需要知道的全部

关于https的那些事儿

某学姐带你了解抓包原理

相关文章

网友评论

本文标题:09·iOS 面试题·如何用 Charles 抓 HTTPS 的

本文链接:https://www.haomeiwen.com/subject/fgsgaftx.html