以下是 TLS握手过程的详细拆解,涵盖客户端与服务器之间的关键交互步骤,包括ClientHello、ServerHello、证书验证、密钥交换等核心阶段,并对比TLS 1.2与TLS 1.3的差异:
一、TLS握手的核心目标
- 协商协议版本:确定双方支持的TLS版本(如TLS 1.2或1.3)。
- 选择加密套件:确定对称加密算法(如AES-GCM)、密钥交换算法(如ECDHE)等。
- 交换密钥:通过非对称加密生成共享的对称密钥。
- 验证身份:服务器证明自身合法性,客户端可选验证(双向认证时)。
- 建立安全通道:后续数据通过对称加密传输。
二、TLS 1.3 握手流程(精简版)
TLS 1.3 标准化后,握手步骤从 两次RTT(Round-Trip Time)优化为一次RTT,并支持0-RTT握手。以下是详细步骤:
1. ClientHello(客户端问候)
• 发送内容:
• 支持的TLS版本(优先TLS 1.3)。
• 客户端随机数(Client Random,32字节)。
• 支持的加密套件列表(按优先级排序,如TLS_AES_256_GCM_SHA384
)。
• 支持的密钥交换算法(如ECDHE-ECDSA、X25519)。
• 扩展字段(如SNI、Session ID)。
• 目的:告知服务器客户端的支持能力,启动握手。
2. ServerHello(服务器响应)
• 发送内容:
• 确认的TLS版本(如TLS 1.3)。
• 服务器随机数(Server Random,32字节)。
• 选择的加密套件(如TLS_AES_128_GCM_SHA256
)。
• 选择的密钥交换算法(如ECDHE with X25519)。
• 扩展字段(如证书链、OCSP Stapling)。
• 目的:确认协议版本和加密参数,进入密钥交换阶段。
3. 证书交换
• 服务器发送证书链:
• 服务器证书(由中间CA签发)。
• 中间CA证书(根CA通常不发送,预装在客户端中)。
• 客户端验证证书:
• 检查证书链有效性(颁发机构、有效期、域名匹配)。
• 检查吊销状态(CRL或OCSP)。
• 验证证书签名(使用内置根CA公钥)。
4. 密钥交换(ECDHE)
• 步骤:
- 生成临时密钥对:客户端和服务器各自生成ECDHE临时密钥对(如X25519)。
- 交换公钥:客户端发送自己的临时公钥,服务器回复自己的临时公钥。
- 计算共享密钥:双方用对方的公钥和己方的私钥计算出相同的共享密钥(Pre-Master Secret)。
• 特点:
• 前向保密:即使长期私钥泄露,历史会话无法解密。
• 密钥长度短:X25519密钥仅需256位,安全性等效RSA 3072位。
5. 生成会话密钥
• 公式:
Master Secret = PRF(Pre-Master Secret, Client Random + Server Random)
• PRF
:伪随机函数(基于HMAC-SHA256)。
• 使用Client Random和Server Random生成主密钥(Master Secret)。
• 衍生对称密钥:
• 客户端写MAC密钥、服务器写MAC密钥。
• 客户端写加密密钥、服务器写加密密钥。
• 初始化向量(IV)等。
6. 完成握手(Finished)
• 双方发送Finished消息:
• 内容包含握手过程中所有消息的哈希值(使用Master Secret加密)。
• 验证握手过程的完整性和密钥正确性。
• 后续通信:使用对称加密算法(如AES-GCM)传输数据。
三、TLS 1.2 握手流程(对比)
TLS 1.2 握手需两次RTT,且密钥交换与身份验证耦合,步骤如下:
1. ClientHello
• 与TLS 1.3类似,但支持旧版加密套件(如RSA、RC4)。
2. ServerHello
• 选择加密套件(如TLS_RSA_WITH_AES_128_CBC_SHA
)。
3. 证书交换
• 同TLS 1.3。
4. 密钥交换(RSA)
• 步骤:
- 服务器发送RSA公钥。
- 客户端生成预主密钥(Pre-Master Secret),用服务器公钥加密后发送。
- 服务器用私钥解密,获取预主密钥。
• 缺陷:无前向保密,私钥泄露可解密历史会话。
5. 生成会话密钥
• 使用预主密钥和随机数生成主密钥,后续步骤同TLS 1.3。
四、关键安全机制
1. 证书验证
• 信任链:客户端验证证书是否由受信任根CA签发。
• 吊销检查:
• CRL(证书吊销列表):下载CA发布的吊销列表,检查证书序列号。
• OCSP(在线状态协议):实时查询证书状态。
• OCSP Stapling:服务器缓存OCSP响应,减少客户端延迟。
2. 密钥交换安全
• ECDHE:抗量子计算,支持前向保密。
• RSA密钥交换(已淘汰):易受中间人攻击,无前向保密。
五、TLS 1.3的改进与优势
特性 | TLS 1.2 | TLS 1.3 |
---|---|---|
握手延迟 | 两次RTT | 一次RTT(0-RTT可选) |
加密套件数量 | 多(含弱算法) | 精简(仅AEAD+现代算法) |
前向保密 | 可选(需ECDHE) | 强制支持 |
密钥导出 | PRF基于SHA-256 | HKDF,更安全 |
0-RTT握手 | 不支持 | 支持(需会话复用) |
六、实际应用与优化
服务器配置:
• 优先启用TLS 1.3,禁用弱密码套件(如RC4、SHA-1)。• 使用ECDSA证书(比RSA更短、更快)。
性能优化:
• 启用OCSP Stapling,减少证书验证延迟。• 使用Session Resumption(会话复用)减少握手开销。
安全加固:
• 强制HSTS头部,防止降级攻击。• 配置CSP(内容安全策略)防御XSS。
总结
TLS握手是HTTPS通信的核心,通过协商加密参数、验证身份、生成共享密钥,确保数据传输的机密性与完整性。TLS 1.3通过精简协议、强制前向保密和0-RTT握手,显著提升了安全性与性能,成为现代网站的标配。