在使用智能手机网关的同时使用 TLS 创建安全的 MQTT 会话

物联网 MQTT 安全 tls
2021-06-12 09:47:10

我的 IoT 设备与智能手机建立了 BLE 连接,并通过该连接连接到云。集成 TLS 时,它应该在 MQTT 之上还是之下?到目前为止,我所审查的所有实现都在 MQTT 层之下。

多于:

TLS 握手和记录消息被放入 MQTT 有效负载并通过 BLE 发送到电话,然后通过 TCP/IP 将其转发到云端。智能手机只是转发 MQTT 数据包,并不知道其内容。

以下:

在设备和云之间建立第一个 TLS 会话。第一种方法是让设备创建一个 IP 数据包,并通过 BLE 将其发送到智能手机以转发到云端。只有当 TLS 建立后,才开始通过这个 TLS 会话发送 MQTT。在我查阅文献时,这是更常见的方法。但这会添加更多代码来处理创建 IP 数据包。

1个回答

您永远不会运行通过 MQTT 隧道传输的 TLS 会话。TLS 连接期望通过单个双向管道进行通信,虽然可以通过 MQTT 构建它,但它更适合 1 到 N *订阅者发布的数据。

*(其中 N 可以是 0 到无穷大)

只需在 TLS 上运行 MQTT,因为几乎所有 MQTT 代理都开箱即用地支持此功能。如果您还想对有效负载进行加密,那么这完全取决于您(如果您使用的是不支持主题级别 ACL 以防止其他用户订阅您的主题的共享代理)。

其次,不要尝试从设备通过手机到云端运行端到端的 MQTT 会话。从手机设置 MQTT 连接,然后通过 BLE 转发数据。BLE 具有内置加密功能,但您始终可以在将数据发送到手机之前对其进行加密(上一段中描述的选项的变体)