概叙
科普文:HTTP2.0 及HTTPS协议【TLS/SSL 握手协议】-CSDN博客
前面详细梳理了TLS协议的原理和类型,这里我们看看当前https运行环境中的TLS 1.2 和TLS 1.3 异同,推荐优先配置使用TLS 1.3。
对比项 | TLS 1.2 | TLS 1.3 |
---|---|---|
握手速度 | 较慢(2-RTT或1-RTT) | 更快(1-RTT或0-RTT) |
安全性 | 依赖配置(可能不安全) | 强制前向保密,更安全 |
加密套件 | 支持多种(含弱算法) | 仅支持现代AEAD套件 |
兼容性 | 广泛支持 | 部分旧设备不支持 |
TLS 1.3 是更安全、更高效的协议,推荐在新系统中优先使用。
TLS(传输层安全协议)是确保互联网通信安全的核心协议,广泛应用于HTTPS网站、电子邮件加密等领域。随着网络安全需求的不断提升,TLS协议经历了多个版本的迭代更新。
TLS 1.2 和TLS 1.3 的相同点
- 目标:两者都旨在提供安全的互联网通信,保护数据免受窃听和篡改。
- 应用场景:都广泛应用于HTTPS、电子邮件、即时通讯等需要加密通信的领域。
TLS 1.2 和TLS 1.3 的不同点
主要差异对比表
特性 | TLS 1.2 | TLS 1.3 |
---|---|---|
握手往返次数 | 完整握手需要2次往返(2-RTT) | 默认1次往返(1-RTT),支持0-RTT |
加密套件 | 支持大量传统加密算法 | 仅保留现代安全算法 |
前向安全性 | 依赖密钥交换方式 | 强制前向安全性 |
密钥交换 | 单独的消息阶段 | 集成在Client/Server Hello中 |
会话恢复 | Session ID或Session Ticket | 仅支持PSK(预共享密钥)方式 |
加密开始时间 | 握手完成后才开始加密 | 握手早期就开始加密部分内容 |
证书请求 | 明确的消息阶段 | 合并到扩展中 |
密钥派生 | 使用PRF函数 | 使用HKDF |
密码套件结构 | 包含密钥交换、认证、加密和MAC算法 | 仅包含加密和哈希算法 |
1. 握手过程对比
-
TLS 1.2
- 2-RTT握手:ClientHello → ServerHello → Certificate → ServerKeyExchange → ServerHelloDone → ClientKeyExchange → Finished。
- 密钥交换:支持静态RSA(无前向安全)或DH(需额外消息)。
-
TLS 1.3
- 1-RTT握手:ClientHello(含密钥共享参数) → ServerHello(直接生成密钥) → Finished。
- 0-RTT模式:对之前访问过的服务器可发送加密数据(首条消息),但需注意重放攻击风险。
TLS 1.2 握手流程
- Client Hello
- Server Hello
- Certificate (服务器证书)
- Server Key Exchange (可选)
- Certificate Request (可选)
- Server Hello Done
- Client Certificate (可选)
- Client Key Exchange
- Certificate Verify (可选)
- Change Cipher Spec
- Finished
- Change Cipher Spec
- Finished
TLS 1.3 简化握手流程
- Client Hello (包含密钥共享信息)
- Server Hello (包含密钥共享信息)
- Change Cipher Spec
- Finished
- Change Cipher Spec
- Finished
TLS 1.2 握手(4次往返,RTT)
1. Client Hello:客户端发送支持的加密套件、随机数(Client Random)。
2. Server Hello:服务器选择加密套件、返回随机数(Server Random)、证书。
3. 密钥交换:
- 客户端生成预主密钥(Pre-Master Secret),用服务器公钥加密后发送。
- 服务器用私钥解密获取预主密钥。
4. Finished:双方计算会话密钥,验证握手完整性。
特点:
- 需要2-RTT(如果使用RSA密钥交换)。
- 支持静态RSA/DH密钥交换(不支持前向保密)。
TLS 1.3 握手(1-RTT 或 0-RTT)
1. Client Hello:客户端发送随机数(Client Random)、支持的加密套件(仅限TLS 1.3支持的套件)、密钥共享参数(如ECDHE公钥)。
2. Server Hello:服务器选择加密套件、返回随机数(Server Random)、自己的密钥共享参数(如ECDHE公钥)、证书。
3. Finished:双方计算会话密钥,直接开始加密通信(1-RTT)。
0-RTT模式(快速恢复连接):
- 客户端缓存上次会话的密钥,直接发送加密数据(但可能面临重放攻击风险)。
特点:
- 强制前向保密(PFS),仅支持ECDHE密钥交换(RSA密钥交换被移除)。
- 握手更快(1-RTT或0-RTT)。
- 简化加密套件(仅保留AES-GCM、ChaCha20-Poly1305等现代算法)。
2. 加密套件对比
TLS 1.2 支持的算法
- 密钥交换:RSA, DH, ECDH, DHE, ECDHE
- 加密:AES-CBC, AES-GCM, Camellia, 3DES, RC4
- 哈希:SHA-1, SHA-256, SHA-384
- MAC:HMAC-SHA256等
TLS 1.3 支持的算法(大幅精简)
- 密钥交换:仅ECDHE(椭圆曲线DH)
- 加密:仅AES-GCM, ChaCha20-Poly1305
- 哈希:仅SHA-256, SHA-384
- 不再单独使用MAC,改用AEAD(认证加密)
-
TLS 1.2
- 支持不安全的算法:RC4、SHA1、CBC模式(易受Padding Oracle攻击)、静态RSA密钥交换。
- 需显式协商加密套件(如
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
)。
-
TLS 1.3
- 仅AEAD加密:如AES-GCM、ChaCha20-Poly1305,删除CBC等不安全模式。
- 密钥交换与加密套件合并,简化协商(如
TLS_AES_128_GCM_SHA256
)。
TLS 1.2 | TLS 1.3 |
---|---|
支持多种加密套件(如TLS_RSA_WITH_AES_128_CBC_SHA ) | 仅支持AEAD(认证加密)套件,如TLS_AES_256_GCM_SHA384 |
支持静态RSA/DH密钥交换 | 仅支持ECDHE(前向保密) |
可能使用弱算法(如MD5、SHA1) | 强制使用SHA-256/SHA-384 |
TLS 1.3 移除的加密套件:
- RSA密钥交换(不支持前向保密)。
- 静态DH(如
TLS_DH_RSA_WITH_AES_256_CBC_SHA
)。 - 弱哈希算法(如MD5、SHA1)。
3. 密钥交换机制
TLS 1.2 | TLS 1.3 |
---|---|
支持RSA、静态DH、ECDHE | 仅支持ECDHE(前向保密) |
预主密钥通过RSA加密传输(可能被中间人攻击) | 预主密钥通过ECDHE协商(更安全) |
TLS 1.3 的改进:
- 移除RSA密钥交换,避免私钥泄露导致历史会话被解密。
- 1-RTT握手(甚至0-RTT),减少延迟。
4. 安全性对比
TLS 1.3 移除的不安全特性
- 移除静态RSA密钥交换:不再支持不提供前向安全性的RSA密钥交换
- 移除CBC模式加密:消除了BEAST等攻击的可能性
- 移除SHA-1:使用更安全的哈希函数
- 移除RC4:不再支持不安全的流密码
- 移除压缩:消除了CRIME攻击的可能性
- 移除重协商:简化协议并提高安全性
- 移除显式IV:改为从密钥派生
TLS 1.3 新增安全特性
- 0-RTT模式:允许在第一个消息中就发送加密数据
- 加密扩展:保护更多握手信息不被窃听
- 密钥分离:使用不同的密钥用于不同的目的
- 更严格的验证:所有握手消息都包含在最终的Finished验证中
- TLS 1.2:依赖密钥交换方式(如使用RSA则无前向安全)。
- TLS 1.3:强制使用ECDHE等临时密钥交换,即使私钥泄露,历史会话也无法解密。
安全特性 | TLS 1.2 | TLS 1.3 |
---|---|---|
前向保密(PFS) | 可选(依赖ECDHE) | 强制支持 |
抗中间人攻击 | 依赖RSA/静态DH(可能被破解) | ECDHE更安全 |
弱算法支持 | 支持MD5、SHA1等 | 仅支持SHA-256/SHA-384 |
0-RTT模式 | 不支持 | 支持(但可能有重放攻击风险) |
TLS 1.3 的安全优势:
- 移除不安全算法(如RSA密钥交换、CBC模式)。
- 更强的密钥派生机制(HKDF替代PRF)。
- 更快的密钥更新(支持
KeyUpdate
消息)。
5. 性能对比
- TLS 1.3优势:
- 减少握手延迟(1-RTT提升显著,尤其移动网络)。
- 0-RTT可加速重复连接(但需权衡重放攻击风险)。
- TLS 1.2:握手开销较高,但可通过Session Resumption(会话恢复)优化。
性能指标 | TLS 1.2 | TLS 1.3 |
---|---|---|
握手延迟 | 2-RTT(RSA)或1-RTT(ECDHE) | 1-RTT(默认)或0-RTT(快速恢复) |
计算开销 | 较高(RSA签名验证较慢) | 更低(ECDHE更高效) |
加密效率 | CBC模式(易受攻击) | 仅AEAD(AES-GCM/ChaCha20) |
TLS 1.3 的优化:
- 减少握手轮次(1-RTT或0-RTT)。
- 更快的密钥计算(ECDHE比RSA更快)。
- 更少的网络往返(减少延迟)。
TLS 1.3 性能优势
- 更快的连接建立:1-RTT标准握手,0-RTT优化模式
- 减少延迟:特别有利于移动网络和高延迟环境
- 更少的CPU消耗:移除了不必要的加密计算步骤
- 更小的带宽占用:简化的握手过程减少了数据量
0-RTT 潜在风险
虽然0-RTT提高了性能,但需要注意:
- 重放攻击风险(对非幂等操作)
- 需要应用层防护措施
- 不适合敏感操作
6. 兼容性对比
- TLS 1.2:广泛支持(包括旧系统/设备),但需禁用不安全算法(如BEAST/POODLE缓解)。
- TLS 1.3:现代浏览器/服务器默认支持(如OpenSSL 1.1.1+、Nginx 1.13+),但旧设备(如Windows 7需更新)可能不兼容。
兼容性 | TLS 1.2 | TLS 1.3 |
---|---|---|
旧设备支持 | 广泛支持(旧服务器/客户端) | 部分旧设备不支持 |
浏览器支持 | 所有现代浏览器 | Chrome/Firefox/Edge最新版支持 |
服务器支持 | 广泛支持 | Nginx/Apache最新版支持 |
TLS 1.3 的局限性:
- 某些旧设备(如嵌入式系统)可能不支持。
- 0-RTT模式可能面临重放攻击风险(需应用层防护)。
应用场景建议
- 优先TLS 1.3:新系统、高安全要求(如金融、隐私服务)、低延迟场景(如HTTP/2、QUIC)。
- 降级TLS 1.2:需兼容旧客户端(如IoT设备、旧版Java/Windows)。
升级到TLS 1.3的好处
- 更快的网站加载速度
- 更强的安全性
- 更好的用户体验
- 符合最新安全标准
抓包对比示例
- TLS 1.2:可见明文ClientHello、ServerHello、Certificate等。
- TLS 1.3:仅ClientHello部分明文,其余握手消息加密。
通过以上对比,TLS 1.3在安全性和性能上显著优于TLS 1.2,但需确保环境兼容性。实际部署时可同时支持两者,并优先协商TLS 1.3。