Skip to content

模块导航: 总入口 · 总纲与方法 · 后端场景 · AI与算法工程 · 国企与金融 · 网络问答


11. HTTPS 握手与混合加密(热度 451 / 336 · 高频选考) ​

Q: HTTPS 的握手过程?为什么用混合加密?

A:

握手过程(以 TLS 1.2 为主,能提 1.3 更好) ​

diagram
Client                                Server
  |--- ClientHello ------------------>|  版本、密码套件、客户端随机数、SNI
  |                                   |  扩展(ALPN、supported_versions…)
  |<-- ServerHello + Certificate -----|  选定套件、服务器随机数、证书(含公钥)
  |<-- ServerKeyExchange (ECDHE) -----|
  |<-- ServerHelloDone ----------------|
  |  [客户端校验证书链]                 |
  |--- ClientKeyExchange ------------>|  RSA:用服务器公钥加密 pre-master
  |                                   |  ECDHE:双方各自算出共享密钥
  |--- ChangeCipherSpec + Finished -->|
  |<-- ChangeCipherSpec + Finished ---|
  |  此后应用数据走对称加密(AES-GCM等)|
  1. Client Hello: TLS 版本、加密套件列表、客户端随机数、扩展(SNI、ALPN:TCP 上的 TLS 只会是 h2/http/1.1,h3 出现在 QUIC 自带的 TLS 握手里)。
  2. Server Hello + 证书: 选定套件,返回服务器随机数与数字证书(含公钥,可能附中间证书)。
  3. 证书校验: 客户端验证证书链、有效期、域名(CN/SAN)、吊销状态(见第 12 题)。
  4. 密钥交换: RSA 套件——客户端生成 pre-master secret,用服务器公钥加密发送;ECDHE——双方交换 DH/ECC 参数各自算出共享密钥(前向安全)。
  5. 生成会话密钥: 用「客户端随机数 + 服务器随机数 + pre-master」经 PRF 推导对称密钥。随机数用于防重放并保证会话密钥唯一。
  6. Finished: 双方用会话密钥加密握手摘要校验;此后应用数据走对称加密(如 AES-GCM)。

TLS 1.3 要点(加分) ​

  • 握手压缩到 1-RTT(会话恢复可 0-RTT,但 0-RTT 有重放风险,仅幂等请求适用)。
  • 废弃 RSA 密钥交换,强制前向安全(ECDHE)。
  • 加密握手后半段:证书等也加密,减少明文元数据暴露。
  • 套件大幅精简(AEAD only:AES-GCM、ChaCha20-Poly1305 等)。

为什么混合加密? ​

机制作用原因
非对称加密 / 密钥协商(RSA 加密 pre-master;ECDHE 做 DH 协商)安全交换密钥、身份认证安全但性能差(慢几个数量级),不适合加密整段流量。注意 ECDHE 本身不加密业务数据,它是密钥协商算法(DH 的椭圆曲线 ephemeral 变体),只提供前向安全;能"加密"的非对称算法是 RSA
对称加密(AES-GCM 等)加密应用数据性能好,可硬件加速(AES-NI)
哈希/签名(SHA-256 等)完整性、证书签名防篡改、防冒充

设计动机:让昂贵的非对称只做「一次性的密钥协商与认证」,让便宜的对称扛「持续的数据传输」——兼顾安全与性能。

常见追问 ​

追问 1:HTTPS 为什么中间还要随机数?只靠证书公钥不行吗?

  • 答题要点: 若只用固定公钥加密,相同明文可能得到相同密文,且易被重放。引入客户端/服务器随机数使每次会话密钥不同;再配合 Finished 校验,双方确认握手未被篡改。

追问 2:TLS 1.3 相比 1.2 快在哪里?安全增强是什么?

  • 答题要点: 1-RTT/0-RTT 减少往返;握手消息加密;去掉 RSA 密钥交换等不安全选项,强制 PFS。注意 0-RTT 数据可被重放,只应用于安全的幂等请求。

追问 3:证书校验通过了,还会不会被中间人?

  • 答题要点: 可能。前提是用户信任了恶意根证书(企业中间人代理、恶意 CA、被入侵的信任库),或客户端未真正校验证书(verify=False)。防御:严格校验链、HSTS、证书透明(CT)、可选 Certificate Pinning。

易错点 ​

易错说法纠正
「HTTPS 全程非对称加密」只有握手/密钥协商用非对称;数据用对称
「TLS 在 DNS 之前」先 DNS → TCP → TLS
「证书里有服务器私钥」证书含公钥;私钥仅服务器持有
「会话密钥用服务器公钥加密传输=唯一方式」RSA 套件是这样;ECDHE 是双方各算共享密钥
「TLS 1.3 仍 2-RTT」默认 1-RTT,恢复可 0-RTT

与选择题对照 ​

  • 主库 150: 第 90 题(https 访问流程)、第 91 题(HTTPS 端口与组成)、第 99 题(对称/非对称)、第 100 题(非对称算法)、第 113 题(对称 vs 非对称性能)、第 114 题(SSL/TLS 工作层)、第 115 题(TLS 握手目的)、第 124 题(协议顺序)。
  • 补题 16: 无直接 TLS 选择题;应用层对照见补-14(邮件协议常用 TLS 加密端口)。
  • 口述联动: 选择题考「混合加密原因/工作层」;面试要完整报文级时序 + 1.3 差异 + 前向安全。

工程 / 抓包背景 ​

  • openssl:
    bash
    openssl s_client -connect example.com:443 -servername example.com -tls1_2
    openssl s_client -connect example.com:443 -servername example.com -tls1_3
    openssl x509 -in cert.pem -noout -text
  • Wireshark: ClientHello/ServerHello;tls.handshake.extensions_alpn_str == "h2";SSLKEYLOGFILE 可解密应用数据。
  • curl: curl -v https://example.com 看 TLS 版本、证书主体、ALPN。
  • Nginx: ssl_protocols TLSv1.2 TLSv1.3;、ssl_certificate / ssl_certificate_key、ssl_session_cache。
  • 浏览器: 安全标识、证书链、Connection 是否 h2/http/1.1。

持续学习,持续积累。