gpt4 book ai didi

authentication - Mosquitto websockets 安全最佳实践

转载 作者:行者123 更新时间:2023-12-04 12:40:50 25 4
gpt4 key购买 nike

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

现在将 websocket 连接限制为仅经过身份验证的用户的最佳做法是什么?启用外部世界的位置将使 MQTT 服务器加密,但对所有人可用。有没有一种方法可以将连接限制为仅经过身份验证的用户,如果是这样,怎么做?

编辑

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

最佳答案

SSL/TLS 提供两个功能:

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

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

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

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

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

Mosquitto 提供了两种验证客户端的机制:

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

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

这些允许您验证客户端以访问代理。

根据您在 MQTT 代理上构建的 pubsub 网络的复杂性,您还应该考虑限制对每个客户端所需主题的访问。

这允许您授权客户做特定的工作。

Mosquitto's documentation讨论如何对客户端进行身份验证和授权。

关于authentication - Mosquitto websockets 安全最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59216537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com