Skip to content

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,展示理解深度。