HTTPS(超文本传输安全协议)的连接流程结合了传输层的TCP三次握手和TLS(传输层安全性协议)的握手过程来提供一个安全的连接。这个过程可以大致分为以下几个步骤:
1. TCP三次握手
这是任何HTTP或HTTPS连接开始的地方。客户端和服务器之间建立一个TCP连接,这是一个可靠的连接,确保了数据包正确无误地到达。
2. TLS握手
在TCP连接成功建立之后,TLS握手过程开始,目的是安全地交换密钥,验证服务器,并且建立加密通道。
a) 客户端Hello(Client Hello)
客户端发送一个“Client Hello”消息到服务器,包含:
- 客户端支持的TLS版本。
- 可接受的加密算法(密码套件)列表。
- 一个客户端随机数(Client Random),之后用于生成加密密钥。
b) 服务器Hello(Server Hello)
服务器响应一个“Server Hello”消息,包含:
- 选择的TLS版本和密码套件。
- 一个服务器随机数(Server Random)。
- 服务器证书(通常是X.509格式)。
c) 服务器证书验证
客户端验证服务器证书的有效性,它可能包括:
- 确认证书由可信的证书颁发机构(CA)签名。
- 检查证书的有效期。
- 确认证书中的域名与正在连接的服务器域名一致。
d) 密钥交换
客户端使用从服务器证书中提取的公钥,发送预主密钥(Pre-Master Secret),这通常是加密的。
e) 会话密钥生成
客户端和服务器都使用客户端随机数、服务器随机数和预主密钥生成相同的会话密钥,这将用于此后的对话加密。
f) 客户端完成(Client Finished)
客户端发送一个“Finished”消息,这通常是之前所有消息的加密和散列值,用于服务器验证。
g) 服务器完成(Server Finished)
服务器同样发送一个“Finished”消息,客户端验证这个消息以确保没有中间人攻击。
3. 加密通信
HTTPS使用的是一种称为公钥基础设施(PKI)的体系结构,在这种体系结构中,确实使用了公钥和私钥机制,但它结合了对称加密和非对称加密的优点来提供安全通信。
- 非对称加密:
- 在初始的握手阶段,服务器会向客户端发送其公钥作为数字证书的一部分。
- 客户端将使用此公钥加密信息(如预主密钥),然后发送回服务器。
- 只有持有对应私钥的服务器才能解密这些信息,这确保了即使这些信息被截获,没有私钥也无法解密。
- 这个过程是非对称的,因为加密(公钥)和解密(私钥)使用不同的密钥。
- 对称加密:
- 一旦非对称步骤完成,客户端和服务器就会使用交换的信息来生成对称的会话密钥。
- 后续的通信将使用这个对称密钥进行加密和解密,这意味着客户端和服务器都使用同一个密钥。
- 对称加密比非对称加密更快,适合大量数据的加密通信。