Mosquitto websockets security best practice



我有一个正在运行的Mosquitto服务器,我在其上激活了websocket监听器。一切正常,我可以从 Angular 应用程序订阅/发布。我没有从Mosquitto激活SSL,但我使用Nginx进行了反向代理,有效地加密了websocket。我无法通过ws访问,只能通过wss

现在,将仅经过身份验证的用户连接到 websocket 的最佳实践是什么?向外界启用该位置将使 MQTT 服务器加密,但可供所有人使用。有没有办法将连接限制为仅经过身份验证的用户,如果是,如何?

编辑

多亏了 @john-romkey 的澄清,我现在可以在 Mosquitto 端激活身份验证,并启用一个用户,该用户将限制为 Web 客户端所需的操作。该文档还提到了身份验证插件,所以我想知道是否有任何基于令牌的身份验证插件可以消除将用户/通行证传递到前端的需要。

SSL/TLS 提供两个功能:

首先,它对客户端连接到的服务器进行身份验证。这让客户端知道它连接到的服务器可以访问客户端域的加密证书,这意味着您很有可能正在与正确的服务器通信,而不是恶意冒名顶替者。

其次,它可以防止第三方窃听连接。有权访问网络数据的恶意程序将无法解码客户端和服务器之间的通信,也无法篡改它。

它不以任何方式对客户端进行身份验证。

因此,使用您描述的设置,如果我找到您的 Mosquitto 代理,我可以连接到 websocket 并订阅我想要的任何主题或发布到我想要的任何主题,因为您描述的设置不会控制谁可以连接到代理以及他们在连接后可以做什么。

从安全角度来看,这几乎是最糟糕的做法

Mosquitto 提供了两种对客户端进行身份验证的机制:

首先,您可以为客户端创建用户名和密码。最佳做法是为每个不同的潜在客户创建唯一的用户名和密码。Mosquitto提供了一个API,允许您使用各种不同的凭据存储,从简单的文本文件到成熟的关系数据库,如Postgresql。

其次,您可以创建一个客户端证书,该证书将唯一标识客户端。

这些允许您对客户端进行身份验证以访问代理。

根据您通过 MQTT 代理构建的 pub 子网的复杂性,您还应考虑将访问限制为每个客户端所需的主题。

这允许您授权客户端执行特定工作。

Mosquitto 的文档讨论了如何对客户端进行身份验证和授权。

最新更新