type
status
date
slug
summary
tags
category
icon
password
创建时间
Oct 31, 2024 01:54 PM

HTTPS RSA 算法握手流程一共需要四次握手:
- 客户端问候(
ClientHello
) - TLS 版本
- 加密算法套件(Cipher Suites)
- 随机数(Client Random)
客户端向服务器发送一个 ClientHello 消息,包含:
- 服务器问候(ServerHello)
- 确认的 TLS 版本
- 确认的加密算法套件(Cipher Suite)
- 随机数(Server Random)
服务器接收到 ClientHello 后,会认证 TLS 版本号是否支持,选择一个加密算法套件,保证客户端的随机数,再生成一个随机数。所以 ServerHello 的消息包含:
除此之外,服务器还需向客户端发送自己的数字证书,内含公钥,用于证明其身份,这个步骤是服务器证书(Server Certificate) 。
PEM 文件用途:通常包含公钥证书,可以包括单个或多个证书。内容:可能包括服务器的 SSL/TLS 证书、中间 CA 证书以及根 CA 证书。格式:以-----BEGIN CERTIFICATE-----
和------END CERTIFICATE-----
包围的数据块形式存在。这些标记之间是 Base64 编码的数据。Key 文件:用途:包含私钥,与公钥配对使用。私钥必须保密,因为它用于解密通过公钥加密的信息。内容:仅包含与特定公钥相关联的私有部分。格式:以-----BEGIN PRIVATE KEY-----
和------END PRIVATE KEY-----
或者类似标记包围的数据块形式存在,同样也是 Base64 编码。
最后,服务器会发送服务器完成(ServerHelloDone),表示握手的初步阶段结束。
- 客户端密钥交换(Client Key Exchange) + 开始使用加密(Change Cipher Spec) + 客户端完成(Client Finished)
客户端通过 CA (证书认证机构)验证服务端传递过来的服务器证书可信后,再次生成一个随机数(Pre-Master Secret),使用证书得到的公钥加密 Pre-Master Secret,并通过客户端密钥交换(Clientl Key Exchange)发送给服务端。
Server收到预主密钥后,用自己的私钥(跟公钥是一对,当时和证书一起发送给了客户端,私钥服务端自己留着用于解密)解密预主密钥,获取真正的预主密钥。 Client和Server双方使用相同的算法进行通信,双方此时都获得了Client 随机数、Server 随机数、预主密钥,生成相同的密钥 Key 用于后面通信的对称加密。
紧接着再发送开始使用加密(Change Cipher Spec)给服务器端。因为此时不论是客户端还是服务端都拿到了三个随机数(第一次客户端给的、第二次服务端给的、第三次客户端的 Pre-Master Secret)。
因此这三个随机数就可以计算出作为对称加密的密钥,用户后续传输的加解密。这个步骤后,后续的传输数据都是加密的。
发送完(Change Cipher Spec)后,客户端再发送客户端完成(Client Finished),这个 Finished 会带上 Encrypted Handshake Message,这个 message 就是之前发送的所有数据的摘要,并且还用生成的对称加密密钥加密了,传递给服务器端验证,预防握手过程中的握手信息被修改。
- 服务器发送开始使用加密(Change Cipher Spec) + 服务器完成(Server Finished)
服务器使用私钥解密预主密钥,客户端和服务器使用约定好的算法计算出主密钥(Master Secret)。
同理,服务器也是一样发送(Change Cipher Spec),代表后续要用加密数据传输了,且发送握手摘要给客户端验证,一切正常的话, RSA TLS握手就结束了。
所以,HTTPS 采用的是混合加密方式。
为什么采用混合加密?
采用混合加密的方式主要是为了结合对称加密和非对称加密各自的优点,从而实现高效且安全的数据传输。以下是具体原因:
- 性能效率:
- 对称加密:使用单一秘钥进行数据的加解密,速度快,适合处理大量数据。这使得它非常适合用于实际的数据传输。
- 非对称加密:虽然更安全,但由于涉及复杂的数学运算,其速度较慢,不适合大规模数据传输。
- 安全性:
- 非对称加密(如 RSA)用于在握手阶段安全地交换会话秘钥(即 Pre-Master Secret),确保只有通信双方能够生成相同的会话秘钥。
- 对称加密则利用这个会话秘钥来保护实际的数据传输过程,以保证机密性和完整性。