裸连 MQTT 的风险

很多人上手 MQTT 时,Broker 一开、匿名可连、明文端口对外,跑通就上线了。这在演示项目里没问题,但生产环境里等于把门敞开:任何人都能连上来、订阅别人的主题、伪造数据。MQTT 安全就是把这扇门按设备、按主题、按权限重新关上。

生产环境三条底线:禁匿名、必加密、按主题限权。
三类典型漏洞
  • 匿名接入随便谁都能连。
  • 明文传输报文可被窃听篡改。
  • 越权订阅一台设备能读所有主题。
MQTT 安全配图:中央发光盾牌轮廓,盾牌上方连接多个小型设备徽章节点,节点之间用光链环绕
盾牌居中,设备节点围绕它用光链彼此相连。

认证:一机一密

先关掉匿名登录。每台设备用一个独立的 ClientId 和用户名密码(或证书)接入。Broker 端对接设备台账:只有登记过的设备才放行。这样即使某台设备密钥泄露,影响面也只在它自己,不是整网。

TLS 加密传输

认证解决「你是谁」,TLS 解决「别人偷看不到」。把 1883 明文端口关掉,统一走 8883 的 TLS。设备端内置 Broker 根证书,握手时校验服务端身份,防止连到伪造的 Broker。

// 连接伪代码(paho)
connect = {
  host: "mqtt.example.com", port: 8883,
  tls: true,
  username: deviceId, password: secret
};

ACL 主题权限

认证之后还要限「能读什么、能写什么」。用主题做命名空间,比如 device/{设备ID}/up 只能由这台设备发布,device/{设备ID}/down 只能由它订阅。ACL 规则按 ClientId 匹配,一台设备绝不能订别人的上行主题。

设备生命周期管理

设备从注册、激活、在线到吊销,都要在台账里有状态。新设备首次接入时做「激活」动作绑定归属用户;设备换机、丢失时,平台要能远程吊销它的密钥,让它立刻连不上。

管理四步
  • 注册产线烧入身份并入台账。
  • 激活首次接入绑定用户。
  • 在线心跳保活与监控。
  • 吊销异常设备立即拉黑。