一、SSL 2.0 (1995年,已废弃)
流程:
- ClientHello
- 客户端发送支持的加密套件列表(弱算法如RC4、MD5)。
- ServerHello
- 服务器选择加密套件并发送证书(无服务器密钥交换)。
- 密钥交换
- 客户端用服务器公钥加密预主密钥(PreMasterSecret)发送。
- 完成
- 双方生成主密钥,未验证握手完整性。
缺陷:
- 无扩展支持,易受中间人攻击(MITM)。
- 2011年正式禁用。
二、SSL 3.0 (1996年,已废弃)
改进:
- 引入 Finished消息(验证握手完整性)。
- 支持更多加密算法(如SHA-1)。
握手流程:
Client Server ClientHello (随机数A + 加密套件) ServerHello (随机数B + 选定套件) + Certificate ServerKeyExchange (如需DH参数) ServerHelloDone ClientKeyExchange (PreMasterSecret加密传输) ChangeCipherSpec (切换加密) Finished (HMAC校验) ChangeCipherSpec Finished Client Server
缺陷:
- POODLE攻击(2014年)导致全面弃用。
三、TLS 1.0 (1999年)
关键改进:
- 版本号显式声明(
TLS 1.0
)。 - 使用HMAC替代MAC,增强完整性。
- 支持动态密钥交换(DHE、ECDHE)。
完整握手流程:
- ClientHello
- 客户端随机数、会话ID、加密套件列表。
- ServerHello
- 服务器随机数、选定套件、会话ID。
- Certificate
- 服务器发送证书链。
- ServerKeyExchange (可选)
- 发送DH/ECDH参数(非RSA时)。
- CertificateRequest (可选)
- 请求客户端证书(双向认证)。
- ServerHelloDone
- ClientKeyExchange
- 客户端发送PreMasterSecret(RSA加密)或DH公钥。
- CertificateVerify (可选)
- 客户端证书签名验证。
- ChangeCipherSpec
- 通知切换加密模式。
- Finished
- 加密的HMAC校验值,验证握手完整性。
- 服务器响应 ChangeCipherSpec + Finished。
四、TLS 1.1 (2006年)
安全增强:
- 引入显式初始化向量(IV)防御CBC攻击。
- 改进对填充错误的处理。
流程变化:
与TLS 1.0基本相同,仅增强安全机制。
五、TLS 1.2 (2008年)
核心改进:
- 密码灵活性
- 支持AEAD模式(如AES-GCM)。
- 可配置PRF(伪随机函数),默认SHA-256。
- 扩展支持
- 支持SNI(Server Name Indication)、ALPN等扩展。
握手流程变化:
Finished
消息使用改进的PRF计算。- 支持椭圆曲线加密(ECDSA/ECDHE)。
六、TLS 1.3 (2018年)
革命性简化:
- 握手仅需1-RTT(0-RTT可选)。
- 移除不安全特性(RSA密钥交换、压缩、SHA-1等)。
标准握手(1-RTT):
Client Server ClientHello (密钥共享: client_share) ServerHello (密钥共享: server_share) Certificate + CertificateVerify Finished Finished Client Server
步骤详解:
- ClientHello
- 密钥共享:发送DH公钥(如x25519)。
- 支持的密码套件(仅AEAD)。
- ServerHello
- 选择参数并返回DH公钥。
- 双方通过ECDHE计算共享密钥。
- 服务器认证
Certificate
+CertificateVerify
(签名证明私钥所有权)。
- Finished
- 双方发送加密的Finished消息确认密钥。
0-RTT模式(有限场景):
- 客户端在ClientHello中附带加密的早期数据(如session token)。
- 风险:重放攻击(需业务层防御)。
被移除的特性:
- 静态RSA密钥交换
- 压缩
- 显式ChangeCipherSpec消息
各版本核心对比
特性 | TLS 1.0/1.1 | TLS 1.2 | TLS 1.3 |
---|---|---|---|
握手延迟 | 2-RTT | 2-RTT | 1-RTT (0-RTT可选) |
前向保密 | 可选(DHE) | 可选(DHE) | 强制(仅ECDHE) |
密钥交换 | RSA/DH | RSA/DH/ECDH | 仅ECDH |
加密模式 | CBC常见 | CBC/AEAD | 仅AEAD (AES-GCM等) |
签名算法 | RSA/DSA | RSA/ECDSA | EdDSA/ECDSA |
安全增强 | 基础防护 | SHA-256支持 | 移除所有已知漏洞机制 |
实践建议
- 禁用旧版本
- 禁用TLS 1.0/1.1(PCI DSS等合规要求)。
- 优先TLS 1.3
- 性能与安全性最佳平衡。
- 谨慎使用0-RTT
- 仅限幂等操作(如GET请求)。
- 证书管理
- 使用ECDSA证书减少开销(TLS 1.3优化)。
可通过Wireshark抓包或openssl s_client -connect
命令验证握手过程。例如:
openssl s_client -connect example.com:443 -tls1_3