HTTPS 与 TLS
hard计算机网络HTTPSTLSSSL加密证书
HTTPS = HTTP + TLS
HTTPS 在 HTTP 和 TCP 之间增加了 TLS(Transport Layer Security) 层,提供三大安全保障:
| 安全性 | 威胁 | TLS 解决方案 |
|---|---|---|
| 机密性 | 窃听 | 对称加密(AES) |
| 完整性 | 篡改 | 消息认证码(HMAC) |
| 身份认证 | 冒充 | 数字证书 + 非对称加密 |
对称加密 vs 非对称加密
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥 | 加密解密用同一把密钥 | 公钥加密,私钥解密 |
| 速度 | 快(AES ~1GB/s) | 慢(RSA ~100KB/s) |
| 密钥分发 | 困难(如何安全传递密钥?) | 公钥可公开传播 |
| 代表算法 | AES, ChaCha20 | RSA, ECDHE |
TLS 的精妙之处:用非对称加密交换密钥,然后用对称加密传输数据——兼顾安全性和性能。
TLS 握手过程(以 TLS 1.2 为例)
客户端 服务端
│ │
│ ① Client Hello │
│ (支持的 TLS 版本、加密套件列表、随机数 A) │
│ ────────────────────────────────────────────▶ │
│ │
│ ② Server Hello │
│ (选定的加密套件、随机数 B) │
│ ③ Certificate (服务端证书) │
│ ④ Server Key Exchange (DH 参数) │
│ ⑤ Server Hello Done │
│ ◀──────────────────────────────────────────── │
│ │
│ 验证证书(CA 签名链) │
│ ⑥ Client Key Exchange (DH 参数) │
│ ⑦ Change Cipher Spec (切换到加密通信) │
│ ⑧ Finished (加密验证) │
│ ────────────────────────────────────────────▶ │
│ │
│ ⑨ Change Cipher Spec │
│ ⑩ Finished │
│ ◀──────────────────────────────────────────── │
│ │
│ ── 对称加密通信开始 ── │
握手完成后,双方使用协商的对称密钥(由随机数 A + B + 预主密钥共同生成)加密后续所有通信。
数字证书与 CA
数字证书用于证明"这个公钥确实属于这个域名"。
证书包含:
┌───────────────────────────┐
│ 域名: www.example.com │
│ 公钥: [服务端公钥] │
│ 有效期: 2024-01 ~ 2025-01 │
│ 签发者: Let's Encrypt CA │
│ │
│ CA 的数字签名: │
│ sign(hash(以上内容), CA私钥)│
└───────────────────────────┘
验证过程:
1. 用 CA 的公钥解密签名 → 得到哈希值 H1
2. 对证书内容重新计算哈希 → 得到 H2
3. H1 == H2 → 证书未被篡改 ✅
4. 检查证书链:该 CA 是否被根 CA 信任
证书链:服务端证书 → 中间 CA 证书 → 根 CA 证书(预装在浏览器/操作系统中)。
TLS 1.3 的改进
| 改进 | TLS 1.2 | TLS 1.3 |
|---|---|---|
| 握手延迟 | 2-RTT | 1-RTT(首次),0-RTT(恢复) |
| 连接恢复 | Session Ticket | PSK(预共享密钥) |
| 不安全算法 | 仍支持 RSA 密钥交换 | 移除(只支持前向安全的 ECDHE) |
生产高频题
HTTP 和 HTTPS 的区别?
HTTPS = HTTP + TLS 加密。HTTP 明文传输,HTTPS 加密传输。HTTPS 需要 CA 证书,默认端口 443(HTTP 是 80)。HTTPS 握手阶段有额外开销(TLS 握手),但连接建立后对称加密的性能开销很小。
HTTPS 是如何保证安全的?
通过 TLS 握手协商对称密钥(ECDHE 密钥交换),用数字证书验证服务端身份(CA 信任链),用对称加密(AES)保证数据机密性,用 HMAC 保证数据完整性。