在 HTTPS 连接中,非对称加密主要用于连接建立的初始阶段,特别是在 SSL/TLS 握手过程中。握手完成后,通信的加密方式会切换为对称加密。具体来说,过程如下:
1. TLS/SSL 握手阶段(非对称加密)
- 非对称加密的使用:在 TLS/SSL 握手阶段,客户端和服务器使用非对称加密算法来安全地交换加密密钥。这些密钥将用于后续的对称加密。
- 服务器证书:服务器发送包含公钥的数字证书给客户端,客户端使用该公钥加密一个随机生成的密钥(称为“会话密钥”),然后发送给服务器。
- 密钥交换:服务器使用自己的私钥解密这个会话密钥。此时,客户端和服务器都持有了相同的会话密钥。
非对称加密算法通常包括 RSA、ECDSA 等。这些算法虽然安全性高,但加密和解密过程相对耗时和资源密集,因此通常只用于会话初始阶段的密钥交换。
2. 会话阶段(对称加密)
- 对称加密的使用:握手阶段完成后,客户端和服务器都持有了相同的会话密钥。接下来,双方使用这个对称密钥来加密和解密数据的传输内容。
- 对称加密的优势:对称加密算法(如 AES、ChaCha20)相对非对称加密更高效,能够快速加密和解密大量数据。因此,它适合用于保护实际的通信内容。
- 会话密钥:会话密钥是随机生成的,且仅在当前会话中有效。即使该密钥被泄露,也只会影响当前会话的安全性,后续的会话会使用新的密钥。
3. 为什么采用这种方式?
- 性能考虑:非对称加密的计算复杂度较高,如果在整个通信过程中都使用非对称加密,会导致性能瓶颈。因此,非对称加密仅用于握手阶段的密钥交换,确保密钥传输的安全性。
- 安全性:对称加密虽然在性能上优越,但需要先安全地共享密钥。非对称加密可以安全地交换密钥,结合两者的优点,实现了安全高效的数据传输。
4. 总结
- 握手阶段:使用非对称加密来交换对称加密的密钥,确保会话密钥的安全传输。
- 数据传输阶段:使用对称加密保护数据传输,确保通信内容的机密性和完整性。
这种组合使用非对称加密和对称加密的方式使得 HTTPS 既能保证安全性,又能在性能上保持高效。
HTTPS 的握手过程(SSL/TLS 握手)是建立安全连接的关键步骤,确保数据在传输过程中的机密性和完整性。握手流程涉及多个步骤,主要包括以下几个阶段:
1. 客户端发起请求
- 客户端Hello:
- 客户端向服务器发送一个 ClientHello 消息。这个消息包含了客户端支持的协议版本、加密套件(加密算法组合)、压缩方法以及一个随机数(
Client Random
)。 - 随机数:用于生成会话密钥的一部分。
- 客户端向服务器发送一个 ClientHello 消息。这个消息包含了客户端支持的协议版本、加密套件(加密算法组合)、压缩方法以及一个随机数(
2. 服务器回应
- 服务器Hello:
- 服务器回应一个 ServerHello 消息。这个消息包括服务器选择的协议版本、加密套件、压缩方法以及一个随机数(
Server Random
)。 - 服务器证书:服务器会发送一个包含公钥的数字证书。这个证书由受信任的证书颁发机构(CA)签名,客户端可以用来验证服务器的身份。
- 服务器密钥交换(如果需要):如果选择的加密套件要求额外的密钥交换信息(如 Diffie-Hellman 参数),服务器会发送这些信息。
- 服务器HelloDone:服务器发送一个 ServerHelloDone 消息,表示服务器端的初步握手信息已发送完成。
- 服务器回应一个 ServerHello 消息。这个消息包括服务器选择的协议版本、加密套件、压缩方法以及一个随机数(
3. 客户端验证和密钥交换
- 客户端验证证书:
- 客户端使用 CA 的公钥验证服务器的数字证书,确保证书的有效性和服务器的身份。
- 生成预主密钥:
- 客户端生成一个随机数(称为预主密钥,
Pre-Master Secret
),并使用服务器的公钥对其进行加密,然后发送给服务器。
- 客户端生成一个随机数(称为预主密钥,
- 客户端密钥交换:
- 客户端发送 ClientKeyExchange 消息,包含加密的预主密钥。
- 生成会话密钥:
- 客户端和服务器使用握手中交换的随机数(
Client Random
和Server Random
)以及预主密钥生成对称加密的会话密钥(Session Key
)。
- 客户端和服务器使用握手中交换的随机数(
- 客户端完成:
- 客户端发送 ChangeCipherSpec 消息,告知服务器接下来的通信将使用新的加密算法和会话密钥。
- 随后,客户端发送 Finished 消息,表明客户端的握手阶段已经完成。此消息经过加密,并包含握手过程中所有消息的摘要,确保握手过程的完整性。
4. 服务器完成
- 服务器完成:
- 服务器收到 ChangeCipherSpec 消息,切换到使用新的加密算法和会话密钥进行通信。
- 服务器发送 Finished 消息,确认服务器端握手过程完成。此消息也经过加密,确保整个握手过程的完整性。
5. 安全通信建立
- 数据传输:
- 握手完成后,客户端和服务器将使用之前生成的会话密钥进行对称加密的数据传输。所有后续的数据交换都在加密保护下进行,确保数据的机密性和完整性。
总结
HTTPS 的握手过程确保了安全连接的建立,包含以下关键步骤:
- 客户端Hello:客户端发起连接请求,包含协议版本和加密套件。
- 服务器Hello:服务器回应请求,发送证书和密钥交换信息。
- 客户端验证和密钥交换:客户端验证证书,并发送加密的预主密钥。
- 服务器完成:服务器确认握手完成,并开始使用会话密钥加密通信。
- 安全通信:握手完成后,客户端和服务器开始使用对称加密进行安全的数据传输。
这个握手流程确保了通信双方能够安全地交换密钥,并建立加密的通信通道,从而保护数据在网络上的传输安全。