Skip to content

什么是 HTTPS

HTTPS(HyperText Transfer Protocol Secure)是 HTTP 的安全版本,通过在 HTTP 和 TCP 之间集成 SSL/TLS 协议(Secure Sockets Layer / Transport Layer Security),实现数据的加密传输身份验证完整性保护。它确保客户端(如浏览器)与服务器之间的通信安全,防止窃听、篡改和伪造。

核心原理

HTTPS 使用混合加密机制: - 握手阶段:通过非对称加密协商会话密钥。 - 传输阶段:用对称加密保护数据。


1. HTTPS 详解

作用

  • 机密性:数据加密,防止窃听。
  • 完整性:校验数据未被篡改(如 HMAC)。
  • 认证:验证服务器身份,防止中间人攻击。

与 HTTP 对比

  • HTTP:明文传输,无安全保障。
  • HTTPS:加密传输,带身份验证。

核心组件

  • SSL/TLS:加密协议,提供安全通道。
  • 证书:由 CA(证书颁发机构)签发,含服务器公钥。
  • 加密算法
  • 对称:AES(如 AES-256-GCM)。
  • 非对称:RSA、ECDHE(椭圆曲线 Diffie-Hellman)。

2. HTTPS 工作流程(TLS 握手)

以 TLS 1.2 为例(TLS 1.3 稍有优化):

(1) Client Hello

  • 客户端发送
  • TLS 版本(如 1.2 或 1.3)。
  • 支持的加密套件(如 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)。
  • 随机数(Client Random,用于密钥生成)。
  • 目的:发起协商,告知能力。

(2) Server Hello

  • 服务器回复
  • 选定 TLS 版本和加密套件。
  • 随机数(Server Random)。
  • 数字证书(含公钥和 CA 签名)。
  • 目的:确定参数,提供身份证明。

(3) 证书验证

  • 客户端操作
  • 检查证书是否由受信任 CA 签发。
  • 验证域名匹配、证书未过期。
  • 结果:确认服务器可信。

(4) 密钥协商

  • 客户端
  • 生成 Pre-Master Secret,用服务器公钥加密发送(RSA)。
  • 或用 ECDHE 交换临时密钥。
  • 双方
  • 用 Client Random、Server Random、Pre-Master Secret 通过伪随机函数(PRF)生成对称会话密钥。
  • 特点
  • ECDHE 提供前向安全性(密钥泄露不影响历史数据)。

(5) 握手完成

  • 双方发送 Finished
  • 用会话密钥加密握手消息校验码,互相验证。
  • 结果:安全连接建立。

(6) 数据传输

  • 对称加密
  • 用会话密钥(如 AES)加密 HTTP 数据。
  • 添加 HMAC(基于 SHA256)校验完整性。

图示

客户端            服务器
  | Client Hello   |
  |--------------->|
  | Server Hello   |
  | Certificate    |
  |<---------------|
  | 验证证书       |
  | Key Exchange   |
  |--------------->|
  | Finished       |
  |<-------------->|
  | 加密传输       |
  |<-------------->|

3. 加密原理

混合加密

  • 非对称加密
  • 作用:握手交换密钥。
  • 算法
    • RSA:公钥加密 Pre-Master Secret。
    • ECDHE:双方生成临时密钥对,计算共享密钥。
  • 特点:慢,适合小数据。
  • 对称加密
  • 作用:传输数据。
  • 算法:AES(CBC 或 GCM 模式)。
  • 特点:快,适合大流量。

完整性

  • HMAC:用哈希算法(如 SHA256)生成校验码,确保数据未改。

TLS 1.3 改进

  • 简化握手:1-RTT(一次往返),更快。
  • 强制前向安全:禁用 RSA 密钥交换,仅用 ECDHE。
  • 加密更强:握手消息部分加密。

4. HTTPS 的优点与缺点

优点

  • 安全性高,防窃听、伪造。
  • 用户信任(浏览器显示锁图标)。
  • SEO 提升(Google 偏好 HTTPS)。

缺点

  • 握手延迟(TLS 开销)。
  • 证书管理复杂(需申请、续期)。

5. 延伸与面试角度

  • 安全威胁
  • 中间人攻击:无证书验证可伪造。
  • 解决:CA 签名、HSTS(强制 HTTPS)。
  • 性能优化
  • 会话复用:Session ID 或 Ticket 减少握手。
  • OCSP Stapling:加速证书状态检查。
  • 实际应用
  • 网站:如 https://www.google.com
  • API:如支付接口。
  • 面试点
  • 问“流程”时,提 6 步握手。
  • 问“加密”时,提混合加密和 ECDHE。

示例(Java 调用 HTTPS)

URL url = new URL("https://api.example.com");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.connect(); // 触发 TLS 握手
InputStream in = conn.getInputStream();

总结

HTTPS 通过 SSL/TLS 提供安全通信,握手用非对称加密协商密钥,传输用对称加密保护数据。TLS 1.2 有完整流程,1.3 更高效。面试时,可画握手图或提前向安全,展示理解深度。