HTTPS与SSL/TLS握手过程详解
字数 1332 2025-11-03 00:19:05
HTTPS与SSL/TLS握手过程详解
知识点描述
HTTPS是在HTTP协议基础上增加了SSL/TLS加密层的安全通信协议,用于保障数据传输的机密性和完整性。其核心在于SSL/TLS握手过程,通过非对称加密协商对称密钥,最终使用对称加密高效传输数据。
一、HTTPS基础概念
-
HTTP的安全缺陷
- 明文传输:请求和响应内容可被中间人窃听
- 无法验证身份:可能访问到伪造的服务器
- 数据易被篡改:中间人可修改传输内容
-
HTTPS解决方案
- 加密传输:通过混合加密机制防止窃听
- 身份认证:通过数字证书验证服务器身份
- 完整性校验:通过MAC(消息认证码)防篡改
二、SSL/TLS握手分步解析
以TLS 1.2为例,完整握手包含以下步骤:
-
ClientHello(客户端问候)
- 客户端发送:
- 支持的TLS版本(如TLS 1.2)
- 客户端随机数(Client Random,用于后续密钥生成)
- 支持的密码套件列表(如RSA、ECDHE等)
- 会话ID(用于会话恢复)
- 客户端发送:
-
ServerHello(服务器回应)
- 服务器返回:
- 选定的TLS版本和密码套件
- 服务器随机数(Server Random)
- 会话ID(新会话时生成新ID)
- 服务器返回:
-
服务器证书发送
- 服务器将数字证书链发送给客户端
- 证书包含服务器公钥、域名、颁发机构(CA)等信息
- 可选发送请求客户端证书(双向认证场景)
-
ServerKeyExchange(密钥交换)
- 根据密码套件类型可能发送:
- DH参数:服务器临时公钥(用于ECDHE等算法)
- 签名:用服务器私钥对参数签名(防篡改)
- 根据密码套件类型可能发送:
-
ServerHello Done
- 服务器告知客户端初始协商消息发送完毕
-
客户端验证证书
- 客户端验证证书链:
- 检查证书有效期
- 验证颁发机构是否受信任(查询系统信任库)
- 核对证书中的域名与访问域名是否一致
- 验证数字签名确保证书未被篡改
- 客户端验证证书链:
-
ClientKeyExchange(客户端密钥交换)
- 客户端生成预主密钥(Pre-Master Secret)
- 用服务器公钥加密预主密钥发送给服务器
- (ECDHE方案下)客户端也会发送临时公钥参数
-
密钥生成
- 双方根据以下要素生成对称会话密钥:
- 客户端随机数
- 服务器随机数
- 预主密钥
- 通过PRF(伪随机函数)生成:
- 加密密钥(用于数据加密)
- MAC密钥(用于完整性校验)
- 初始化向量(IV,用于分组加密模式)
- 双方根据以下要素生成对称会话密钥:
-
切换加密通信
- 双方发送ChangeCipherSpec报文,确认后续通信使用协商的密钥
- 交换Finished报文(加密的握手摘要),验证握手过程是否被篡改
三、简化握手(会话恢复)
当客户端存有会话ID或会话凭证时:
- 客户端在ClientHello中携带会话ID
- 服务器确认会话有效后直接跳过证书验证和密钥交换
- 使用之前协商的会话密钥快速恢复通信
四、防御相关攻击
- 降级攻击:通过TLS扩展功能防止协商到弱加密算法
- 重放攻击:使用随机数和时间戳确保消息新鲜性
- 中间人攻击:证书体系保证服务器公钥真实性
核心要点总结
HTTPS通过"非对称加密协商密钥+对称加密传输数据"的混合机制,在安全性和性能间取得平衡。握手过程的核心目标是安全地协商出只有通信双方知道的会话密钥,并通过数字证书实现身份认证。