https

2020-02-22  本文已影响0人  9吧和9说9话

为啥需要https

http传输中 数据都是明文传输的,很容易被”中间人“窃取、伪造、篡改。

为啥需要https 图片来源:极客时间

实现方案

加入安全层 TSL/SSL;安全层 主要负责两个功能:对数据进行加密和解密。

图片来源:极客时间

加密过程

第一版 使用对称加密

使用对称加密 图片来源:极客时间

总的来说比较简单:

  1. clientserver发送了支持的加密算法和client-random
  2. server 收到之后,给出了约定的加密算法和server-random
  3. client 使用 client-randomserver-random 计算得出密钥,
  4. 使用计算出来的密钥 加密数据 ,通过TCP传输
  5. server 使用 client-randomserver-random 计算得出密钥, 解密数据

存在的问题:

  1. 因为发送加密套件和client-random server-random 以及计算密钥的方法都是明文公开的,所以依然能够被劫持和攻击。

第二版 使用非对称加密

非对称加密: 非对称加密算法有 A、B 两把密钥,如果你用 A 密钥来加密,那么只能使用 B 密钥来解密;反过来,如果你要 B 密钥来加密,那么只能用 A 密钥来解密。

使用非对称加密 图片来源:极客时间

过程:

  1. clientserver发送了支持的加密算法
  2. server 给出约定的假面方法和公钥
  3. client 使用公钥进行加密数据,TCP 传输
  4. server收到数据,使用私钥进行解密

存在问题:

  1. 非对称加密的效率相比对称加密效率很低。
  2. 无法保证服务器发送给浏览器的数据安全

第三版 混合加密

混合加密 图片来源:极客时间

这个流程有点复杂:
第一步: 双方需要同步三个随机数client-random server-random pre-master,使用相同的方法来生成对称加密的密钥。
第二步: 使用对称加密传输数据

具体第一步:

  1. client 发送 对称加密套件列表+非对称加密套件列表+client-randomserver
  2. server给出约定的对称加密算法+非对称加密算法+server-random+公钥
  3. client 生成pre-master随机数,通过公钥和约定的非对称加密算法加密发送给server.
  4. server 拿到加密的pre-master随机数,使用私钥解密,得到pre-master
    这样双方都获取到了三个随机数。

第二步:

  1. 使用三个随机数 client-random server-random pre-master 生成master-secret(对称加密的密钥)
  2. 使用密钥 + 约定的对称加密算法进行加密数据,TCP 传输
  3. server 使用三个随机数 client-random server-random pre-master 生成master-secret(对称加密的密钥),解密数据。

存在的问题:

通过对称和非对称混合方式,我们完美地实现了数据的加密传输。不过这种方式依然存在着问题,比如我要打开极客时间的官网,但是黑客通过 DNS 劫持将极客时间官网的 IP 地址替换成了黑客的 IP 地址,这样我访问的其实是黑客的服务器了,黑客就可以在自己的服务器上实现公钥和私钥,而对浏览器来说,它完全不知道现在访问的是个黑客的站点。

所以我们还需要服务器向浏览器提供证明“我就是我”,那怎么证明呢?

添加数字证书(三方公正机构)

上一篇 下一篇

猜你喜欢

热点阅读