虽让常常作为面试基础题,但很多面试者的回答的含糊不清,让我们重新认识它们吧。

  1. 客户端向服务器发送HTTPS请求,请求中包含一个随机数和支持的加密算法。
  2. 服务器向客户端返回数字证书,证书中包含公钥和服务器的信息。
  3. 客户端使用数字证书中的公钥来加密一个随机数,作为共享密钥。这个随机数被称为“Pre-Master Secret”。
  4. 客户端向服务器发送一个握手消息,该消息中包含共享密钥的信息,握手消息使用数字证书中的公钥进行加密。该握手消息被称为“ClientHello”。
  5. 服务器使用数字证书中的私钥来解密握手消息,从中获取共享密钥的信息。服务器然后使用该共享密钥生成一个新的随机数,作为“Master Secret”。
  6. 服务器向客户端发送一个握手消息,该消息中包含共享密钥的信息,握手消息使用共享密钥进行加密。该握手消息被称为“ServerHello”。
  7. 客户端使用共享密钥来解密握手消息,从中获取共享密钥的信息。客户端然后使用该共享密钥和之前生成的“Pre-Master Secret”计算出“Master Secret”。
  8. 服务器和客户端使用“Master Secret”来生成会话密钥,用于加密和解密数据。
  9. 服务器和客户端使用会话密钥来加密和解密数据,保证数据的安全性和完整性。同时,每次数据传输都需要重新生成一个新的随机数作为“Initialization Vector”,以增加加密强度。