Skip to content
极高进阶

一句话答案

HTTPS = HTTP + TLS 加密,握手:Client Hello→Server Hello+证书→密钥交换→对称加密通信。

核心要点

TLS 1.2 握手(4次往返,2-RTT):

客户端                                  服务端
   │── ClientHello ──────────────────→│
   │   (支持的TLS版本, 加密套件列表,    │
   │    客户端随机数 C_Random)          │
   │                                   │
   │← ServerHello ──────────────────── │
   │   (选定的TLS版本, 加密套件,        │
   │    服务端随机数 S_Random)          │
   │                                   │
   │← Certificate ──────────────────── │
   │   (服务端的数字证书,含公钥)        │
   │                                   │
   │← ServerHelloDone ──────────────── │
   │                                   │
   │── ClientKeyExchange ────────────→│
   │   (用服务端公钥加密的 pre-master   │
   │    secret,或 ECDHE 的客户端公钥) │
   │                                   │
   双方各自根据:C_Random + S_Random + pre-master secret
   生成相同的 Master Secret → 派生出对称加密密钥
   │                                   │
   │── ChangeCipherSpec ─────────────→│ 切换到加密模式
   │── Finished(加密)──────────────→│
   │← ChangeCipherSpec ─────────────── │
   │← Finished(加密)──────────────── │
   │                                   │
   ─────── 握手完成,开始加密通信 ──────

TLS 1.3 优化(1-RTT,甚至 0-RTT):

  • 精简了握手,去掉了 ServerHelloDone、ChangeCipherSpec 等消息
  • 只支持前向安全的密钥交换算法(ECDHE),不再支持 RSA 静态密钥交换
  • 0-RTT 恢复会话(Session Resumption)

客户端如何验证 CA 证书的有效性:

证书链验证:

服务端证书(由中间 CA 签名)
  → 中间 CA 证书(由根 CA 签名)
  → 根 CA 证书(由操作系统/浏览器内置信任)

验证流程:
  1. 用中间 CA 的公钥验证服务端证书的签名 → 合法(确认证书是中间 CA 颁发的)
  2. 用根 CA 的公钥验证中间 CA 证书的签名 → 合法
  3. 根 CA 证书在操作系统受信任根证书列表中 → 整个链可信

其他验证项:

  • 域名匹配:证书中的 CN(Common Name)或 SAN 是否与访问的域名一致
  • 有效期:证书是否在有效期内(notBefore ~ notAfter)
  • 吊销状态
    • CRL(Certificate Revocation List):下载吊销列表检查
    • OCSP(Online Certificate Status Protocol):在线实时查询证书状态
追问与易错

追问方向:

  • 对称加密和非对称加密各用在哪?(非对称交换密钥,对称加密传输数据)
  • 数字证书怎么验证真伪?(CA 签名 + 证书链验证)
  • HTTPS 比 HTTP 慢多少?怎么优化?(TLS 握手增加 1-2 RTT,Session 复用/TLS 1.3 优化)

易错点:

  • ❌ "HTTPS 全程非对称加密"——只有密钥交换用非对称,数据传输用对称(性能考虑)
  • ❌ "有了 HTTPS 就绝对安全"——中间人攻击仍可能(如客户端不验证证书)

💡 记忆锚点

TLS握手像当面交换密码本:先用非对称加密(公钥像公开的锁,只有私钥能打开)安全地把"密码本"(对称密钥)交给对方,之后所有通信都用这本密码本加解密(快)。证书像身份证,由CA(公安局)盖章担保身份。三个随机数(C_Random + S_Random + pre-master)合成最终密钥,防止单点泄露。