我们正在开发一个基于 Mosquitto 代理的 POC,其中使用了 3 个不同的 MQTT 客户端,即 C、Python 和 phpMQTT,我们需要在这些客户端之间传递消息。但是 phpMQTT 客户端没有实现 SSL/TLS,这限制了我们为整个解决方案启用 SSL。
如果我的 C 和 Python 客户端连接到安全端口上的代理,即 8883(启用 TLS 选项)和端口 1883(没有 TLS 选项)上的 phpMQTT 客户端,是否有任何方法可以在这三个客户端之间进行通信?
Mosquitto 允许您监听任意数量的端口。您可以决定是否在每个侦听器上支持 TLS。例如,您可以将端口 1883 用于未加密的连接,端口 8883 用于基于常规证书的 TLS,端口 8884 用于基于证书的 TLS,需要客户端传递有效证书,端口 8885 用于基于 TLS-PSK 的加密。
除了使用中的加密之外,连接到代理的客户端的交互方式与正常情况完全相同。
我不确定 mosquitto 是否能够在两个不同的端口上启动。您可以尝试使用 HiveMQ 执行此操作,它支持所谓的“混合模式”( http://www.hivemq.com/docs/hivemq/1.4.1/#hybrid-mode-chapter ) 这种混合模式让您可以连接在任何端口(如 1883)上没有 TLS,在另一个端口(如 8883)上没有 TLS。
我不确定您为什么使用 phpMQTT,但是 websockets 是否适合您?HiveMQ 支持开箱即用的安全 websocket,因此您可以尝试一下。有关如何执行此操作的博客文章可在此处获得:http ://www.hivemq.com/build-javascript-mqtt-web-application/
免责声明:我是 HiveMQ 的开发者之一