第1章:为什么我们还在聊一个30年前的协议?

说来有点意思。TLS 协议的历史,其实是一部互联网安全攻防的进化史。我刚入行那会儿,有个老工程师跟我说:搞懂 SSL/TLS,你就懂了一半的网络安全。当时我不信,后来踩了无数坑才明白——他说得一点不夸张。

1.1 从 SSL 到 TLS:一个被迫升级的故事

事情要从 1994 年说起。网景公司为了给网上购物加点安全感,搞出了 SSL 1.0。嗯,这版本没发布过,内部就被毙了。真正面世的是 SSL 2.0,1995 年发布。但这玩意儿漏洞多得跟筛子似的,连基本的消息完整性都保证不了。

SSL 3.0 算是一次重大改进。我记得在 2014 年之前,很多银行系统还在用 SSL 3.0。为什么?因为旧系统不好动。直到 POODLE 漏洞 爆出来,大家才不得不升级。

然后互联网工程任务组 IETF 接手了这项工作。他们改了个名——TLS 1.0,1999 年发布。说白了,TLS 1.0 就是 SSL 3.0 的小改版,内核几乎一样。

关键时间线:

  • 1995 — SSL 2.0 发布(已弃用,不要用)
  • 1996 — SSL 3.0 发布(2015 年被正式废弃)
  • 1999 — TLS 1.0 发布(RFC 2246)
  • 2006 — TLS 1.1 发布(RFC 4346)
  • 2008 — TLS 1.2 发布(RFC 5246,现在的主流)
  • 2018 — TLS 1.3 发布(RFC 8446,当前最新版本)

为什么 TLS 1.2 到现在还是主流?因为 1.3 的部署需要应用层调整。我曾经帮一个客户迁移到 1.3,结果发现他们的负载均衡器不支持——嗯,这就是现实。

1.2 TLS vs SSL:别再搞混了

很多人到现在还管 TLS 叫 SSL。开发同事跟我说「这个 SSL 证书过期了」,我一看,明明是个 TLS 证书。说白了,这是个历史遗留的称呼习惯,但技术上有本质区别。

特性 SSL 3.0 TLS 1.2 TLS 1.3
握手轮次 2-RTT 2-RTT 1-RTT(0-RTT 复用)
密码套件 老旧,不安全 支持 AEAD、ECDHE 强制 AEAD,移除静态 RSA
前向安全性 不支持 可选 强制
SNI 扩展 不支持 支持 支持(加密 SNI 可选)
会话恢复 Session ID Session Ticket PSK + Ticket

一个小建议:如果你还在配置 SSL 相关的选项,赶紧检查一下。我最近审计一个项目,发现 Nginx 配置里还留着 ssl_protocols SSLv3——浏览器早不支持了,但攻击工具依然可以尝试降级攻击。

1.3 TLS 在现代安全中的地位

你想想看,现在互联网上每一笔交易、每一次登录、每一条消息,只要经过 HTTPS,背后都是 TLS 在兜底。TLS 已经不只是「加密」那么简单了。

TLS 承担了三件事:

  • 加密 — 内容只有收件人才能读懂
  • 完整性 — 内容没被中间人篡改
  • 身份验证 — 你连接的是真的服务器

别看这三点描述起来简单,实现起来门道很多。比如加密强度不够,破解只是时间问题;完整性校验没做好,攻击者可以改数据包。

注意:别以为升级到 TLS 1.3 就万事大吉了。我见过很多团队只升级了协议版本,但证书管理一塌糊涂。证书过期、私钥泄露、弱签名算法——这些坑一个个等着你跳。TLS 是一个链条,任何一节断了都不安全。

这些年,TLS 协议还在不断演进。比如 HTTP/3 基于 QUIC,而 QUIC 的加密层直接借鉴了 TLS 1.3 的握手设计。说白了,TLS 已经变成了底层基础设施,就像 TCP 一样不可或缺。

TLS 协议发展历程与核心角色 SSL 2.0 (1995) 已弃用,极不安全 SSL 3.0 (1996) POODLE攻击|已废弃 TLS 1.0 (1999) 逐步淘汰中 TLS 1.1 (2006) 建议禁用 TLS 1.2 (2008) 当前互联网主流 TLS 1.3 (2018) 最新推荐 TLS 核心安全特性 加密 · 完整性 · 身份验证

这张图展示了 TLS 的发展脉络。你能看到一条清晰的路线:老的被淘汰,新的接上来。但现实部署中,很多企业还在用 TLS 1.0。为什么会这样?兼容性包袱太重了。

我在做安全审计时经常遇到这种情况:一个内部系统用了十多年的 HTTPS 接口,客户端是嵌入式设备。升级 TLS 版本?那边设备固件没法升级。这种时候,只能靠反向代理或者隧道做妥协方案。记住,安全是平衡的艺术。

回顾一下:

  • 不要用 SSL 任何版本,浏览器都已经不支持了
  • TLS 1.0/1.1 也在逐步弃用,PCI DSS 等标准已明确禁止
  • 当前推荐:TLS 1.2 + 1.3 双栈部署,逐步淘汰低版本
  • TLS 不只是加密,它定义了现代社会数字信任的基础