HTTPS加密过程

154 阅读3分钟

HTTPS加密过程

1.客户端发起请求 client hello
  • 选择支持的类型,包括TLS/SSL版本,客户端支持的算法
  • 生成一个随机数
  • 支持的压缩算法
2.服务器响应 server hello
  • 服务器选择使用的 TLS 版本
  • 从客户端给出的支持的算法中选择出一种算法
  • 生成一个随机数
  • 服务器的数字证书,包含公钥
3.服务器发送证书
  • 服务器会向客户端发送 数字证书,该证书包含服务器的公钥。证书是由权威的数字证书颁发机构(CA)签名的,客户端通过验证证书确保服务器的身份
4.客户端验证证书
  • 客户端会验证服务器发送的数字证书的合法性,通常通过证书链验证其是否由可信的 CA 签发,以及证书是否过期或被吊销。如果验证通过,握手继续;如果失败,握手过程会终止,连接被拒绝,客户端会向用户发出警告。
5.生成会话密钥
  • 客户端生成一个随机数,称之为 Pre Master Secret,这个随机数通过上面传送的公钥进行加密,然后传送给服务器,服务器可以使用私钥进行解密,这里是一个非对称加密的过程。
  • 客户端和服务器现在都拥有三个值:
    • 客户端的随机数(Client Random)。
    • 服务器的随机数(Server Random)。
    • Pre-Master Secret(客户端生成并发送给服务器的)。
  • 根据上面的3个随机数来生成一个对称加密的密钥
6.服务器解密
  • 服务器也有上述的3个随机数,然后可以生成一个对称加密的密钥,由此,客户端还有服务器都可以通过这个密钥来进行加密通讯。
7.客户端发送 Finish 消息
  • 客户端使用生成的会话密钥对 握手摘要(handshake digest)进行加密,并发送“Finished”消息。这标志着客户端已经准备好开始加密通信。
8.服务器发送 Finish 消息
  • 服务器也使用生成的会话密钥加密握手摘要,并发送“Finished”消息。表示服务器也准备好进行加密通信。
9.加密通讯
  • 握手完成后,客户端和服务器之间的通信将使用生成的对称加密密钥进行加密。此时,双方都可以开始安全传输数据。
客户端                  服务器
  |  ----------- Client Hello ---------->  |
  |                                        |
  |  <---------- Server Hello ------------ |
  |           + 服务器证书                 |
  |                                        |
  |  ------- 生成 Pre-Master Secret ------> |
  |  (使用服务器公钥加密)                   |
  |                                        |
  |  <------ 确认 Pre-Master Secret 解密 ----|
  |                                        |
  |  --------- Finished (握手完成) --------> |
  |                                        |
  |  <--------- Finished (握手完成) --------|
  |                                        |
  |             安全通信开始                |

关键点:

  • 数字证书:确保服务器身份的真实性,防止中间人攻击(MITM)。
  • 公钥和私钥:握手过程中,公钥用于加密 Pre-Master Secret,而私钥用于解密。
  • 会话密钥:生成的对称加密密钥用于之后的安全数据传输,因为对称加密相比非对称加密效率更高。

HTTPS 握手的安全性保障:

  1. 身份认证:通过数字证书验证服务器的身份,确保用户与合法服务器通信。
  2. 加密通信:通过公钥加密 Pre-Master Secret,客户端和服务器生成的会话密钥用于加密数据,保证数据的保密性。
  3. 数据完整性:握手完成后,所有通信内容使用会话密钥加密,防止数据被篡改。