HTTPS 原理¶
一、为什么需要 HTTPS¶
HTTP 明文传输,有三个问题:
- 窃听:中间人能看到内容。
- 篡改:中间人能改内容。
- 冒充:中间人能冒充服务器。
HTTPS = HTTP + TLS/SSL,解决这三个问题。
二、加密算法¶
1. 对称加密¶
加密解密用同一把密钥(如 AES)。
- 优点:快。
- 缺点:密钥怎么安全传给对方?
2. 非对称加密¶
公钥加密、私钥解密;私钥签名、公钥验签(如 RSA)。
- 优点:不需要传密钥。
- 缺点:慢。
3. 混合加密¶
HTTPS 实际用:非对称加密协商出一个对称密钥,之后用对称加密传数据。
三、TLS 握手过程¶
简化版:
- Client Hello:客户端发支持的 TLS 版本、加密套件、随机数 A。
- Server Hello:服务端选加密套件,发随机数 B、证书(含公钥)。
- 证书验证:客户端验证证书是否可信(CA 链)。
- 生成会话密钥:
- 客户端用公钥加密一个预主密钥(PreMaster Secret)发给服务端。
- 服务端用私钥解密。
- 双方用随机数 A、B、PreMaster 算出会话密钥。
- Finished:双方用会话密钥加密通信。
四、数字证书¶
证书解决"公钥属于谁"的问题:
- CA(证书颁发机构)用自己的私钥给网站公钥签名。
- 浏览器内置 CA 公钥,能验证签名。
- 如果证书不是可信 CA 签的,浏览器报红警告。
五、HTTPS 解决了什么¶
| 问题 | 解决 |
|---|---|
| 窃听 | 对称加密 |
| 篡改 | MAC / 摘要 |
| 冒充 | 证书 + CA |
六、HTTPS 一定安全吗¶
- 证书被劫持(如内网抓包装根证书)。
- 弱加密套件。
- 证书过期 / 自签名。
高频追问
- 为什么不用纯非对称加密?太慢。
- 为什么要两个随机数?防止重放攻击。
- TLS 1.3 简化了握手,1-RTT 甚至 0-RTT。