Contents
  1. 1. MITM介绍
  2. 2. 主要原理介绍
  3. 3. 简单总结

阅读本文首先需要了解https的基本原理,可以参考 https://scoolor.github.io/2018/09/03/https/

理解https的抓包原理,首先要理解中间人的概念,也就是MITM。

MITM介绍

MITM(Man-In-The-Middle,中间人),能够与网络通信的两端分别创建连接,交换其收到的数据,使得通讯两端都认为自己直接与对方对话,实际上整个会话被中间人控制。

简而言之,就是在真正的服务端看来,中间人是客户端;而对真正的客户端来说,中间人是服务端。

主要原理介绍

常见的http/https抓包工具charles/fiddler的工作原理与中间人一致,都是通过创建本地的proxy服务,然后修改浏览器的proxy配置来达到拦截流量的目的。

对于https连接来说,中间人要满足以下两点,才能实现真正的明文代理:

  1. 中间人,作为客户端与真实服务端建立连接这一步不会有问题,因为服务端不会校验客户端的身份;
  2. 中间人,作为服务端与真实客户端建立连接,这里会有客户端信任服务端的问题,也就是服务端必须有对应域名的私钥;

中间人要拿到私钥只能通过如下方式:

  1. 去网站服务端拿到私钥;
  2. 去CA处拿域名签发私钥;
  3. 自己签发证书,切要被浏览器信任;

不用解释,抓包工具只能使用第三种方式取得中间人的身份。

使用抓包工具进行https抓包的时候,需要在客户端安装charles/fiddler的根证书,这里实际上起认证中心(CA)的作用。

charles能够抓包的关键是客户端会往系统受信任的根证书列表中导入charles生成的证书,而这个证书会被浏览器信任,也就是charles给自己创建了一个认证中心CA,客户端拿着中间人签发的证书去中间人自己的CA去认证,当然认为这个证书是有效的。因此代理作为中间人取得了客户端的信任。

简单总结

charle/fiddler抓包https时,作为中间人,与客户端连接时,中间人自己生成证书,并且使用自己的CA进行签名,取得客户端的信任;与服务端连接时,中间人接受服务端的证书,与服务端不存在信任问题。因此就实现了https的代理。

Contents
  1. 1. MITM介绍
  2. 2. 主要原理介绍
  3. 3. 简单总结