赞
踩
注意,本篇文章主要探讨的是对https协议抓包的实现原理,如果你想学习的是抓包工具的使用方法,可以参考上一篇文章 在Android手机上对https请求进行抓包 。
另外,想要理解对https协议抓包的实现原理,你还必须非常熟悉https的工作机制才行,我在写一篇最好懂的https讲解 这篇文章中对https的工作机制进行了详细的介绍,还不熟悉https的朋友可以先去阅读这篇文章。
好了,阅读到了这里,说明你对https已经非常熟悉了,那么你一定知道,https协议是结合了非对称加密和对称加密一起工作,从而保证数据传输的安全性的。
非对称加密用于确保客户端可以安全地获取到服务器的真实公钥。对称加密用于确保客户端和服务器之间的数据传输不会被任何人监听和解密,因为对称加密使用的密钥只有客户端和服务器这两者知道,其他任何人在不知道密钥的情况下都无法对传输数据进行解密。
那么看似固若金汤的https协议,抓包工具是如何在这其中找到一个“破绽”,从而实现对https请求进行抓包的呢?
其实严格来说,这也算不上是一个破绽,而是用户的一个主动行为。还记得我们在上篇文章中讲到的,如果想要对https请求进行抓包,必须在手机上安装一个由Fiddler提供的证书吗?这个证书就是整个工作原理的核心,如果没有它,那么https就是不可能被抓包的。而安装证书需要由用户主动去操作,说明用户知道自己在干什么,自然也应该承担相应的风险。这也是为什么我一直在说,https是非常安全的,但https也是可以被抓包的,它们两者之间并不冲突。
接下来,我们就具体研究一下,为什么只需要额外安装一个证书,抓包工具就可以实现对https请求进行抓包。
我们将实现原理分成两个部分来解析,第一部分是客户端如何安全地获取服务器的真实公钥,第二部分是客户端如何与服务器商定用于对称加密的密钥。
借助那些可信赖的CA机构,客户端是可以安全地获取到服务器的真实公钥的。
CA机构专门用于给各个服务器签发数字证书,从而保证客户端可以安全地获得服务器的公钥。
服务器的管理员可以向CA机构进行申请,将自己的公钥提交给CA机构。CA机构则会帮忙制作证书,并使用自己的私钥对其加密,然后将加密后的信息返回给服务器。
这样,当客户端想要去获取某个服务器的公钥时,服务器会将CA机构签发的那段加密信息返回。那么客户端要如何解密这段信息呢?放心,主流CA机构的公钥都是被内置到操作系统当中的,所以只要是服务器的数字证书是由正规CA机构签发的,那么就一定可以被解密成功,从而客户端也就能安全地获取到服务器的公钥了。示意图如下:
而抓包工具在这个过程中可以做什么事情呢?我们还是以Fiddler举例。Fiddler的工作是介于客户端和服务器中间的,它会先于客户端接收到服务器返回的加密数据,然后它也可以使用操作系统内置的CA公钥对这段数据解密,从而得到服务器的公钥,并先将这个公钥保存起来。
接下来,Fiddler会将解密出来的数据进行调包,将其中服务器返回的公钥替换成自己的一个公钥,然后使用自己的非对称加密私钥对数据重新加密,并将这段重新加密后的数据返回给客户端。示意图如下:
但是我们知道,用Fiddler自己的私钥加密后的数据,客户端肯定解密不出来呀,因为Fiddler的公钥并没有内置到操作系统当中,这个时候就会出现我们在上篇文章看到的错误。
那么接下来要怎么办你应该很清楚了吧?这也是为什么我们一定要在手机上安装一个Fiddler提供的证书才行,只是为了让客户端能够解密出Fiddler调包之后的数据。如下图所示:
这样客户端仍然获得了一个公钥,并且还以为这个公钥是服务器返回的,实际上这是一个被Fiddler调包之后的公钥。而服务器返回的真实公钥则被Fiddler保存了起来。
到这里为止,获取服务器公钥的流程就结束了,目前各部分的状态如下:
接下来是客户端与服务器商定对称加密密钥的过程。
由于使用什么对称加密密钥是由客户端这边来决定的,客户端可以利用随机算法在本地生成一个对称加密密钥,并用服务器返回的公钥进行加密,然后发送给服务器。由于公钥加密的数据只能用私钥解密,因此没有任何人能破解出客户端生成的对称加密密钥到底是什么。
然后服务器这边使用自己的私钥将客户端发来的数据进行解密,这样客户端和服务器就都知道对称加密的密钥是什么了,并且绝对没有第三个人能知道,这样双方之后都使用对称加密来进行通讯即可,从而保证了数据传输的安全。示意图如下:
然而现在有了Fiddler,一切就都不一样了。
客户端这边拿到的其实根本就不是服务器的公钥,而是由Fiddler调包后的公钥。所以,客户端这边生成一个对称加密密钥后,使用的也是Fiddler调包后的公钥来进行加密的,这样这段加密后的数据只有用Fiddler自己的私钥才能解开。
那么很显然,Fiddler当然是有自己的私钥的,因此它能够解密出这段数据,这样Fiddler就知道客户端生成的对称加密密钥是什么了。
接下来不要忘记,Fiddler还在之前就保存了服务器返回的真实公钥,那么现在Fiddler可以用真实的服务器公钥再次加密这段数据,然后将加密后的数据发送给服务器。
对于服务器而言,它并不知道客户端这边发生了什么事,也不知道Fiddler的存在。它只知道,用自己的私钥是可以解密出客户端发来的数据,并能从中获得对称加密的密钥。示意图如下:
到这里,对称加密密钥的商定过程也就结束了,目前各部分的状态如下:
本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。