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密钥交换

传统密钥交换方法,使用服务器公钥加密预主密钥。

流程

  1. 服务器发送证书(包含RSA公钥)
  2. 客户端生成预主密钥
  3. 客户端用服务器公钥加密预主密钥
  4. 服务器用私钥解密获取预主密钥
  5. 双方从预主密钥生成主密钥

缺点

  • 无前向安全:服务器私钥泄露导致历史会话可解密
  • 计算开销大:RSA操作计算量大

2. Diffie-Hellman密钥交换

提供前向安全的密钥交换方法。

流程

  1. 服务器发送DH参数和签名
  2. 客户端验证签名
  3. 双方计算共享密钥
  4. 生成主密钥

优点

  • 前向安全:长期密钥泄露不影响历史会话
  • 计算效率高:椭圆曲线变体效率更高

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. 验证步骤

  1. 签名验证:验证上级证书签名
  2. 有效期检查:检查证书是否过期
  3. 吊销检查:检查证书是否被吊销
  4. 名称匹配:检查证书名称与主机名匹配
  5. 用途检查:检查证书用途是否匹配

证书类型

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 维护规范:详见 笔记规范文档

TLS HTTPS 加密 证书 前向安全