https通信过程中,第三方是如何修改我们的数据?应对策略又是怎样的?

之前说到,https其实就是在http协议的基础上做了一层加密工作,一定程度上保证了我们的数据在网络传输过程中的安全性,但是依然存在安全隐患。在网络传输的过程中,我们的数据即便是被加密了,中间人也能监听或者修改。

1、第三方是如何修改我们的数据的?

中间人能侵入的地方是密钥协商阶段。一,这是后续数据交换阶段的关键;二,即便拦截数据交互阶段的数据,由于没有对称密钥,无法解密。

https通信过程中,第三方是如何修改我们的数据?应对策略又是怎样的?_第1张图片

接下来就会上演一场狸猫换太子的戏了。中间人拦截服务器发送的公钥A,转而把自己的公钥B发送给浏览器。浏览器此时依然以为自己收到的是公钥A。

https通信过程中,第三方是如何修改我们的数据?应对策略又是怎样的?_第2张图片

下面就是交换对称密钥的关键了,浏览器生成对称密钥 AAA,使用公钥 B进行加密得到 XXX,然后再发送给服务器。中间人又把请求拦截下来,下面就有两步操作了。

第一步,获取对称密钥AAA。因为是用公钥B加密的,所以中间人可以使用私钥b解密,然后获取到密钥AAA。

第二步,重新使用公钥A加密。直接把XXX发送给服务端是不行的,因为XXX是用了中间人的公钥B加密,服务端没有私钥b无法解密,直接发送的话无疑就是在告诉服务器,你的数据被我修改了。因此,需要把对称密钥AAA重新使用公钥A加密发送给服务端。

服务端接收到以后,能够正常解密。站在浏览器和服务器的角度,双方都达到了交换密钥的目的,然而中间人也获取到了密钥AAA。在之后的通信过程中,浏览器发送的每条消息都能被中间人解密。

https通信过程中,第三方是如何修改我们的数据?应对策略又是怎样的?_第3张图片

二、如何避免我们的数据被修改?

为什么会有上述问题呢??问题有两个,第一,服务器发送的内容轻易就被修改了;第二,浏览器无法判断收到的公钥是否来自服务器。因此下面就要介绍这两个问题对应的方案。

1、服务器申请证书

接下来需要引出一个机构,叫做CA证书机构,这个机构是一个权威机构,有着自己的公钥 S 和私钥 s。每个合法的服务器 都要先向这个机构申请证书,否则就是不合法的,这也就是我们常看到的,浏览器提示我们xxx网站不安全,原因就在于此。

申请证书的过程大致如下,服务器向CA机构提交企业基本信息,如域名、公钥等等,CA机构就会做三步操作第一步,将企业的基本信息经过 哈希散列算法进行 加密得到数据摘要(也可以叫数据指纹)。经过Hash散列加密的数据是固定长度且唯一的字符串序列,原本的内容只要改一个标点符号,都会形成完全不一样的序列,这个就是用于后面检测数据是否被修改。

第二步,将数据摘要使用私钥 s 加密,得到数据签名。这一步保障的是中间人不敢轻易替换数据。因为如果要替换的话,将自己的数据形成Hash散列很简单,但是私钥加密怎么办,私钥只有CA机构才持有。

第三步,将企业基本信息(域名、公钥等)和上一步形成的数据签名合并,形成证书。第一步最后说到,数据摘要是用于比对来检测数据是否被修改,那就需要有个比对的对象,跟谁比对,当然是解密后的数据签名。

https通信过程中,第三方是如何修改我们的数据?应对策略又是怎样的?_第4张图片

2、浏览器检测数据

申请证书的三步,每一步都有自己的作用,浏览器发起一次空请求时,服务器要返回自己的公钥,因为自己的证书里已经携带了公钥,直接把证书发给浏览器即可。

假设现在第三方拦截证书,如果他想狸猫换太子,当然没用,他能形成Hash散列,但是他要怎么加密?加密的私钥s在CA机构手里。

https通信过程中,第三方是如何修改我们的数据?应对策略又是怎样的?_第5张图片

 假设第三方拦截证书,里面的公钥都是明文的,然后把明文公钥替换成自己的,送到浏览器手里。浏览器第一步将 拿到的企业基本信息(包括域名、公钥等)使用Hash散列算法加密 得到数据摘要A,第二步将数据签名使用公钥解密得到数据摘要B,如果两者一比对发现不一致,说明数据被第三方修改了。

https通信过程中,第三方是如何修改我们的数据?应对策略又是怎样的?_第6张图片

你可能感兴趣的:(Linux,网络基础,https,安全,网络协议)