TLS 1.3 改了什么:一次「减法」与一次「加法」
TLS 1.3(RFC 8446,2018)对 TLS 1.2 的改造分两类:减法(砍掉的东西)与加法(新增的东西)。
砍掉的:过时的算法(RSA 密钥交换(不支持前向安全)、CBC 模式的密码套件(「CBC 的填充攻击」的历史漏洞(POODLE、Lucky13——RC4、MD5、SHA-1——「砍掉」的清单是一份「密码学的黑历史」——TLS 1.3 的密码套件只剩 5 个(全部 AEAD——AES-GCM、ChaCha20-Poly1305——「算法的极简化」:选择困难症的终结——「只有安全选项」的设计哲学(1.3 的思路:不给用户选错的机会——「安全的默认」优于「灵活的可选」。握手往返(2-RTT → 1-RTT(「往返的压缩」是性能的升级——「0-RTT」(恢复连接零往返——「0-RTT」是激进的性能赌注(有安全代价——后文详拆。
加上的:强制前向安全(Forward Secrecy)——「前向安全」的概念(今天的密钥泄露不能解密过去的流量——「前向安全的机制」(每次连接用临时的 ECDHE 密钥交换——私钥泄露也无法解密历史流量——「RSA 密钥交换」的反面(RSA 交换的流量被长期记录、私钥泄露后历史全部可解——「前向安全」是隐私的保险——TLS 1.3 强制 PFS(「PFS 的强制」是 1.3 最重要的安全升级。
TLS 1.3 的握手流程:1-RTT 与 0-RTT
1-RTT 握手:ClientHello(客户端发送支持的算法+密钥共享(「key_share」(ECDHE 的公钥直接放在 ClientHello 里——「预共享」减少往返——ServerHello(服务器选算法+自己的密钥共享——「双方的密钥共享交换完成」——「1-RTT 后即可发数据」——TLS 1.2 的握手需要 2-RTT(协商→确认——「1.3 的单往返」靠「预共享密钥」压缩——「握手与数据的重叠」(ClientHello 之后客户端就可以发数据(早期数据——**「握手的极致优化」。
0-RTT(Early Data)的深度拆解:「0-RTT 的原理」——会话恢复时(之前连接过——客户端用缓存的 PSK(pre-shared key)——第一个消息就带应用数据(「0-RTT」把恢复连接的延迟压到零——「0-RTT 的三个代价」:重放风险(早期数据可以被重放(攻击者截获 0-RTT 数据、重放给服务器——「重放的危害」(非幂等请求(转账、下单——重放=重复执行——「0-RTT 只保证前向安全,不保证防重放」——「重放的防御」(服务端只对幂等请求启用 0-RTT、服务端的 anti-replay 机制(「anti-replay」的实现(单机内存记录、集群的一致性——「anti-replay」的工程复杂度——「0-RTT 的启用决策」:性能收益 vs 重放风险——「GET 请求」的 0-RTT 安全(读操作——「POST」的谨慎(写操作——「应用的幂等性」决定 0-RTT 的启用范围;前向安全的例外(0-RTT 数据的 PSK 模式——「0-RTT 数据不是前向安全的」(PSK 泄露则 0-RTT 数据可解——「0-RTT 的安全降级」要知情;跨请求的状态(0-RTT 的数据在握手中到达(服务端状态未就绪——「0-RTT 数据的处理复杂度」。「0-RTT 的启用建议」:读多写少的静态内容场景启用、交易场景禁用——「0-RTT」是性能与安全的显式权衡**——不是默认开启的免费午餐。
「迁移到 TLS 1.3」的实践指南:「迁移的检查清单」:客户端与服务端的支持(「支持的普及度」(现代浏览器全支持、Java 11+/Go 默认支持——「老客户端」的兼容(TLS 1.2 的并存——「双版本并存期」(1.3+1.2 同时开启——逐步下线 1.2;密码套件的清理(「旧套件」的下线清单(RSA 交换、CBC、RC4 的禁用——「安全策略」的升级(扫描旧协议的暴露面——「禁用旧版本」的灰度(先禁 SSLv3/TLS1.0、再 1.1——「禁用的兼容性测试」(老客户端的崩坏检查。「TLS 1.3 的运维收益」:握手延迟的降低(移动端的首屏收益——「首屏延迟」的量化(1-RTT 节省一个 RTT——RTT 100ms 的移动网络节省 100ms——「每请求 100ms」的累积收益**。
TLS 高频问答
收尾前回答三个高频问题。「TLS 1.3 没了 RSA 密钥交换,证书还有用吗?」——有用但角色变了:「证书的角色变化」:证书用于身份认证(「签名」的作用(证书验证服务器身份——「密钥交换」用 ECDHE(证书不参与密钥交换——「RSA 证书」的兼容(TLS 1.3 支持 RSA 签名的证书——「RSA 签名证书」可用——「证书的类型」不影响前向安全——「签名算法」的选择(ECDSA 更优(「ECDSA vs RSA」的证书——「ECDSA」的性能与安全优势。「0-RTT 到底要不要开?」——按场景:「0-RTT 的启用决策」:收益(一个 RTT 的节省——「移动端的收益」(首屏延迟——风险(重放——「重放的防御成本」——「场景的分级」:静态内容(GET——可开、API 写操作——禁——「网关的配置」(按路由的 0-RTT——「CDN 的 0-RTT」的配置——「启用 0-RTT」的检查清单(幂等性确认、anti-replay 部署、监控重放。「内网服务也要 TLS 1.3 吗?」——按边界:「内网的 TLS」:边界防御(「零信任」的内网(内网也有 TLS——「内网的 mTLS」(服务间双向 TLS——「服务网格的 mTLS」(Istio 的自动 mTLS——「内网加密」的成本(性能开销——「内网 TLS」的渐进(先边界后内部——「零信任的落地」步骤。TLS 的问答收束:TLS 1.3 的三个心智模型——「握手是见面(一次握手就交换完信物)、前向安全是保险(丢钥匙不解旧信)、0-RTT 是插队(插队有风险需要管理)」——「TLS 的升级」是安全债务的偿还——「1.2 的 RSA 交换」是最大的债务——「前向安全」是偿还的核心——「升级的时机」是现在。
TLS 1.3 的进阶:mTLS 与「内网的加密体系」
TLS 1.3 的进阶:mTLS 的架构与内网加密体系的演进。「mTLS(双向 TLS)」的机制:「双向认证」:客户端证书(「客户端证书」的签发(内部 CA——「内部 CA」的建设(证书的签发、轮换、吊销——「证书的生命周期管理」(证书轮换的自动化——「证书轮换」的频率(短期证书——「短期证书」的趋势(「SPIFFE/SPIRE」(服务身份的框架——「SPIFFE」的 SVID(工作负载的身份标识——「SPIRE」的架构(「服务身份」的现代化——「零信任」的身份基础。「mTLS 的部署架构」:「服务网格的 mTLS」:Istio 的自动 mTLS(「sidecar 的 TLS」(Envoy sidecar 的自动加密——「应用无感」(应用层不需要改——「mTLS 的性能」(sidecar 的开销——「sidecar 的资源成本」——「istio 的 mTLS 策略」(PERMISSIVE 与 STRICT——「PERMISSIVE」的灰度(先双模式后强制——「STRICT」的迁移(「mTLS 的灰度迁移」。「mTLS 的问题与权衡」:证书管理的复杂度(「证书管理的复杂度」(大量服务的证书——「短期证书」的缓解——「性能的开销」(TLS 握手的开销——「连接复用」的缓解——「排障的复杂度」(加密后的流量不可见——「排障」的挑战(「加密流量的观测」(sidecar 的可观测性——「观测」在加密后的形态。「零信任内网」的整体演进:「零信任的内网实践」:从「内网可信」到「内网零信任」(「内网的零信任」(服务间的身份与授权——「授权」的细粒度(服务间的 RBAC——「服务间授权」的策略——「零信任的落地路径」(mTLS 先行、授权跟进、审计兜底——「零信任」的成熟度评估(「零信任成熟度」的模型。TLS 1.3 的进阶总结:mTLS 的机制(客户端证书、内部 CA、SPIFFE/SPIRE)+服务网格的部署(Istio 自动 mTLS、灰度迁移)+零信任内网的演进(mTLS 先行、授权跟进、审计兜底)——「内网的边界消失」是零信任的前提——「mTLS」是内网零信任的第一块基石——「服务身份」的现代化(SPIFFE)让零信任有了「身份的根」——**「加密一切、验证一切、授权一切」是内网的新三原则。
TLS 1.3 的进阶:mTLS 与内网加密
TLS 1.3 的进阶:mTLS 与内网加密体系的演进。「mTLS 的机制」:双向认证(客户端证书的签发——内部 CA 的建设(证书的签发、轮换、吊销——「证书的生命周期管理」(轮换的自动化——短期证书的趋势——「SPIFFE/SPIRE」(服务身份框架——SVID 的身份标识——「SPIRE」(工作负载身份的注册与发放——「服务身份」的现代化。「mTLS 的部署」:服务网格的自动 mTLS(Istio 的 sidecar 加密——「应用无感」(应用层不需要改——「mTLS 的灰度」(PERMISSIVE 到 STRICT 的迁移——「灰度」的步骤(先双模式后强制。「mTLS 的权衡」:证书管理的复杂度(大量服务的证书——「短期证书」的缓解——性能的开销(握手成本——连接复用的缓解——「排障的复杂度」(加密后的流量不可见——sidecar 的可观测性——「加密流量」的观测形态。「零信任内网」的演进:从「内网可信」到「内网零信任」(服务间的身份与授权——「授权」的细粒度(服务间 RBAC——「零信任的落地路径」(mTLS 先行、授权跟进、审计兜底——「内网的边界消失」是零信任的前提——「mTLS」是内网零信任的第一块基石——「服务身份」的现代化(SPIFFE)让零信任有了「身份的根」——「加密一切、验证一切、授权一切」是内网的新三原则。
小结
TLS 1.3 的升级逻辑:减法(砍掉 RSA 交换、CBC、RC4——「只留安全选项」的设计哲学——不给选错的机会)与加法(1-RTT 握手、0-RTT 恢复、强制前向安全——「今天的密钥泄露不解密过去」的隐私保险)。0-RTT 的深度权衡:零往返的性能激赏 vs 重放风险(非幂等请求禁用)、PSK 模式的非前向安全——0-RTT 是显式的性能-安全权衡,不是默认午餐。迁移指南:双版本并存期、旧套件的清理与灰度禁用、移动端的首屏收益量化。给工程师的认知升级:TLS 1.3 代表了安全协议设计哲学的转向——「保守的选择集」优于「灵活的可配置」——每一次配置的简化都是攻击面的收窄——「少即是多」在密码学的工程里是字面意义的真理。同时,TLS 的演进提醒我们:加密不是安全的地毯,是安全的地基——地基的每一次升级(前向安全、0-RTT)都值得全行业跟进。
TLS 1.2 时代的加密战场是「选对算法」,TLS 1.3 的战场是「没有坏选项可选」——好的安全设计,让正确的事成为唯一的事。
读者留言
COMMENTS 暂无还没有留言,来说第一句?