TLS/SSL 基础原理:对称加密与非对称加密、数字证书、CA 机构、TLS 握手过程详解
在配置 ThingsBoard 的 HTTPS 之前,必须理解 TLS/SSL 协议的核心机制。TLS(传输层安全协议)是 HTTPS 的安全基石,它通过混合加密体系、数字证书和握手流程,解决互联网通信中的机密性、完整性和身份验证三大问题。
2.1 对称加密与非对称加密
TLS 并非只使用一种加密算法,而是结合了对称加密与非对称加密的优点,形成“混合加密”方案。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 加密和解密使用同一个密钥 | 使用一对密钥:公钥(公开)和私钥(保密) |
| 计算速度 | 非常快,适合大量数据加密 | 慢(比对称加密慢 100~1000 倍) |
| 典型算法 | AES、ChaCha20、3DES | RSA、ECDSA、Ed25519 |
| 密钥分发 | 需要安全的带外信道传递密钥 | 公钥可公开传输,私钥本地保管 |
| TLS 中的角色 | 加密实际的 HTTP 数据(会话数据) | 加密传输对称密钥(密钥交换) |
关键理解: 非对称加密用于握手阶段安全地交换对称密钥,后续所有应用数据使用对称加密传输。这种设计既保证了密钥分发的安全性,又兼顾了大数据量加密的性能。
2.2 数字证书与 CA 机构
非对称加密解决了密钥分发问题,但带来了新的挑战:你拿到的公钥真的是服务器的公钥吗? 数字证书和 CA(证书颁发机构)正是为了解决这个身份验证问题而存在。
数字证书的核心内容
一个 X.509 数字证书包含以下关键字段:
- 主体(Subject):证书持有者的身份信息,如域名(CN=thingsboard.example.com)
- 公钥:服务器或客户端的公钥值
- 颁发者(Issuer):签发该证书的 CA 机构名称
- 有效期:证书的生效和过期时间
- 签名:CA 使用自己的私钥对证书内容生成的数字签名
- 序列号:CA 为该证书分配的唯一编号
CA 机构的信任链
CA 是受信任的第三方机构,负责验证申请者的身份并签发证书。浏览器和操作系统内置了受信任的根 CA 列表。验证流程如下:
- 服务器在 TLS 握手时发送自己的证书(叶子证书)。
- 客户端检查证书的颁发者,找到对应的中间 CA 证书。
- 逐级向上验证,直到根 CA 证书(自签名,受信任锚点)。
- 使用上级 CA 的公钥验证下级证书的数字签名。
- 验证域名、有效期、是否被吊销。
ThingsBoard 实践提示: 生产环境建议使用 Let's Encrypt 等公共 CA 签发的证书,客户端自动信任。开发或内网环境可使用自签名证书,但需要在每个客户端手动导入信任。
2.3 TLS 握手过程详解
TLS 握手是客户端和服务器在传输任何应用数据之前,协商加密参数、验证身份并生成会话密钥的过程。以最常用的 TLS 1.3 为例,握手流程大幅简化,只需 1 个往返(1-RTT)。
TLS 1.3 握手步骤
- ClientHello:客户端发送支持的 TLS 版本、密码套件列表、随机数(client_random)和密钥交换参数(如 ECDHE 公钥)。
- ServerHello + 证书:服务器选择 TLS 版本和密码套件,发送自己的随机数(server_random)、密钥交换参数、证书链和数字签名。
- 密钥计算:双方使用 ECDHE 密钥交换算法,结合 client_random 和 server_random,独立计算出相同的会话密钥。
- Finished 消息:双方发送加密的 Finished 消息,包含之前所有握手消息的摘要,用于验证握手未被篡改。
- 安全通道建立:握手完成,开始使用对称密钥加密应用数据。
重要安全概念: 前向安全性(Forward Secrecy)—— 即使服务器私钥泄露,攻击者也无法解密之前记录的 TLS 会话数据。TLS 1.3 强制使用 ECDHE 密钥交换,确保前向安全。ThingsBoard 配置 HTTPS 时,应优先选择支持 ECDHE 的密码套件。
2.4 密码套件与算法选择
密码套件(Cipher Suite)是一组算法的组合,决定了 TLS 握手和加密的具体实现方式。一个典型的密码套件名称如 TLS_AES_128_GCM_SHA256 包含:
- 密钥交换算法:TLS 1.3 中由协商机制决定,通常为 ECDHE
- 认证算法:ECDSA 或 RSA 签名
- 对称加密算法:AES-128-GCM 或 ChaCha20-Poly1305
- 哈希算法:SHA256 或 SHA384
ThingsBoard 推荐配置: 在 ThingsBoard 的 JVM 参数或反向代理(Nginx)中,优先启用以下密码套件:
TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256。禁用 RC4、3DES、CBC 模式等不安全算法。