MQTT安全 – 如何防止滥用者订阅主题?

我已经为MQTT设置了所有设置和工作。 我正在使用IBM wmqtt.jar和Mosquitto经纪人..

My Java Servlet为代理创建MQTTConnection,并在“AndroidDeviceID / myAppName”主题下发布。

Android客户端订阅相同的主题…

在我看来,如果有人知道我的用户的设备名称,他们可以创建一个简单的Android应用程序并在我的MQTT代理上订阅该主题。 然后他们从我的用户那里获得所有通知(在本例中为即时消息消息)。

如何正确避免这种情况?

Mosquitto通过用户名和密码身份validation提供安全性,并限制对具有访问控制列表的主题的访问。 mosquitto.conf手册页中有详细信息: http ://mosquitto.org/man/mosquitto-conf-5.html

ACL是限制订阅主题的客户端,我使用auth-plugin这样做,这里是链接mosquitto auth插件

通常,MQTT保持安全性非常“轻”,因为它最初设计用于封闭传感器网络。 由代理实现提供例如SSL并决定如何处理用户名/密码后端。

协议本身不可能提供消息数据的加密,并且如果这是关键的话,通常在应用层完成。

如果您需要更自定义的方式来处理访问控制和主题权限,请尝试使用HiveMQ MQTT代理。 就像在文档中解释的那样,您可以使用插件实现自己的行为。 这种方法允许您完全决定如何处理客户端,发布和订阅的身份validation和授权[1]。 如果您有兴趣,可以在此处描述开始使用自己的插件的最佳方式[2]。

顺便说一句,为HiveMQ配置TLS也很容易[3]。

Christian(HiveMQ团队)

[1] http://www.hivemq.com/docs/plugins/1.5.0/#auth-permission-chapter

[2] http://www.hivemq.com/documentations/getting-started-plugins/

[3] http://www.hivemq.com/docs/hivemq/1.5.0/#hivemqdocs_ssl_tls