第一章:TLS/SSL协议概述
1.1 从SSL到TLS——一场安全协议的进化史
说到TLS,得先聊聊它的前辈SSL。上世纪90年代,网景公司为了解决HTTP明文传输的安全问题,搞出了SSL 1.0(没公开发布)、SSL 2.0(有严重漏洞),直到SSL 3.0才算真正能用。后来IETF接手,把SSL 3.0改了个名,叫TLS 1.0。嗯,本质上就是一回事,只是换个了机构维护。
我个人习惯把TLS和SSL统称为“SSL/TLS”,因为市面上很多系统配置里还写着“SSL证书”,其实背后都是TLS协议。你想想看,2024年了还有人在说“SSL证书”,实际上SSL 3.0已经在2015年被RFC 7568正式废弃了。我去年排查过一个老系统,发现对方还在用SSL 3.0握手,浏览器早就报错了——这就是历史遗留问题。
| 版本 | 发布时间 | 当前状态 | 关键变化 |
|---|---|---|---|
| SSL 2.0 | 1995 | 已废弃(早期漏洞多) | 首次公开,但无保护 |
| SSL 3.0 | 1996 | 已废弃(POODLE攻击) | 引入握手协议,奠定基础 |
| TLS 1.0 | 1999 | 已废弃(BEAST攻击) | 基于SSL 3.0改进 |
| TLS 1.1 | 2006 | 已废弃 | 增加CBC保护 |
| TLS 1.2 | 2008 | 广泛使用(推荐) | AEAD支持、SHA256 |
| TLS 1.3 | 2018 | 最新标准 | 握手缩短、移除不安全算法 |
核心观点: 如果你的新项目还没用上TLS 1.2/1.3,赶紧升级。TLS 1.0和1.1在2021年被所有主流浏览器禁止了。我曾经在银行项目里被安全审计问住——他们要求必须禁用TLS 1.0,结果发现遗留系统还在用。
1.2 TLS到底解决了什么问题?
说白了,TLS就干三件事:加密(防偷听)、认证(防冒充)、完整性(防篡改)。
- 加密: 握手阶段协商对称密钥,后续数据用AES-GCM这样的算法加密传输,中间人抓到的全是乱码。
- 认证: 通过数字证书验证服务器(以及可选的客户端)身份,防止你连到冒牌网站。
- 完整性: 每条消息都带MAC(消息认证码),确保不会被中间人偷偷改一个字节。
我遇到过不少开发同事觉得“HTTPS就是多了个证书”,其实证书只是身份证明的载体。真正的工作是在握手阶段协商出会话密钥,后续才进入加密通信。你想想看,如果没有证书校验,随便一个中间人就能伪造服务器公钥——那就完蛋了。
1.3 应用场景:哪里需要TLS?
TLS已经不只是给HTTPS用了。凡是需要安全通道的地方,基本都能见到它:
- Web服务: HTTPS,最典型的场景。浏览器到服务器的双向认证(比如企业内网系统)也属于这一类。
- API接口: 后端服务之间互调,比如微服务架构,常用TLS双向认证(mTLS)做服务间身份验证。
- 邮件协议: SMTP、IMAP、POP3都可以基于TLS加密。
- 数据库连接: MySQL、PostgreSQL支持TLS加密,防止数据库密码在网络上被嗅探。
- VPN与远程访问: OpenVPN等很多实现底层就是TLS。
- 物联网(IoT): 设备与服务端通信,轻量级的TLS实现(比如DTLS用于UDP)。
小技巧: 在做mTLS(双向认证)时,客户端和服务端都需要持有证书。我习惯用内部CA签发客户端证书,有效期可以设短一些,比如一年,配合自动续期工具(certbot或acme.sh)实现自动化轮换,避免手动维护。
1.4 握手流程概览(简化版)
这里放一张握手流程图,帮大家快速建立认知。注意,我只画经典TLS 1.2的四次握手,1.3要更简洁——但抽象逻辑是相通的。
画了这张图之后,我想强调几个容易被忽视的点:
- 证书发送时机: 服务端在ServerHello之后立即发证书。客户端收到后会验证证书链——我遇到过证书链不完整导致握手失败,排查了半天才发现是服务器没有发送中间证书。
- 预主密钥: 它是由客户端生成的随机数,用服务端公钥加密后发过去。服务端用私钥解密后,双方各持有相同的预主密钥,然后通过PRF(伪随机函数)扩展出会话密钥。
- 双向认证: 第③步中,如果服务端要求客户端证书,客户端会发自己的证书和签名验证。否则只发预主密钥。
重要提醒: 在生产环境中,千万不要使用自签名证书做服务端证书,除非你只用在内部开发或测试环境。我曾经见过一个团队给线上API配了自签名证书,结果所有第三方调用方都报证书不可信——他们花了三天才找到原因。
1.5 课程整体脉络
这门课共30章,重点在TLS双向认证的落地方案。我们从协议概览起步,后续会深入证书管理、握手细节、Java/Go/Node实现、性能调优、常见问题排查等。本章作为开篇,先把TLS的来龙去脉、核心能力、基本流程讲清楚。后面的章节,咱们再一点一点抠细节。
现在你已经了解了TLS是干什么的,也知道握手大概怎么走了。接下来,我们会在第二章专门讲数字证书体系——毕竟证书是双向认证的基础。不过,那都是后话了。