HTTPS加密的过程

343 阅读4分钟

HTTPS加密的过程

1. https有哪些加密方式

1.1 对称加密:

加密和解密时使用的密钥都是同一个

截屏2022-08-28下午9.28.51.png 加密过程:

  1. 服务端和客户端协商一个密钥A
  2. 客户端将传输的内容使用密钥A进行加密后传输给服务端
  3. 服务端接收到加密后的内容后,使用密钥A进行解密,得到明文内容

缺点:

存在安全隐患:密钥A在传输过程中容易被窃取

1.2 非对称加密:

加密和解密时使用的密钥不是同一个(一个叫“公钥”,一个叫“私钥”)

截屏2022-08-28下午9.29.26.png 加密过程:

  1. 客户端存储一份公钥B1、私钥B2,服务端存储一份公钥A1、私钥A2
  2. 客户端请求访问站点时,服务端将自己的公钥A1返回给客户端
  3. 客户端接收到服务端的公钥A1后,再次发起请求,将客户端的公钥B1发送给服务端
  4. 客户端将传输的内容用服务端的公钥A1进行加密后传输给服务端
  5. 服务端接收到密文后,使用服务端的私钥A2进行解密,得到明文内容
  6. 服务端向客户端发送数据前,使用客户端的公钥B1对数据进行加密后进行传输
  7. 客户端接收到密文后,使用服务端的公钥A1进行解密,得到明文内容

缺点:

非对称加解密耗时要远大于对称加解密,对性能有很大损耗,大家的使用体验很差

1.3 混合加密

在通信刚开始的时候使用非对称算法,首先解决密钥交换的问题。 双方拿到密钥后,后续就不再使用非对称加密,全都使用对称加密。

截屏2022-08-28下午9.30.24.png 加密过程:

  1. 服务端存储一份公钥A1、私钥A2
  2. 客户端请求访问站点时,服务端将自己的公钥A1返回给客户端
  3. 客户端接收到服务端的公钥A1后,用随机数产生对称算法使用的“会话密钥key”,再用公钥A1加密生产密钥K,然后将密钥K传输给服务端
  4. 服务端接收到密钥K后,使用服务端的私钥A2进行解密,得到“会话密钥key”
  5. 双方拿到密钥后,后续就不再使用非对称加密,全都使用对称加密。

缺点:

中间人攻击安全隐患:

第2步:中间人将其替换成自己的公钥B1传送给浏览器。

第3步:浏览器使用公钥B1加密发送出去,又被中间人截获,中间人利用自己的私钥B2解密,得到密钥K,再使用服务端的公钥A1加密传送给服务端,完成了通信链路,

而服务端和客户端毫无感知。

风险案例:

黑客通过 DNS 劫持将官网的 IP 地址替换成了黑客的 IP 地址,这样用户访问的其实是黑客的服务器了,黑客就可以在自己的服务器上实现公钥和私钥

2. 如何解决混合加密的中间人攻击问题

出现这一问题的核心原因是客户端无法确认收到的公钥是不是真的是服务端发来的, 为了解决这个问题,互联网引入了一个公信机构,这就是CA。

截屏2022-08-28下午9.43.39.png

2.1 数字证书包含些什么内容

数字证书里包含:

  • 证书持有者、证书有效期、公钥等信息
  • 企业公钥
  • 哈希算法
  • 将明文进行哈希后用CA私钥加密得到的数字签名

2.2 数字签名是如何生成的

CA 使用 Hash 函数来计算公司提交的明文信息,并得出信息摘要; 然后再使用CA的私钥对信息摘要进行加密,加密后的密文就是 CA 颁给公司的数字签名。

2.3 浏览器如何验证数字证书

  1. 浏览器接收到数字证书之后,首先读取证书中相关的明文信息,采用 CA 签名时相同的 Hash 函数来计算,得到信息摘要 A;
  2. 然后再利用对应 CA 的公钥解密签名数据,得到信息摘要 B;
  3. 对比信息摘要 A 和信息摘要 B,如果一致,则可以确认证书是合法的
  4. 同时浏览器还会验证证书相关的域名信息、有效时间等信息

参考: 1.《大前端进阶 安全》系列 HTTPS详解(通俗易懂)