连载中 12/20

TLS 握手:HTTPS 到底慢在哪一步

2026-10-06 · 16 阅读 · 0 评论 · 0 赞

混合加密:各取所长的组合

HTTPS = HTTP 包在 TLS 里。TLS 用非对称加密(RSA/ECDHE)只干一件事:安全地协商出会话密钥;之后的数据传输全用对称加密(AES)。原因很直白:非对称算法慢三个数量级,但能解决“陌生双方怎么在窃听下约定密码”;对称算法快,但密码怎么送到对方手里是死结。先用慢算法安全地传快算法的钥匙,再用快算法干活——这个组合是整个 TLS 的骨架。

TLS 1.2 握手:两个 RTT

客户端                                 服务端
  │ ① ClientHello                       │   ← RTT 1
  │   (TLS版本、随机数、支持的密码套件)  │
  │ ←──────── ② ServerHello + 证书 ───── │
  │ ←──────── ③ ServerKeyExchange ────── │   (ECDHE 公钥参数)
  │ ④ ClientKeyExchange + ChangeCipherSpec
  │ ────────────────────────────→        │   ← RTT 2
  │ ←──────── ⑤ ChangeCipherSpec + Finished
  │ ⑥ Finished ────────────────→         │
  │ 此后才是第一个 HTTP 请求               │

// ECDHE:双方各出临时公钥参数,各自算出相同的会话密钥
// E = 椭圆曲线(快),DHE = 临时密钥(提供前向安全)

TCP 握手 1 RTT + TLS 2 RTT + 请求 1 RTT:首字节回来之前已经烧掉 4 个 RTT。RTT 50ms 的链路,连接建立白等 250ms——这就是 HTTPS 慢的真身:不是加密计算慢(微秒级),是来回趟数多。

TLS 1.3:剪掉一个 RTT

1.3 大胆改革:客户端不等服务端回应,第一包就把密钥交换材料猜着发出去(假设服务端支持 ECDHE,通常是),握手压到 1 RTT。密码套件也砍掉一票不安全的(RC4、CBC、静态 RSA 全出局)。更激进的是 0-RTT:复用过的会话,客户端在第一个飞行包里直接带上加密的 HTTP 请求——代价是 0-RTT 数据可能被重放攻击,只准用于幂等请求,服务端要专门防重放。

会话复用:跳过整套协商

第二次连接同一服务端,可以复用之前协商好的密钥材料:Session ID / Session Ticket——服务端发个票据,客户端存着,下次出示即可,密钥协商环节整个跳过,逼近 0-RTT。1.3 的 PSK 模式就是它的正统继承。对 Nginx 来说开 ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; 基本是白捡的性能。再叠加 HTTP/2 长连接复用,握手成本被摊到成百上千个请求上,HTTPS 才算真正跑顺。

实战:亲手看一次握手

$ openssl s_client -connect note.example.com:443 -tls1_3 < /dev/null
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384    ← 协议版本与套件
Server Temp Key: X25519, 253 bits                 ← ECDHE 参数
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384

# 再加 -reconnect -sess_out/-sess_in 可验证会话复用是否生效
# curl -w 的 time_appconnect 字段就是 TLS 握手耗时——线上测 HTTPS 慢,先看它

握手快不快,看三个数:time_appconnect 占比、协议版本(1.3 优先)、会话复用命中率。下一篇聊握手里的那张“身份证”:证书与信任链——浏览器凭什么信你的服务器。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#TLS握手#HTTPS#TLS1.3#会话复用#ECDHE

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10114 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9877 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9307 阅读 · 21 评论 · 287 赞