HTTPS 加密原理总结

大部分的HTTPS不需要客户端证书。这个过程只是为了保证客户端传到服务器的数据在传输过程中没有被篡改,并没有验证客户端的身份。

先说不需要客户端证书的吧。需要客户端证书的只是在这个基础上增加了服务器对客户端证书是否被信任的校验,并确保证书不在吊销列表中。

  1. 浏览器访问一个https站点,服务器首先会把它的证书和公钥发给浏览器。
  2. 浏览器端根据本地的信任证书颁发机构列表,判断服务器证书是否可信,如果不可信的话浏览器会有安全警告。如果可信或者用户执意要访问,浏览器就会生成一个私钥,并把请求的网址用自己的私钥加密(这是对称加密,需要解密的一方也要拿到私钥),把自己的私钥用第一步得到的服务器公钥进行加密(这是非对称加密,及加密和解密用不同的密钥)。然后把加密后的要访问的地址和自己的私钥发给服务器。注意:这个时候只有服务器才能解密得到浏览器发的私钥,而如果没有浏览器私钥,也不能解密得到用户要访问的地址。
  3. 服务器收到数据包,用自己的私钥解密(非对称),得到浏览器端的私钥,用浏览器端私钥解密(对称)用户要访问的地址;接下来把用户请求地址的响应内容使用浏览器端私钥加密(对称),加密结果发送给浏览器端。
  4. 浏览器端收到服务器数据包,用自己的私钥解密,在浏览器中呈现出来。
  5. 随后的所有交互都只是服务器和浏览器之间用浏览器端私钥进行加密(对称)的数据传输。

为什么设计的这么复杂,握手用非对称加密,传输用对称加密,原因是:

(1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。

(2) 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。

这样达到的效果就是,握手阶段用非对称加密传输了客户端的私钥(很安全),后续交互全都用客户端私钥进行对称加密(很高效)。