HTTPS加密通信原理
核心:HTTPS = HTTP + TLS/SSL,通过加密、身份验证、数据完整性保护,确保网络通信安全。
一、什么是 HTTPS?
HTTPS(HyperText Transfer Protocol Secure)是在 HTTP 基础上加入 TLS/SSL 加密层的安全协议。它解决了三个核心问题:
- 加密性:传输数据被加密,中间人无法窃听
- 身份验证:通过数字证书确认服务器身份
- 完整性:数据传输过程中无法被篡改
二、TLS 握手过程
HTTPS 连接建立的第一步是 TLS 握手,这个过程用于协商加密算法、交换密钥、验证身份。
TLS 握手时序图
sequenceDiagram
participant C as 客户端浏览器
participant S as HTTPS服务器
Note over C,S: 第一阶段:协商加密算法
C->>S: ① Client Hello
Note right of C: 支持的TLS版本
加密算法列表
随机数A S->>C: ② Server Hello + 证书 Note left of S: 选定的加密算法
数字证书
服务器公钥
随机数B Note over C,S: 第二阶段:密钥交换 Note over C: ③ 验证证书有效性 Note over C: 生成预主密钥 C->>S: ④ 加密的预主密钥 Note right of C: 用服务器公钥加密 Note over S: ⑤ 用私钥解密 Note over C,S: 双方计算会话密钥
=f(随机数A, 随机数B, 预主密钥) Note over C,S: 第三阶段:开始加密通信 C->>S: ⑥ 切换加密通知 S->>C: ⑦ 握手完成 Note over C,S: 后续通信全部加密 C->>S: 加密的HTTP请求 S->>C: 加密的HTTP响应
加密算法列表
随机数A S->>C: ② Server Hello + 证书 Note left of S: 选定的加密算法
数字证书
服务器公钥
随机数B Note over C,S: 第二阶段:密钥交换 Note over C: ③ 验证证书有效性 Note over C: 生成预主密钥 C->>S: ④ 加密的预主密钥 Note right of C: 用服务器公钥加密 Note over S: ⑤ 用私钥解密 Note over C,S: 双方计算会话密钥
=f(随机数A, 随机数B, 预主密钥) Note over C,S: 第三阶段:开始加密通信 C->>S: ⑥ 切换加密通知 S->>C: ⑦ 握手完成 Note over C,S: 后续通信全部加密 C->>S: 加密的HTTP请求 S->>C: 加密的HTTP响应
注意:握手阶段的前两步(Client Hello、Server Hello)是明文传输的,但这不影响安全性,因为真正的密钥在后续步骤中通过非对称加密传输。
三、加密方式详解
3.1 非对称加密(握手阶段)
非对称加密使用一对密钥:公钥用于加密,私钥用于解密。
1
服务器生成密钥对
RSA 2048位
服务器生成一对密钥:公钥公开(在证书中),私钥保密(仅服务器持有)
2
客户端用公钥加密
公钥加密
客户端生成随机的预主密钥,用服务器公钥加密后发送
3
服务器用私钥解密
私钥解密
服务器用私钥解密,获得预主密钥。中间人即使截获也无法解密
3.2 对称加密(通信阶段)
对称加密使用同一个密钥进行加密和解密,速度快,适合大量数据传输。
| 算法 | 密钥长度 | 特点 | 应用场景 |
|---|---|---|---|
| AES-128 | 128位 | 速度快,安全性高 | 一般网站 |
| AES-256 | 256位 | 最高安全级别 | 银行、政府 |
| ChaCha20 | 256位 | 移动端优化 | 移动应用 |
四、数字证书与信任链
证书信任链结构
graph TD
A[根证书 Root CA]
B[中间证书 Intermediate CA]
C[网站证书 End-entity Certificate]
A -->|签发| B
B -->|签发| C
A1[预装在操作系统/浏览器中
绝对可信] B1[隔离保护根证书
DigiCert SHA2] C1[绑定域名
www.example.com] A -.-> A1 B -.-> B1 C -.-> C1 style A fill:#409EFF,stroke:#409EFF,color:#FFFFFF style B fill:#67C23A,stroke:#67C23A,color:#FFFFFF style C fill:#E6A23C,stroke:#E6A23C,color:#FFFFFF style A1 fill:#ECF5FF,stroke:#409EFF,color:#409EFF style B1 fill:#F0F9FF,stroke:#67C23A,color:#67C23A style C1 fill:#FDF6EC,stroke:#E6A23C,color:#E6A23C
绝对可信] B1[隔离保护根证书
DigiCert SHA2] C1[绑定域名
www.example.com] A -.-> A1 B -.-> B1 C -.-> C1 style A fill:#409EFF,stroke:#409EFF,color:#FFFFFF style B fill:#67C23A,stroke:#67C23A,color:#FFFFFF style C fill:#E6A23C,stroke:#E6A23C,color:#FFFFFF style A1 fill:#ECF5FF,stroke:#409EFF,color:#409EFF style B1 fill:#F0F9FF,stroke:#67C23A,color:#67C23A style C1 fill:#FDF6EC,stroke:#E6A23C,color:#E6A23C
证书验证流程
- 浏览器收到网站证书(末端证书)
- 检查证书是否过期、域名是否匹配
- 向上查找中间证书,验证数字签名
- 继续向上直到找到根证书
- 验证根证书是否在系统预装列表中
- 整条链路可信 → 显示绿色锁图标
五、实战案例:登录加密过程
用户登录数据加密流程
graph LR
A[用户输入密码] --> B[组装JSON]
B --> C{TLS握手完成?}
C -->|是| D[AES-256加密]
C -->|否| E[等待握手]
E --> D
D --> F[HTTPS传输]
F --> G[服务器解密]
G --> H[验证登录]
style A fill:#F2F6FC,stroke:#DCDFE6
style D fill:#F0F9FF,stroke:#67C23A,color:#67C23A
style F fill:#ECF5FF,stroke:#409EFF,color:#409EFF
style H fill:#F0F9FF,stroke:#67C23A,color:#67C23A
安全保障:即使黑客截获传输数据,看到的也只是加密后的乱码。没有会话密钥,无法解密获取原始密码。
六、总结
| 阶段 | 加密方式 | 目的 | 速度 |
|---|---|---|---|
| 握手阶段 | 非对称加密(RSA/ECDHE) | 安全交换密钥 | 慢 |
| 通信阶段 | 对称加密(AES/ChaCha20) | 高效加密数据 | 快 |
| 身份验证 | 数字证书 + 证书链 | 确认服务器身份 | - |
核心设计思想:用非对称加密的安全性解决密钥交换问题,用对称加密的高效性解决数据传输问题,用证书链解决身份信任问题。三者结合,构成了现代互联网安全的基石。