HTTPS
HTTPS = HTTP + TLS,TLS 负责三件事:加密传输、身份验证、防篡改。
TLS 1.2 vs TLS 1.3
TLS 1.2 TLS 1.3 握手轮次 2-RTT 1-RTT 连接恢复 需重新握手 0-RTT(凭会话票据直接带数据) 密钥交换 RSA:客户端加密随机 Key 发给服务端 ECDHE:双方各自推导,密钥不传输 前向保密 ❌ 私钥泄露 → 历史流量全暴露 ✅ 临时密钥用完即丢,历史流量无法解密 工作流程
TLS 1.2(RSA,2-RTT)
客户端 服务端 │ │ │── ① ClientHello ────────────────────────────→│ │ 支持的加密算法列表、随机数 C │ │ │ │←─ ② ServerHello + 证书(含公钥)─────────────│ │ 确认使用的算法、随机数 S │ │ ← 第 1 个 RTT 结束 │ │ │ │ 验证证书合法性 │ │ · 有效期 / 域名匹配 / 证书链 / 数字签名 │ │ │ │── ③ 生成随机 Key,用服务端公钥加密后发送 ──────→│ │ 服务端用私钥解出 Key │ ← 第 2 个 RTT 结束 │ │ │ │ 双方用 随机数C + 随机数S + Key 推导出会话密钥 │ │ │ │══════════════ 对称加密通信 ══════════════════│
TLS 1.3(ECDHE,1-RTT)
客户端 服务端 │ │ │── ① ClientHello ────────────────────────────→│ │ 支持的算法、随机数 C │ │ + ECDHE 临时公钥(直接带上,不等服务端选) │ │ │ │←─ ② ServerHello + 证书 + Finished ───────────│ │ 随机数 S + 服务端 ECDHE 临时公钥 │ │ 服务端已推导出会话密钥,直接发 Finished │ │ ← 第 1 个 RTT 结束 │ │ │ │ 验证证书 + 双方各自通过 ECDHE 推导出相同会话密钥│ │ (密钥本身从未在网络上传输) │ │ │ │── ③ Finished ───────────────────────────────→│ │ │ │══════════════ 对称加密通信 ══════════════════│为什么混合加密? 握手阶段用非对称加密安全协商密钥;后续用对称加密(AES)高效传数据。两者结合取长补短。
CA颁发机构
考虑中间人攻击的情况,非对称加密的算法都是公开的,所有人都可以自己生成一对公钥私钥。
当服务端向客户端返回公钥A1的时候,中间人将其替换成自己的公钥B1传送给浏览器。
而浏览器此时一无所知,傻乎乎地使用公钥B1加密了密钥K发送出去,又被中间人截获,中间人利用自己的私钥B2解密,得到密钥K,再使用服务端的公钥A1加密传送给服务端,完成了通信链路,而服务端和客户端毫无感知。

解决方案:引入权威第三方 CA 机构,用数字签名证明公钥的真实性。
【CA 签发证书时】 证书明文内容 → 摘要算法(SHA-256 等)→ 哈希值 → 用 CA 私钥加密哈希值 → 数字签名 最终证书 = 明文内容 + 数字签名 【客户端验证时】 收到证书 ├── 提取明文内容 → 用相同摘要算法 → 自己算出哈希值 H1 └── 提取数字签名 → 用 CA 公钥解密 → 得到哈希值 H2 (CA 公钥内置在系统/浏览器中) 若 H1 == H2 → 证书未被篡改,可信 ✅ 若 H1 ≠ H2 → 证书已被篡改,告警 ❌与 HTTP 的区别
HTTP HTTPS 传输安全 明文,可被窃听篡改 TLS 加密 端口 80 443 证书 不需要 需要(Let's Encrypt 可免费申请) 握手开销 无 TLS 1.2 = 2-RTT;TLS 1.3 = 1-RTT SSL 是 TLS 的前身,已废弃。"SSL 证书"实际上是 TLS 证书,叫法沿用至今。