本节摘要:MQTT 本身不带加密,安全要靠 TLS、认证与访问控制来补。本节讲清楚为什么裸 MQTT 危险、TLS 双向认证怎么搭、ACL 如何限定主题权限,并给出生产部署的安全基线。承接 3.4 会话语义,通往第 7 章全面的物联网安全加固。
MQTT 很务实,它把"保密"和"身份"这两件事交给了 TLS 与认证,自己专心做转发。这节就把生产环境里最基本的四道锁逐层安上:传输加密、设备认证、授权控制、发布审计。
裸 MQTT 走 1883 端口,用明文传消息。任何人只要在链路上嗅探,就能看到主题与载荷——这对遥测数据也许只算隐私泄露,对控制指令则是灾难。所以第一原则是:生产环境一律走加密端口 8883(TLS)或 8884(TLS+证书认证),1883 只留内部封闭网络。
TLS 给 MQTT 会话套上一层加密隧道,防止数据在途中被篡改与偷看。服务端要配置证书与私钥,客户端校验服务端证书的合法性。两端握手完成后,数据即以对称密钥加密流动。
仅单向 TLS 只能保证"对方确实是那个 Broker",却挡不住"别家设备的冒名顶替"。物联网还要设备认证:一是用户名/密码(轻量,便于按设备分发账号);二是客户端证书双向认证(每个设备持有自己的证书,Broker 校验设备证书与根 CA 的关系)。量产设备多用后者,实现"设备身份即证书"。
# 生产加固清单(可按 Broker 文档对应配置) listener 8883 tls cafile /etc/ca/root-ca.crt # 客户端证书的签发机构 certfile /etc/mqtt/server.crt keyfile /etc/mqtt/server.key require_certificate true # 强制客户端证书,双向认证 use_identity_as_username true # 以证书 CN 作为该设备身份
身份认证完成只是"进门",真正防内部越权的是授权(Authorize)——用访问控制表(ACL)限定某个设备能读写哪些主题。设备只应有"上报自己话题、订阅指定下发话题"的最小权限,绝不能放开到 # 全局通配。
| 设备 | 允许发布 | 允许订阅 | 说明 |
|---|---|---|---|
| 温度传感器 | devices/sensor_01/+/data |
devices/sensor_01/+/cmd |
只碰自己那台 |
| 看板服务 | 无 | devices/+/+/data |
可看全部上报 |
| 管理控制台 | devices/+/+/cmd |
管理话题 | 只准下发 |
⚠️ 常见坑:ACL 写得过宽(比如每个设备都给
#),等于没做隔离——一旦一台设备被攻破,攻击者就能读写全厂。按设备子树隔离,成本不高收益巨大。
最后补一层"看得见":对关键主题(控制、告警)开审计日志,记录谁、何时、对哪个主题做了什么。出了问题能回溯到设备与时间点,这是事后追责与合规的底气。
TLS 双向认证 + 证书管理会给量产带来密钥注入与轮换的成本,所以工程上常按风险分档:对敏感控制与私有数据,强制 TLS 与双向认证;对纯公开遥测,可放宽到列名认证。理论上"全上最强"当然稳,但每加一层密钥管理,运维复杂度也加一分——要在安全冗余与可运维之间做主动取舍,而不是无脑拉满。
💡 关键直觉:安全不是一件配置,而是一串从"传输→身份→授权→审计"层层后手的链。很多人配了 TLS 就觉得安全了,结果 ACL 没做、设备照样互相越权。链路里任何一环掉链,前面都白做。
生产排查里最常见的困惑是这几个端口长得像、用途却不同。先把它理顺(下表基于 MQTT 常见部署约定,具体请以你的 Broker 配置为准):
| 端口 | 是否加密 | 是否校验证书 | 典型用途 |
|---|---|---|---|
| 1883 | 否(明文) | 否 | 仅限内网/调试,严禁跨公网 |
| 8883 | TLS 加密 | 单向校验服务端证书 | 公网对外读写(最常见) |
| 8884 | TLS + 客户端证书 | 双向认证 | 高安全即虚拟化设备接入 |
看到表就该明白,选端口不是"挑个号",而是在选"这道门要开多牢"。若你的设备都要做证书双向认证,就统一走 8884;若只是云端与某些可信客户端通讯,8883 单向 TLS 配合账号密码往往够用。把端口意图画清楚,运维时少踩很多坑。
双向认证的一个现实负担是证书的生命周期:证书有有效期,到了就得换;出厂设备若写死证书,到期没得更新就成了死设备。所以生产实践中通常配套一条"证书自动轮换"通道——设备定期间隔向授权服务领取新证书,Broker 通过 CRL(吊销列表)或最新版证书判断过期与吊销。线上排障若发现"某个设备突然连不上",别先怀疑网络,先查它的证书是不是到期、是否被吊销——这条线索在量产的物联网里极其常见。
面对一家从零起步的团队,我一般建议按"先保底、后加固"的次序一步步推进:
# 全局通配。这套顺序的价值在于:哪怕时间和人手有限,也先把最容易裸奔的明文通道封住,再逐步把身份与授权补翔实,不会出现"忙了半天却连最基本的加密都没做"的尴尬。
汇总一句落地点:MQTT 安全不是某个开关,而是端口、证书、ACL、审计四道各有分寸的后手。 哪一环松了,攻击者就钻哪一环;把每一环的"默认收紧"做好,才算真正把生产安全架起来。
# 的越权。MQTT 的各个侧面都摸完了,3.6 用一个完整的遥测控制系统把整章组装起来。