跳转到内容

TLS 与 HTTPS

TLS 在不可信的网络上建立三个承诺:机密性(窃听者看不懂)、完整性(篡改可发现)、认证(对方是真的)。本章讲 TLS 握手、证书链与 CA 体系、TLS 1.3 的简化与前向保密,以及 HTTPS 保护什么、不保护什么(→ 公钥密码与密钥交换)。

TLS 握手做两件事:认证对方(证书验证)+ 协商会话密钥(密钥交换):

  1. 客户端发随机数与支持的套件;
  2. 服务器回证书(含公钥)+ 随机数;
  3. 客户端验证证书,交换密钥材料(ECDHE:椭圆曲线 Diffie–Hellman);
  4. 双方推导会话密钥,之后全部对称加密(AES-GCM 等,→ 对称密码)。

公钥密码只用来交换对称密钥——非对称太慢,会话数据全部走对称(→ 公钥密码与密钥交换)。

前向保密(forward secrecy):会话密钥由临时的 ECDHE 参数推导,不用服务器的长期私钥——长期密钥泄露不影响历史会话(历史会话的密钥早已销毁,攻击者录下的流量也无法解密)。TLS 1.2 的 RSA 密钥交换(无私钥则解密全部历史)因此被淘汰。

证书 = 公钥 + 身份(域名)+ CA 的签名。验证是链式的:站点证书 ← 中间 CA ← 根 CA(根内置于操作系统/浏览器)。CA 是信任的单点:任何根 CA 签发的证书(包括给你域名的假证书)都会被客户端接受——CA 被入侵或作恶时,全网信任崩塌。

两个补丁:

  • 证书透明度(CT):所有签发的证书必须进入公开可审计的日志——域名持有者能发现"别人给我的域名签了假证书";证书透明度如何约束 CA:日志公开 + 监控让 CA 作恶可被发现;
  • HSTS:强制 HTTPS,防降级攻击。

TLS 1.2 的握手要 2-RTT;TLS 1.3 把握手压到 1-RTT:客户端在第一个消息里就发密钥共享,服务器一回合回应。0-RTT 恢复(重连的客户端首个消息就带数据)更快,但有重放风险(防重放语义由应用保证)——只用于幂等请求。

TLS 1.3 同时删掉了一堆不安全的遗产(RSA 静态交换、CBC 模式、压缩)——协议简化的安全回报。

保护不保护
内容机密性与完整性元数据:对方 IP、SNI(域名)、流量大小与时序
服务器身份(证书)客户端设备的安全
中间人篡改服务器自己(日志、备份)

HTTPS 不保护元数据:SNI 在握手明文里(ECH 正在补),IP 与流量模式可见——流量分析(大小与时序)能推断内容,是另一类攻击面。

  • 握手 = 认证(证书)+ 密钥交换(ECDHE)+ 对称会话;公钥只交换对称密钥
  • 前向保密:临时 ECDHE 让长期私钥泄露不影响历史会话
  • CA 是信任的单点;证书透明度(公开日志)让 CA 作恶可被发现
  • TLS 1.3 把握手压到 1-RTT,删掉不安全遗产;0-RTT 有重放风险
  • HTTPS 保护内容不保护元数据:SNI、IP、流量模式仍然可见