我想了解在通过 websockets 向浏览器显示 MQTT 代理时保护 Mosquitto 的最佳方法。根据 this blog post ,我目前正在将 Lighttpd 用于 websocket 层。
我的用例是单向的。我只需要向浏览器发送消息。因此,我可以使用 ACL 来防止不法分子发布消息。
但是我怎样才能阻止不法分子订阅,或者更好的是,首先建立联系?
我知道我可以为 MQTT 连接使用 ID/pw。因此,我想我的应用服务器可以在用户对自己进行身份验证后将凭据发送到浏览器,然后 Javascript 客户端可以使用这些凭据来建立 MQTT/WS 连接。但是,如果我有数千个客户,我该如何管理 ID 和密码?还是我应该只拥有一些 ID 并定期回收它们?我应该按照 mosquitto-auth-plug 将这一点交给 Redis 或类似的吗?
我想知道是否有更好的方法,通过保护网络服务器层内的连接。 Lighttpd 的 mod_secdownload 插件似乎提供了一个模型,可以根据共享 secret (保留在服务器端)和时间戳的哈希值动态生成 URL。用户通过身份验证后,应用程序服务器将向下传递此 URL,然后客户端将使用它来建立与 MQTT 代理的连接。一段时间后,URL 将过期,Javascript 客户端可以捕获此异常,如果用户仍通过身份验证,则可以请求新的 WS 连接 URL。这类似于许多 API 身份验证的模式。它在这里有什么值(value)吗?
有没有更好的方法?
谢谢,J。
最佳答案
现在您可以使用 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/
关于security - 如何通过 websockets 保护 MQTT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24488512/