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


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

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

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

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

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

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

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

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

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

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

    1、服务器申请证书

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

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

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

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

    2、浏览器检测数据

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

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

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

  • 相关阅读:
    Python Selenium 八大元素定位方法(上)
    牛客每日刷题之二叉树
    SQLite Studio软件的安装及基本使用
    闪迪ssd plus固态硬盘不识别开卡成功,慧荣SM2246XT量产教程
    动态规划 DP 的一些笔记以及解题思路
    强烈建议,以后可视化大屏都按这个标准来
    强缓存和协商缓存
    源码中的设计模式--模板方法模式
    LeetCode HOT 100 —— 102.二叉树的层序遍历
    Vue项目如何打包并部署(nginx)
  • 原文地址:https://blog.csdn.net/challenglistic/article/details/126395912