HTTPS加密的详细过程
HTTPS 原理
HTTPS(HyperText Transfer Protocol Secure)是基于 HTTP 的安全协议,通过集成 SSL/TLS(Secure Sockets Layer / Transport Layer Security)实现数据的加密传输、身份验证和完整性保护。它在客户端(如浏览器)和服务器之间建立安全通道,防止窃听、篡改和伪造。
加密过程
HTTPS 采用混合加密机制: - 握手阶段:用非对称加密协商共享密钥。 - 传输阶段:用对称加密保护数据。 整个过程通过 TLS 握手完成密钥交换和认证。
1. HTTPS 加密原理
核心组件
- SSL/TLS:提供加密和认证功能。
- 证书:由 CA(证书颁发机构)签发,含服务器公钥。
- 加密算法:
- 对称:AES(高效)。
- 非对称:RSA、DH(安全)。
目标
- 机密性:数据加密,防窃听。
- 完整性:校验数据未改(如 HMAC)。
- 认证:验证服务器身份,防伪造。
混合加密
- 非对称加密:握手交换密钥,公钥加密、私钥解密。
- 对称加密:数据传输,双方用同一密钥。
2. 加密详细过程(TLS 握手)
以 TLS 1.2 为例(TLS 1.3 稍有优化):
(1) Client Hello
- 客户端发送:
- TLS 版本(如 1.2)。
- 支持的加密套件(如
TLS_RSA_WITH_AES_256_GCM_SHA384
)。 - 随机数(Client Random,用于密钥生成)。
- 目的:发起协商,告知能力。
(2) Server Hello
- 服务器响应:
- 选定 TLS 版本和加密套件。
- 随机数(Server Random)。
- 数字证书(含公钥和 CA 签名)。
- 目的:确定参数,提供身份证明。
(3) 证书验证
- 客户端检查:
- 证书是否由受信 CA 签发(信任链)。
- 域名匹配、未过期。
- 结果:确认服务器可信。
(4) 密钥协商
- Pre-Master Secret:
- 客户端生成 Pre-Master Secret,用服务器公钥加密后发送。
- 会话密钥生成:
- 双方用 Client Random、Server Random 和 Pre-Master Secret,通过伪随机函数(PRF)计算对称会话密钥。
- 算法:
- RSA:客户端加密 Pre-Master Secret。
- ECDHE(推荐):Diffie-Hellman 交换,提供前向安全性。
(5) 握手验证
- 客户端发送 Finished:
- 用会话密钥加密握手消息校验码。
- 服务器发送 Finished:
- 验证一致性。
- 结果:握手完成,密钥协商成功。
(6) 数据传输
- 对称加密:
- 用会话密钥(如 AES-256-GCM)加密 HTTP 数据。
- 添加 HMAC 校验完整性。
- 通信:双方加密传输。
流程图
客户端 服务器
| Client Hello |
|---------------->|
| Server Hello |
| Certificate |
|<----------------|
| 验证证书 |
| Key Exchange |
|---------------->|
| Finished |
|---------------->|
| Finished |
|<----------------|
| 加密数据传输 |
|<--------------->|
3. 加密细节
非对称加密
- 作用:安全交换 Pre-Master Secret。
- 算法:
- RSA:公钥加密,私钥解密。
- ECDHE:双方生成临时密钥对,计算共享密钥。
- 特点:慢,仅用于握手。
对称加密
- 作用:高效加密数据。
- 算法:AES(CBC 或 GCM 模式)。
- 密钥:握手生成,双方共享。
- 特点:快,适合大流量。
完整性
- HMAC:用 SHA256 等生成校验码,确保未篡改。
TLS 1.3 改进
- 简化握手:1-RTT(一次往返)。
- 强制前向安全:禁用 RSA 密钥交换,仅用 ECDHE。
- 加密更快:握手消息部分加密。
4. 示例(Java)
// 客户端 HTTPS 请求
URL url = new URL("https://example.com");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.connect(); // 触发 TLS 握手
延伸与面试角度
- 前向安全性:
- ECDHE 确保密钥泄露不影响历史数据。
- 安全威胁:
- 中间人攻击:无证书验证可伪造。
- 解决:CA 签名 + 证书吊销列表(CRL)。
- 性能优化:
- 会话复用:Session Ticket 跳过握手。
- HSTS:强制 HTTPS。
- 面试点:
- 问“原理”时,提混合加密。
- 问“过程”时,提 6 步握手。
总结
HTTPS 通过 TLS 实现安全通信,握手用非对称加密协商密钥,传输用对称加密保护数据。TLS 1.2 有 6 步流程,1.3 更高效。面试时,可画握手图或提 ECDHE,展示理解深度。