物联网<->云通信方式

物联网 MQTT 安全
2021-06-27 09:11:23

我正在努力创建将通过云服务器控制的多个 IoT 设备(类似 NanoPi)。我希望使用 MQTT,因为我认为这是小规模的最佳方法。我知道 MQTT 有证书、密码等。但我不知道如何在设备和云之间实现安全的一对一通信。我可能会为每台设备创建一个频道,但恐怕任何可以实际访问该设备的人都可以加入任何其他频道。我会手动创建频道并为它们分配用户+通行证,但是为多个设备这样做会浪费时间。所以我坚持两个方面:

  1. 设备 <-> 云数据协议的最佳实现。基于 TLS 的 MQTT 会好吗?
  2. 如何自动限制设备仅使用一个频道?就像每个设备都会使用自己的 ID 在云中注册自己,并将使用此 ID 作为通道。但是如何防止流氓攻击者加入任何其他频道呢?
1个回答

由于评论中提到的原因,我将忽略您的第一个问题。

至于第二个。MQTT 消息发布到主题(而不是通道),几乎所有 MQTT 代理都允许您配置访问控制列表 (ACL),从而允许您控制每个用户可以发布和订阅哪些主题。

通过正确设置 ACL,客户端将只能将数据发布到特定主题,并在需要时订阅用于向该用户设备发送命令的特定主题。

大多数代理还允许在 ACL 中进行替换,因此您可以设置与任何用户匹配的模板条目。例如,对于 mosquitto,您可以使用 %u 匹配用户名,使用 %c 匹配客户端 ID,因此主题模式可能如下所示:

写 %u/data/# 读 %u/command/#

这将让用户只发布到以他们的用户名开头的/data/...主题,然后订阅[username]/command/...开头的主题

作为发布/订阅协议,MQTT 有时被认为是一种广播媒体,例如一个发布者对许多订阅者,但是没有什么可以说您不能使用只有中央控制器发布到并且只有一个设备订阅的主题才能获得1 对 1 消息。在新的 MQTT v5 规范中,甚至还有回复消息的概念,因此您可以专门进行请求/响应类型的消息传递。