SSL和TLS区别
SSL 和 TLS 经常被混用,但它们其实有区别,而且 TLS 可以看作是 SSL 的升级版。我们可以从几个方面来理解它们的区别:
1. 定义
- SSL (Secure Sockets Layer):由 Netscape 开发的加密协议,用于在客户端和服务器之间建立安全连接。历史版本有 SSL 2.0、SSL 3.0。
- TLS (Transport Layer Security):SSL 的继任者,由 IETF 标准化,更安全、更高效。TLS 1.0~1.3 版本中,1.2 和 1.3 最常用。
2. 安全性
SSL 已经被认为不安全:
- SSL 2.0 有多种漏洞,已经废弃。
- SSL 3.0 存在 POODLE 攻击漏洞。
TLS 修复了 SSL 的很多问题,并且支持更强的加密算法。
3. 协议版本
| 协议 | 发布年份 | 特点 |
|---|---|---|
| SSL 2.0 | 1995 | 弱加密,不推荐使用 |
| SSL 3.0 | 1996 | 修复部分漏洞,但仍有安全隐患 |
| TLS 1.0 | 1999 | SSL 3.0 升级版,支持更强算法 |
| TLS 1.1 | 2006 | 弱加密改进,支持更安全模式 |
| TLS 1.2 | 2008 | 常用版本,支持 AEAD 加密和 SHA-2 |
| TLS 1.3 | 2018 | 连接握手更快、更安全,去掉不安全算法 |
4. 握手方式
SSL:
- 允许多种加密套件,但某些套件不安全。
- 握手过程较复杂,通信加密过程较慢。
TLS:
- 改进握手流程(TLS 1.3 更简化,只需一次 RTT)。
- 强制使用更安全的加密算法,防止降级攻击。
5. 协议兼容性
- TLS 向下兼容 SSL,但通常现代浏览器和服务器只支持 TLS。
- 所以你现在在浏览器看到的
https://,实际上用的是 TLS,而不是传统 SSL。
总结一句话
TLS 是 SSL 的安全升级版,支持更强加密算法和更高效的握手,SSL 已经过时。
案例:
在 现代 Nginx 配置中,ssl 这个标记 在某些情况下仍然需要,但其意义已经和以前略有不同:
1. 作用
listen 443 ssl;- 告诉 Nginx 该端口是 HTTPS,需要使用证书进行加密。
- 如果不加
ssl,Nginx 会把这个端口当作普通 HTTP(明文)端口,即使你配置了证书,也不会启用 TLS。
所以它主要是端口绑定和加密开关,而不是说“使用 SSL 协议”。
2. 现代 Nginx 的变化
- 在 Nginx 1.15.0 之后,你可以使用
listen 443 http2;并且配合ssl_certificate和ssl_certificate_key自动启用 TLS。 - 也就是说,如果你已经配置了证书,现代 Nginx 会自动启用 TLS,即使没有显式写
ssl。 - 但是为了兼容老配置或明确标识,这个
ssl仍然常用。
3. 推荐做法
# 推荐明确写 ssl
listen 443 ssl http2;
ssl_certificate /etc/nginx/certs/example.com.crt;
ssl_certificate_key /etc/nginx/certs/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
明确写
ssl可以:- 保证向下兼容老版本 Nginx。
- 让配置语义更清晰:这个端口是 HTTPS/TLS。
总结一句话:
- 不写
ssl也可能生效(现代 Nginx),但写上ssl更安全、明确、兼容。
