Fiddler抓取https原理
首先fiddler截获客户端浏览器发送给服务器的https请求, 此时还未建立握手。
第一步, fiddler向服务器发送请求进行握手, 获取到服务器的CA证书, 用根证书公钥进行解密, 验证服务器数据签名, 获取到服务器CA证书公钥。
第二步, fiddler伪造自己的CA证书, 冒充服务器证书传递给客户端浏览器, 客户端浏览器做跟fiddler一样的事。
第三步, 客户端浏览器生成https通信用的对称密钥, 用fiddler伪造的证书公钥加密后传递给服务器, 被fiddler截获。
第四步, fiddler将截获的密文用自己伪造证书的私钥解开, 获得https通信用的对称密钥。
第五步, fiddler将对称密钥用服务器证书公钥加密传递给服务器, 服务器用私钥解开后建立信任, 握手完成, 用对称密钥加密消息, 开始通信。
第六步, fiddler接收到服务器发送的密文, 用对称密钥解开, 获得服务器发送的明文。再次加密, 发送给客户端浏览器。
第七步, 客户端向服务器发送消息, 用对称密钥加密, 被fidller截获后, 解密获得明文。
由于fiddler一直拥有通信用对称密钥, 所以在整个https通信过程中信息对其透明。
以上来自:https://www.zhihu.com/question/24484809
基本上跟自己的猜测一样。
以上所有步骤的前提是我们在自己电脑上安装了fidller的根证书(看下下图中受信任的根证书颁发机构那里,颁发者和颁发给都是fidller,所以fidller是根证书,它可以继续给其他网站颁发证书,例如baidu)
这个证书是fidller自己给自己颁发的,就像12306.cn一样,自己给自己颁发的,闹着玩。但是我们主动把它添加到了受信任的根证书颁发机构,所以我们计算机是认可这个证书的。
以请求https://www.baidu.com为例根据自己理解详细说明上述步骤
1、浏览器向百度发出握手请求,被fidller截获,变成fidller向百度发出握手请求,百度将自己的SSL证书(由CA颁发,里面包含了百度的公钥以及百度的一些相关信息)返回,被fidller截获,fidller用CA的公钥解开百度的证书,拿到百度的公钥
2、 fidller把自己的公钥替换掉百度的公钥,修改证书相关信息(比如修改百度证书颁发机构),以达到冒充百度的目的,然后用自己的私钥重新加密百度的证书发送给浏览器(原文是说的fiddler伪造自己的CA证书, 冒充服务器证书传递给客户端浏览器,这有点含糊其辞,所以写下自己的理解)。
3、由于添加了fidller的根证书,所以浏览器是能正常打开fidller传来的伪造的百度证书的(可以用fidller的公钥解密),然后浏览器生成随机码,用冒充的百度公钥(实际是fidller的公钥)加密随机码然后发出,被fidller截获
4、fidller用自己私钥解开随机码,获得通讯的对称秘钥
5、fidller用百度的公钥加密对称秘钥,然后传给百度,百度用自己私钥解开对称秘钥,这样双方就能使用加密传输了
6、fidller收到百度发来的密文,由于它也保存了对称秘钥,所以它可以解开密文,这样我们就能使用fidller看到加密的https的密文了,然后fidller再次用对称秘钥加密发送给浏览器。
7、浏览器向百度发送密文被fidller截获,然后fidller加密后再发送给百度
如此这般,循环往复...