HTTPS握手过程与密钥交换详解
字数 1198 2025-11-16 16:48:50
HTTPS握手过程与密钥交换详解
一、HTTPS概述
HTTPS是在HTTP协议基础上添加SSL/TLS加密层的安全传输协议,通过加密通信内容防止窃听、篡改和冒充。其核心安全机制依赖于数字证书和密钥交换过程。
二、SSL/TLS协议分层
- 握手协议:协商加密参数、验证身份、生成会话密钥
- 记录协议:对传输数据分段、压缩、加密和添加MAC
- 警报协议:传输错误警告和连接关闭通知
- 变更密码规范协议:通知对方切换至加密通信模式
三、完整握手过程(RSA密钥交换为例)
Client Server
| |
| 1. ClientHello(随机数、密码套件列表) |
| ----------------------------------------------------> |
| |
| 2. ServerHello(随机数、选定密码套件) |
| 3. Certificate(服务器证书链) |
| 4. ServerKeyExchange(可选,如DH参数) |
| 5. ServerHelloDone |
| <---------------------------------------------------- |
| |
| 6. ClientKeyExchange(预主密钥加密传输) |
| 7. ChangeCipherSpec(切换加密通知) |
| 8. Finished(加密的握手完成消息) |
| ----------------------------------------------------> |
| |
| 9. ChangeCipherSpec |
|10. Finished |
| <---------------------------------------------------- |
| |
| 加密的应用数据通信开始 |
四、逐步解析关键阶段
阶段1:ClientHello
- 客户端生成随机数ClientRandom(32字节)
- 发送支持的TLS版本、密码套件列表(如TLS_AES_128_GCM_SHA256)
- 包含SNI扩展指示目标域名
阶段2:ServerHello响应
- 服务器生成随机数ServerRandom(32字节)
- 从客户端列表中选择双方都支持的密码套件
- 确定是否使用会话恢复或重新握手
阶段3:证书验证
- 服务器发送X.509数字证书链(叶子证书→中间CA→根CA)
- 客户端用预置的根证书验证证书链的完整性和有效性
- 检查证书域名匹配、有效期和吊销状态(OCSP/CRL)
阶段4:密钥交换(核心)
- 预主密钥生成:客户端生成48字节预主密钥(Premaster Secret)
- 密钥传输:用服务器证书公钥加密预主密钥,发送ClientKeyExchange
- 密钥推导:双方通过PRF函数基于以下输入计算主密钥:
主密钥 = PRF(预主密钥, "master secret", ClientRandom + ServerRandom) - 会话密钥生成:基于主密钥派生实际加密使用的密钥块:
分割为:客户端MAC密钥、服务器MAC密钥、客户端加密密钥、服务器加密密钥密钥块 = PRF(主密钥, "key expansion", ServerRandom + ClientRandom)
阶段5:切换加密与完成验证
- ChangeCipherSpec:明文通知对方后续消息将加密
- Finished消息:发送加密的HMAC值,包含之前所有握手消息的摘要
- 双向验证:双方校验Finished消息确保握手过程未被篡改
五、密钥交换算法演进
- RSA密钥交换:预主密钥由客户端生成并通过服务器公钥加密传输
- DH系列算法:
- 传统DH:双方交换DH参数计算共享密钥
- ECDHE(现代主流):基于椭圆曲线,支持前向保密
客户端生成临时密钥对 → 发送ClientKeyExchange包含公钥参数 服务器生成临时密钥对 → 发送ServerKeyExchange包含公钥参数 双方通过ECDH计算得到相同的预主密钥
六、会话恢复优化
- Session ID恢复:服务器保存会话状态,客户端发送之前会话ID跳过完整握手
- Session Ticket:服务器加密会话状态发送给客户端,客户端下次握手时带回
七、安全特性分析
- 保密性:对称加密保护传输数据(如AES-GCM)
- 完整性:HMAC防止数据篡改
- 身份验证:数字证书验证服务器身份(客户端证书可选)
- 前向保密:ECDHE等算法确保即使服务器私钥泄露,历史通信仍安全
通过以上步骤,HTTPS在TCP连接基础上建立了安全的加密通道,后续所有HTTP通信都通过该通道进行加密传输,保障了Web通信的安全性。