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.加密通讯
- 握手完成后,客户端和服务器之间的通信将使用生成的对称加密密钥进行加密。此时,双方都可以开始安全传输数据。
客户端 服务器
|
| |
| <
| + 服务器证书 |
| |
|
| (使用服务器公钥加密) |
| |
| <
| |
|
| |
| <
| |
| 安全通信开始 |
关键点:
- 数字证书:确保服务器身份的真实性,防止中间人攻击(MITM)。
- 公钥和私钥:握手过程中,公钥用于加密 Pre-Master Secret,而私钥用于解密。
- 会话密钥:生成的对称加密密钥用于之后的安全数据传输,因为对称加密相比非对称加密效率更高。
HTTPS 握手的安全性保障:
- 身份认证:通过数字证书验证服务器的身份,确保用户与合法服务器通信。
- 加密通信:通过公钥加密 Pre-Master Secret,客户端和服务器生成的会话密钥用于加密数据,保证数据的保密性。
- 数据完整性:握手完成后,所有通信内容使用会话密钥加密,防止数据被篡改。