跳转到内容

TLS/SSL 加密概述

TLS/SSL 加密概述

本节介绍 TLS/SSL 加密协议的核心概念和工作原理,以及它在 MQTT 安全通信中的作用。学习完成后,您将能够:

  • 理解 TLS 握手过程
  • 解释 TLS 如何保护 MQTT 通信
  • 区分 TLS 和 SSL 的区别
  • 解释 TLS 加密的基本原理

在开始本节之前,请确保:

  • 理解 MQTT 安全挑战
  • 了解公钥基础设施(PKI)基本概念
  • 了解证书和加密的基本概念
版本发布时间状态说明
SSL 1.01994❌ 未发布存在安全缺陷
SSL 2.01995❌ 已弃用严重安全漏洞
SSL 3.01996❌ 已弃用POODLE 攻击
TLS 1.01999❌ 已弃用(RFC 8996)SSL 3.0 升级版
TLS 1.12006❌ 已弃用安全增强
TLS 1.22008✅ 推荐当前广泛使用
TLS 1.32018✅ 推荐最新标准,更快更安全

注意:虽然常统称为 “SSL”,现代系统实际使用的是 TLS。ESP32 支持 TLS 1.2 和 TLS 1.3。

客户端 (ESP32) 服务器 (MQTT Broker)
│ │
│ ─── ClientHello ──────────► │
│ (支持的 TLS 版本、加密套件) │
│ │
│ ◄── ServerHello ────────── │
│ (选定的 TLS 版本、加密套件) │
│ │
│ ◄── Certificate ────────── │
│ (服务器证书 + 中间证书) │
│ │
│ ◄── ServerHelloDone ────── │
│ │
│ ─── ClientKeyExchange ────► │
│ (生成预主密钥,用公钥加密) │
│ │
│ ─── ChangeCipherSpec ─────► │
│ (通知切换到加密通信) │
│ │
│ ─── Finished ─────────────► │
│ (加密的握手完成消息) │
│ │
│ ◄── ChangeCipherSpec ───── │
│ ◄── Finished ───────────── │
│ │
│ ═══ 加密通信开始 ══════════► │
│ (所有数据使用会话密钥加密) │
阶段作用关键信息
Hello协商参数TLS 版本、加密套件、随机数
证书交换身份验证服务器证书(包含公钥)
密钥交换生成共享密钥客户端用服务器公钥加密预主密钥
会话密钥建立加密通道双方使用主密钥派生对称加密密钥
确认验证完成加密传输握手确认消息
┌────────────────────────────────────────┐
│ 根证书 (Root CA) │
│ Let's Encrypt Authority X3 │
│ (自签名,嵌入在浏览器/操作系统中) │
└────────────────┬───────────────────────┘
│ 签名
┌────────────────▼───────────────────────┐
│ 中间证书 (Intermediate CA) │
│ Let's Encrypt R3 │
│ (由根证书签名) │
└────────────────┬───────────────────────┘
│ 签名
┌────────────────▼───────────────────────┐
│ 服务器证书 (Server Cert) │
│ *.example.com / mqtt.example.com │
│ (由中间证书签名,包含域名和公钥) │
└────────────────────────────────────────┘
文件格式内容角色
cert.pemPEM服务器证书公开,发给客户端
privkey.pemPEM服务器私钥机密,仅服务器持有
chain.pemPEM中间证书链公开,辅助客户端验证
fullchain.pemPEM服务器 + 中间证书服务器配置用
ca_cert.pemPEM根证书客户端预置,验证服务器
标准 MQTT: mqtt://broker.example.com:1883 (明文)
MQTT over TLS: mqtts://broker.example.com:8883 (加密)

TLS 对 MQTT 的保护

MQTT 数据未加密TLS 加密
CONNECT 用户名明文可见加密隐藏
CONNECT 密码明文可见加密隐藏
PUBLISH 消息体明文可见加密隐藏
SUBSCRIBE Topic明文可见加密隐藏
客户端 ID明文可见加密隐藏
消息 Topic明文可见加密隐藏
功能支持情况
TLS 1.2✅ 完整支持
TLS 1.3✅ 支持 (ESP-IDF v4.4+)
加密套件AES、CHACHA20、ECDHE
证书验证✅ 支持
客户端证书✅ 支持
PSK✅ 支持(预共享密钥)
特性对称加密(AES)非对称加密(RSA/ECC)
密钥同一密钥用于加密和解密公钥加密,私钥解密
速度🔥 快🐢 慢
用途加密实际数据交换对称密钥、数字签名
密钥长度128/256 位2048/4096 位(RSA)或 256 位(ECC)
在 TLS 中的角色批量数据加密握手阶段的密钥交换
买家问题简化回答
”TLS 是什么?""就像给您的数据加了一个加密信封,只有接收方可以打开"
"需要额外硬件吗?""不需要,ESP32 本身就支持 TLS 加密,软件配置即可"
"会变慢吗?""首次连接需要 1-3 秒握个手,之后传输几乎不影响速度"
"需要付费吗?""Let’s Encrypt 提供免费证书,不需要付费”

本节介绍了 TLS 加密的基础知识:

  1. TLS vs SSL:现代系统使用 TLS,TLS 1.2 和 1.3 是推荐版本
  2. 握手过程:协商参数 → 证书交换 → 密钥交换 → 加密通信
  3. 证书链:根 CA → 中间 CA → 服务器证书的信任链条
  4. MQTTS:MQTT over TLS 使用 8883 端口,加密所有消息内容
  5. ESP32 支持:完整支持 TLS 1.2/1.3,硬件无需额外成本