TLS/SSL
约 4 分钟阅读
最后更新: 2026-03-08
什么是 TLS/SSL
TLS (Transport Layer Security) 是一种用于加密互联网通信的协议。SSL (Secure Sockets Layer) 是其前身,由于存在安全漏洞已被弃用,但习惯上仍常使用"SSL"或"SSL/TLS"的称呼。
浏览器地址栏中显示的锁形图标和 HTTPS 前缀表示 TLS 正在保护通信。如果没有 TLS,密码和信用卡号等数据将以明文形式在网络上传输,容易被窃听。
TLS 的工作原理 - 握手过程
TLS 通信以"握手"过程开始。
- Client Hello:客户端向服务器发送支持的 TLS 版本和密码套件列表。
- Server Hello:服务器选择密码套件,并将数字证书 (包含公钥) 发送给客户端。
- 密钥交换:双方通过公钥加密安全地生成共享会话密钥。在 TLS 1.3 中,ECDHE (椭圆曲线 Diffie-Hellman 临时密钥) 是强制要求的。
- 加密通信:后续所有数据使用共享会话密钥通过 AES 等对称加密算法进行加密。
TLS 1.3 将握手从 2-RTT 缩减为 1-RTT,显著提升了连接速度。还支持 0-RTT 重连,使之前连接过的服务器几乎可以零延迟恢复通信。
TLS 1.3 的变化
TLS 1.3 (RFC 8446,2018 年制定) 不是简单的小版本更新,而是对协议设计的根本性重构。
证书类型与选择
- DV (域名验证):仅验证域名所有权。可通过 Let's Encrypt 免费获取。适合个人网站和博客。几分钟即可签发。
- OV (组织验证):还验证组织的真实存在。企业网站常用。签发需要数天,需提交注册文件。
- EV (扩展验证):最严格的验证,包括法律存在和实际地址。以前会显示绿色地址栏,但主流浏览器已取消这一视觉区分。相比 DV 的实际优势已减弱。
加密强度不取决于证书类型。DV、OV、EV 都使用相同的 TLS 加密。区别仅在于对域名运营者身份的验证级别。
Let's Encrypt 与证书自动管理
Let's Encrypt 于 2016 年正式推出,是一个免费的证书颁发机构,通过 ACME (自动证书管理环境) 协议实现了证书的自动签发和续期。目前,Web 上约 30% 的 TLS 证书由 Let's Encrypt 签发。
ACME 协议通过 HTTP-01 或 DNS-01 验证自动确认域名所有权,证书在数秒内即可签发。由于证书有效期为 90 天,使用 certbot 等工具进行自动续期至关重要。
Let's Encrypt 的普及大幅降低了 HTTPS 的采用门槛。但由于 DV 证书仅验证域名所有权,无法阻止钓鱼网站获取证书。不应仅凭锁形图标就信任一个网站。
TLS 配置验证方法
可以使用以下工具验证服务器的 TLS 配置是否安全。
- SSL Labs (ssllabs.com):Qualys 提供的免费在线测试。从 A+ 到 F 进行评级,全面检查支持的协议、密码套件、证书链和已知漏洞 (BEAST、POODLE、Heartbleed 等)。
- testssl.sh:开源命令行工具。适用于测试无法公开访问的内部服务器。在 Linux/macOS 上运行。
- 浏览器开发者工具:在 Chrome 中,点击锁形图标 →"连接是安全的"→"证书有效",可查看 TLS 版本、密码套件和证书详情。
建议在每次服务器配置变更后运行 SSL Labs,确认评级为 A 或以上。
常见误解
- SSL 和 TLS 是不同的技术
- TLS 是 SSL 的后继协议。SSL 3.0 之后制定了 TLS 1.0,目前使用的是 TLS 1.2/1.3。"SSL 证书"这一称呼只是历史习惯,实际上是 TLS 证书。
- HTTPS 就意味着绝对安全
- HTTPS 保证的是通信通道的加密,但连接的网站本身是否安全是另一回事。钓鱼网站也使用 HTTPS,因此不应仅凭锁形图标就信任网站。
TLS 1.2 与 TLS 1.3 对比
TLS 1.2
2008 年制定。2-RTT 握手。支持大量密码套件 (部分安全性较低)。前向保密为可选项。
TLS 1.3
2018 年制定。1-RTT 握手。仅限安全密码套件。前向保密为强制要求。支持 0-RTT 重连。