【问题标题】:How to get messages published from a client connected to broker on different ports如何获取从连接到不同端口上的代理的客户端发布的消息
【发布时间】:2013-11-03 08:03:48
【问题描述】:

我们正在开发一个基于 Mosquitto 代理的 POC,其中使用了 3 个不同的 MQTT 客户端,即 C、Python 和 phpMQTT,我们需要在这些客户端之间传递消息。但是 phpMQTT 客户端没有实现 SSL/TLS,这限制了我们为整个解决方案启用 SSL。

如果我的 C 和 Python 客户端通过安全端口(即 8883(启用 TLS 选项)和我的 phpMQTT 客户端在端口 1883(不带 TLS 选项)上连接到代理),是否有任何方法可以在这三个客户端之间进行通信?

【问题讨论】:

    标签: php mqtt mosquitto phpmqtt


    【解决方案1】:

    Mosquitto 允许您监听任意数量的端口。您可以决定是否在每个侦听器上支持 TLS。例如,您可以将端口 1883 用于未加密的连接,将端口 8883 用于基于常规证书的 TLS,将端口 8884 用于基于证书的 TLS(需要客户端传递有效证书)和端口 8885 用于基于 TLS-PSK 的加密。

    除了使用的加密之外,连接到代理的客户端的交互方式与正常情况完全相同。

    【讨论】:

    • 谢谢罗杰。这是否意味着(3)如果 1)我的 php 客户端通过端口 1883(不带 TLS)连接 2)同时我的 C 和 Python 客户端通过端口 8883(带 TLS)连接 3)我的 C/Python 客户端将能够订阅从我的 php 客户端发布的消息,反之亦然?
    • 由于某种原因它对我不起作用。我只能订阅在同一端口上发布的消息。如果它的设计是这样(如上所述),那么我可能做错了,不确定。
    • 在 test.mosquitto.org 上尝试 1883 和 8883。您可以通过test.mosquitto.org 获取 CA 文件。如果可行,您就知道它最终无法正常工作。
    【解决方案2】:

    我不确定 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 的开发者之一

    【讨论】:

    • 谢谢多米尼克。我们选择 PHP MQTT 客户端而不是 JS 客户端有两个原因(防火墙和安全)。 1) JS 将在浏览器上执行,如果我在公司网络上,那么防火墙可能会阻止我发布消息。 2)如果我们使用凭证来连接代理,那么其他人可以很容易地从 JS 中获取它。
    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 2016-06-23
    相关资源
    最近更新 更多