https抓包(安卓抓包)
在这一节中,我们分析了HTTPS的安全通信过程,知道HTTPS可以有效地防止中间人攻击。但是每个使用过包抓取工具的人都知道查理斯·菲德尔可以抓取HTTPS请求并解密它们。他们是怎么做到的?
首先看看查理官网对HTTPS代理的描述:
查尔斯充当中介。浏览器与服务器通信时,Charles接收服务器的证书,但动态生成证书并发送给浏览器。也就是说,查尔斯作为中介代理在浏览器和服务器之间进行通信,所以通信数据可以被查尔斯截获和解密。因为查尔斯更改了证书,浏览器验证失败会给出安全警告,必须安装查尔斯的证书才能进行正常访问。
查尔斯需要做的是把客户端伪装成服务器,把服务器伪装成客户端:
拦截真实客户端的HTTPS请求,并通过伪装客户端将HTTPS请求发送到真实服务器
接受真实的服务器响应,用Charles自己的证书伪装服务器向真实的客户端发送数据内容
我们来看看具体的流程:
客户端向服务器发起HTTPS请求
查尔斯截获了客户端的请求,假装客户端向服务器发出请求
服务器将服务器的证书返回给“客户端”(实际上是查尔斯)
Charles截取来自服务器的响应,获取服务器证书的公钥,然后自己制作证书,替换服务器证书并发送给客户端。(在这一步,查尔斯获得了服务器证书的公钥)
从服务器(实际上是查尔斯)收到证书后,客户端生成一个对称密钥,用查尔斯的公钥加密,并将其发送给查尔斯
Charles截获来自客户端的响应,用自己的私钥解密对称密钥,用服务器证书的公钥加密,并发送给服务器。(在这一步,查尔斯得到了对称密钥)
服务器用自己的私钥解密对称密钥,并向查尔斯发送响应
Charles截取来自服务器的响应,用他自己的证书替换它,并将其发送给客户端
此时,连接建立,查尔斯获得服务器证书的公钥和客户端与服务器之间协商的对称密钥,然后可以解密或修改加密的消息。
HTTPS数据包捕获的原理非常简单。简单来说,Charles作为一个“中间人代理”,已经获得了服务器证书的公钥和HTTPS连接的对称密钥,前提是客户端选择信任并安装Charles的CA证书,否则客户端会“报警”并终止连接。这样,HTTPS仍然非常安全