https
2020-02-22 本文已影响0人
9吧和9说9话
为啥需要https
http传输中 数据都是明文传输的,很容易被”中间人“窃取、伪造、篡改。
![](https://img.haomeiwen.com/i11434708/839a02f59fa38833.png)
实现方案
加入安全层 TSL/SSL
;安全层 主要负责两个功能:对数据进行加密和解密。
![](https://img.haomeiwen.com/i11434708/4d5042f1efd861ac.png)
加密过程
第一版 使用对称加密
![](https://img.haomeiwen.com/i11434708/5ffe039939c2cfd0.png)
总的来说比较简单:
-
client
向server
发送了支持的加密算法和client-random
-
server
收到之后,给出了约定的加密算法和server-random
-
client
使用client-random
和server-random
计算得出密钥, - 使用计算出来的密钥 加密数据 ,通过TCP传输
-
server
使用client-random
和server-random
计算得出密钥, 解密数据
存在的问题:
- 因为发送加密套件和
client-random
server-random
以及计算密钥的方法都是明文公开的,所以依然能够被劫持和攻击。
第二版 使用非对称加密
非对称加密: 非对称加密算法有 A、B 两把密钥,如果你用 A 密钥来加密,那么只能使用 B 密钥来解密;反过来,如果你要 B 密钥来加密,那么只能用 A 密钥来解密。
![](https://img.haomeiwen.com/i11434708/4f605083ed9abe0d.png)
过程:
-
client
向server
发送了支持的加密算法 -
server
给出约定的假面方法和公钥 -
client
使用公钥进行加密数据,TCP 传输 -
server
收到数据,使用私钥进行解密
存在问题:
- 非对称加密的效率相比对称加密效率很低。
- 无法保证服务器发送给浏览器的数据安全
第三版 混合加密
![](https://img.haomeiwen.com/i11434708/1533cc1dbb16fea5.png)
这个流程有点复杂:
第一步: 双方需要同步三个随机数client-random
server-random
pre-master
,使用相同的方法来生成对称加密的密钥。
第二步: 使用对称加密传输数据
具体第一步:
-
client
发送 对称加密套件列表+非对称加密套件列表+client-random
给server
-
server
给出约定的对称加密算法+非对称加密算法+server-random
+公钥 -
client
生成pre-master
随机数,通过公钥和约定的非对称加密算法加密发送给server
. -
server
拿到加密的pre-master
随机数,使用私钥解密,得到pre-master
。
这样双方都获取到了三个随机数。
第二步:
- 使用三个随机数
client-random
server-random
pre-master
生成master-secret
(对称加密的密钥) - 使用密钥 + 约定的对称加密算法进行加密数据,TCP 传输
-
server
使用三个随机数client-random
server-random
pre-master
生成master-secret
(对称加密的密钥),解密数据。
存在的问题:
通过对称和非对称混合方式,我们完美地实现了数据的加密传输。不过这种方式依然存在着问题,比如我要打开极客时间的官网,但是黑客通过 DNS 劫持将极客时间官网的 IP 地址替换成了黑客的 IP 地址,这样我访问的其实是黑客的服务器了,黑客就可以在自己的服务器上实现公钥和私钥,而对浏览器来说,它完全不知道现在访问的是个黑客的站点。
所以我们还需要服务器向浏览器提供证明“我就是我”,那怎么证明呢?
添加数字证书(三方公正机构)