SSL/TLS协议(SSL/TLS Protocol)
SSL/TLS是提供网络通信安全的最重要协议之一,为应用层提供数据加密、身份认证和完整性保护
SSL/TLS概述
SSL(Secure Sockets Layer)及其继任者TLS(Transport Layer Security)是用于在网络通信中提供安全性的协议。它们位于TCP/IP协议栈的传输层与应用层之间。
SSL/TLS的发展历史
SSL 1.0 (1994, 未发布)
↓
SSL 2.0 (1995, 已弃用)
↓
SSL 3.0 (1996, 已弃用)
↓
TLS 1.0 (1999, RFC 2246)
↓
TLS 1.1 (2006, RFC 4346)
↓
TLS 1.2 (2008, RFC 5246)
↓
TLS 1.3 (2018, RFC 8446)
TLS协议层位置
应用层 (HTTP, SMTP, FTP...)
│
▼
┌─────────────┐
│ TLS/SSL │ ← 加密、认证、完整性
└─────────────┘
│
▼
传输层 (TCP/UDP)
│
▼
网络层 (IP)
TLS协议结构
TLS记录协议
TLS记录协议负责封装上层协议数据,提供基本的安全服务。
记录层结构:
┌─────────────┬─────────────┬───────────────┬──────────────┐
│ 内容类型 │ 版本 │ 长度 │ 加密数据 │
│ 1字节 │ 2字节 │ 2字节 │ 变长(N字节) │
└─────────────┴─────────────┴───────────────┴──────────────┘
内容类型
- 20:Change Cipher Spec
- 21:Alert
- 22:Handshake
- 23:Application Data
TLS握手协议
TLS握手协议负责协商安全参数,建立安全连接。
TLS 1.3握手流程
客户端 服务器
│ │
│ 1. ClientHello │
├────────────────────────────────────────────→│
│ │
│ 2. HelloRetryRequest (可选) │
├←────────────────────────────────────────────┤
│ │
│ 3. ClientHello (重发) │
├────────────────────────────────────────────→│
│ │
│ 4. ServerHello + EncryptedExtensions │
├←────────────────────────────────────────────┤
│ │
│ 5. [CertificateRequest] (可选) │
├←────────────────────────────────────────────┤
│ │
│ 6. [Certificate, CertificateVerify] │
├────────────────────────────────────────────→│
│ │
│ 7. [Finished] │
├────────────────────────────────────────────→│
│ │
│ 8. [Finished] │
├←────────────────────────────────────────────┤
│ │
│ 9. Application Data (加密) │
├↔────────────────────────────────────────────↔│
TLS 1.2握手流程
客户端 服务器
│ │
│ 1. ClientHello │
├────────────────────────────────────────────→│
│ │
│ 2. ServerHello │
│ Certificate │
│ ServerKeyExchange │
│ [CertificateRequest] │
│ [ServerHelloDone] │
├←────────────────────────────────────────────┤
│ │
│ 3. [Certificate] │
│ ClientKeyExchange │
│ [CertificateVerify] │
├────────────────────────────────────────────→│
│ │
│ 4. ChangeCipherSpec │
│ Finished │
├────────────────────────────────────────────→│
│ │
│ 5. ChangeCipherSpec │
│ Finished │
├←────────────────────────────────────────────┤
│ │
│ 6. Application Data (加密) │
├↔────────────────────────────────────────────↔│
TLS密钥交换算法
1. RSA密钥交换
传统密钥交换方法,使用服务器公钥加密预主密钥。
流程
- 服务器发送证书(包含RSA公钥)
- 客户端生成预主密钥
- 客户端用服务器公钥加密预主密钥
- 服务器用私钥解密获取预主密钥
- 双方从预主密钥生成主密钥
缺点
- 无前向安全:服务器私钥泄露导致历史会话可解密
- 计算开销大:RSA操作计算量大
2. Diffie-Hellman密钥交换
提供前向安全的密钥交换方法。
流程
- 服务器发送DH参数和签名
- 客户端验证签名
- 双方计算共享密钥
- 生成主密钥
优点
- 前向安全:长期密钥泄露不影响历史会话
- 计算效率高:椭圆曲线变体效率更高
3. 椭圆曲线密钥交换
基于椭圆曲线的Diffie-Hellman密钥交换。
类型
- ECDHE:椭圆曲线临时Diffie-Hellman
- ECDH:椭圆曲线Diffie-Hellman
优势
- 密钥长度小:相同安全强度下密钥更短
- 计算速度快:比传统DH更快
- 前向安全:提供前向安全
TLS加密套件
加密套件组成
加密套件格式:
密钥交换算法 + 认证算法 + 对称加密算法 + 哈希算法
示例:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
│ │ │ │ │ │
│ │ │ │ │ └─ SHA256哈希
│ │ │ │ └─ GCM模式的AES-128
│ │ │ └─ RSA认证
│ │ └─ ECDHE密钥交换
│ └─ TLS协议版本
└─ 完整套件名称
常见加密套件
TLS 1.3推荐套件
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
TLS 1.2推荐套件
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS证书
X.509证书结构
证书结构:
┌─────────────────┐
│ 版本 │
├─────────────────┤
│ 序列号 │
├─────────────────┤
│ 签名算法 │
├─────────────────┤
│ 颁发者 │
├─────────────────┤
│ 有效期 │
├─────────────────┤
│ 主题 │
├─────────────────┤
│ 公钥信息 │
├─────────────────┤
│ 扩展字段 │
├─────────────────┤
│ 签名 │
└─────────────────┘
证书验证
1. 证书链验证
终端证书 ←─ 中间证书 ←─ 根证书
2. 验证步骤
- 签名验证:验证上级证书签名
- 有效期检查:检查证书是否过期
- 吊销检查:检查证书是否被吊销
- 名称匹配:检查证书名称与主机名匹配
- 用途检查:检查证书用途是否匹配
证书类型
DV证书(域名验证)
- 验证方式:验证域名所有权
- 信任级别:低
- 申请周期:短
- 价格:低
OV证书(组织验证)
- 验证方式:验证组织身份和域名
- 信任级别:中
- 申请周期:中等
- 价格:中等
EV证书(扩展验证)
- 验证方式:严格验证组织身份
- 信任级别:高
- 申请周期:长
- 价格:高
- 特点:浏览器绿色地址栏
TLS配置最佳实践
1. 协议版本
# Nginx配置示例
ssl_protocols TLSv1.2 TLSv1.3;2. 加密套件
# 推荐的加密套件配置
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;3. 证书配置
# 证书和私钥
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# OCSP装订
ssl_stapling on;
ssl_stapling_verify on;
# 证书链
ssl_trusted_certificate /path/to/chain.pem;4. 安全增强
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 安全头部
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";TLS应用场景
1. HTTPS
HTTP over TLS,安全的Web通信。
https://example.com/
│ ↑
└── TLS加密隧道
2. 邮件安全
- SMTPS:SMTP over TLS
- IMAPS:IMAP over TLS
- POP3S:POP3 over TLS
3. 数据库安全
- MySQL SSL:MySQL over TLS
- PostgreSQL SSL:PostgreSQL over TLS
- MongoDB TLS:MongoDB over TLS
4. API安全
REST API over TLS,保护API通信安全。
TLS性能优化
1. 会话恢复
会话ID
服务器为每个会话分配ID,客户端重用会话。
会话票据
服务器加密会话状态,客户端重用票据。
# Nginx会话缓存配置
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;2. OCSP装订
服务器预获取OCSP响应,减少客户端验证延迟。
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/chain.pem;3. HTTP/2
多路复用减少连接数,提高性能。
listen 443 ssl http2;TLS安全威胁与防御
1. 中间人攻击
BEAST攻击
利用CBC模式漏洞的攻击。
防御:
- 使用RC4(已弃用)
- 使用TLS 1.2+
- 使用AEAD模式
POODLE攻击
利用SSL 3.0 CBC填充漏洞的攻击。
防御:
- 禁用SSL 3.0
- 使用TLS 1.0+
- 使用AEAD模式
2. 降级攻击
Logjam攻击
强制使用弱DH参数的攻击。
防御:
- 禁用弱DH参数
- 使用ECDHE
- 使用TLS 1.2+
3. 侧信道攻击
时序攻击
基于加密操作时间的攻击。
防御:
- 常数时间实现
- 添加随机延迟
- 使用抗侧信道算法
TLS未来发展趋势
1. TLS 1.3
主要改进
- 握手简化:减少握手轮次
- 强制前向安全:所有密钥交换都提供前向安全
- 0-RTT模式:零往返时间数据传输
- 加密套件简化:移除不安全算法
2. QUIC协议
基于UDP的传输协议,内置加密。
TCP + TLS → QUIC (内置加密)
3. 后量子TLS
支持后量子密码算法的TLS。
🔗 相关链接
最后更新:2025-01-26 维护规范:详见 笔记规范文档