如何通过websockets保护MQTT

时间:2014-06-30 10:55:35

标签: security authentication lighttpd mqtt mosquitto

我想了解在通过websockets将MQTT代理映射到浏览器时保护Mosquitto的最佳方法。我目前正在使用Lighttpd作为websocket图层,按照this blog post

我的用例是单向的。我只需要向浏览器发送消息。因此,我可以使用ACL来防止恶意分子发布消息。

但是我怎样才能阻止歹徒订阅,或者更好的是,首先建立连接?

我知道我可以使用ID / pw进行MQTT连接。所以,我猜我的应用服务器可以在用户自己验证后将凭据发送到浏览器,然后Javascript客户端可以使用这些凭据来建立MQTT / WS连接。但是,如果我有数千个客户端,我该如何管理ID和密码?或者我应该只有一些ID并定期回收它们?我应该根据mosquitto-auth-plug

将此位移至Redis或类似位置

通过保护网络服务器层内的连接,我想知道是否有更好的方法。 Lighttpd的mod_secdownload插件似乎提供了一个模型,可以根据共享密钥(保留服务器端)和时间戳的哈希动态生成URL。用户通过身份验证后,应用服务器将向下传递此URL,然后客户端将使用它来建立到MQTT代理的连接。过了一会儿,URL将过期,Javascript客户端可以捕获此异常,如果用户仍然经过身份验证,则可以请求新的WS连接URL。这与许多API身份验证类似。它有什么价值吗?

有更好的方法吗?

谢谢,J。

1 个答案:

答案 0 :(得分:7)

现在你可以使用libwebsockets支持构建mosquitto,然后为TLS支持创建X.509证书,而不是Lighttpd方法。

在jpmens的博客文章中,您可以找到一步一步的程序,还可以找到通过Websockets连接Mosquitto代理的Paho MQTT JavaScript客户端。 http://jpmens.net/2014/07/03/the-mosquitto-mqtt-broker-gets-websockets-support/