当前位置:   article > 正文

2024年最全为什么如此安全的https协议却仍然可以被抓包呢?

2024年最全为什么如此安全的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的存在。它只知道,用自己的私钥是可以解密出客户端发来的数据,并能从中获得对称加密的密钥。示意图如下:

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/589414
推荐阅读
相关标签
  

闽ICP备14008679号