lovelmh13 / myBlog

个人博客 记录菜狗的学习之路
6 stars 0 forks source link

HTTPS #70

Open lovelmh13 opened 3 years ago

lovelmh13 commented 3 years ago

HTTPS

在 HTTP 传输中,内容都是以明文的方式传递的,不安全,很容易被获取到。这个方式叫做中间人攻击。如果要安全的传输内容,就要使用 HTTPS,对请求和响应的内容进行加密。

HTTPS 在 HTTP 和 TCP 请求之间,多加了一层 TLS 安全层来对数据进行加密解密。

img

使用对称加密

对称加密是最简单方便的加密,发送端和接收端都是用相同的方式来进行加解密。

img

但是,对称加密有个问题,就是生成密钥之前的协商过程,加密套件和 client-random 和 service-random 是使用明文传递的,这样也会被拦截。

使用非对称加密

为了避免加密套件和随机数被拦截到,改用非对称加密。非对称加密使用公私钥来进行加密。

服务器会生成两种密钥 ,一个是公钥一个是私钥。服务器会把公钥发给浏览器端。自己留下私钥,从不公开。如果只有公钥,没有私钥,那么也不能解密。

公钥加密的数据只能用私钥解,私钥加密的数据只能用公钥解。

有了公钥的浏览器,就可以对数据进行加密了,只有有对应私钥才可以对公钥加密的数据进行解密。所以及时被别人拿到了公钥也不用担心数据被解密。

不过这里存在一个明显的问题,就是黑客也可以获取到公钥,服务器端只能用私钥加密,私钥加密的数据可以用公钥来解,这样就不能做到服务器端发送数据的安全性了,黑客可以解密并篡改服务器端发送的数据,浏览器能够收到数据,那攻击者必然也能够收到数据。

所以,使用非对称加密虽然可以保证浏览器发送的数据安全,但是并不能保证无服务器发送来的数据是安全的

非对称加密还有一个缺陷:非对称的加密效率太低,会影响用户体验。

混合加密

我们既想做到效率高,又想做到安全,于是乎就把对称加密和非对称加密混合起来用,结合他们的长处,规避短处,来满足我们希望的效果。

由于浏览器和服务器是同一套方法来加密的,又是对称的,所以生成的密钥也是一样的。

在这个过程中,pre-master 是在浏览器端经过公钥加密生成后再传输的,所以黑客拿到了 pre-master 也没有私钥,生成不出解密的密钥,这就保证了数据的安全性。

数字证书

即使是经过了混合加密,但是如果黑客通过 DNS 劫持,直接把被访问的网站的 IP 改成了他自己的 IP 地址,那么我们再怎么加密也于事无补了。

所以,需要服务器证明,「我即是我」。

通过 CA 机构办法的数字证书,可以来证明。数字证书里面包括服务器的身份和服务器的公钥。

img

在混合加密的基础上,做了两点改变:

  1. 服务器不再发送公钥,而是直接发送证书,公钥就包含在证书里面。
  2. 浏览器收到服务器返回的加密套件和随机数以及证书以后,先验证证书的身份,再生成 pre-master。

验证证书

验证证书主要是通过摘要信息来验证。

具体其他数字证书的相关问题,可以看极客时间 《浏览器工作原理与实践》

参考

极客时间 《浏览器工作原理与实践》