我有一台运行Mosquitto的服务器,在该服务器上激活了websocket侦听器。一切正常,我可以从Angular应用程序订阅/发布。我没有从Mosquitto激活SSL,但是我使用Nginx做了反向代理,有效地加密了websocket。我无法通过ws
访问,只能通过wss
访问。
现在,最佳做法是将与Websocket的连接限制为仅通过身份验证的用户?启用到外部的位置将使MQTT服务器加密,但对所有人可用。有没有一种方法可以将连接限制为仅通过身份验证的用户,如果可以,如何?
SSL / TLS提供两个功能:
首先,它验证客户端连接到的服务器。这使客户端知道与其连接的服务器可以访问客户端所在域的加密证书,这意味着您很有可能是在与正确的服务器通信,而不是恶意冒名顶替者。
第二,它防止第三方窃听连接。有权访问网络数据的恶意程序将无法解码客户端与服务器之间的通信,也无法对其进行篡改。
它不以任何方式对客户端进行身份验证。
因此,使用您描述的设置,如果我找到了Mosquitto经纪人,我可以连接到网络套接字并订阅我想要的任何主题,或者发布到我想要的任何主题,因为您描述的设置没有控制谁可以连接经纪人,以及他们一旦连接后可以做什么。
从安全角度看,这几乎是最差的做法]。
Mosquitto提供了两种用于验证客户端身份的机制:
首先,您可以为客户端创建用户名和密码。最佳做法是为每个不同的潜在客户创建唯一的用户名和密码。 Mosquitto提供了一个API,该API允许您使用各种不同的存储库来存储凭据,从简单的文本文件到完善的关系数据库(如Postgresql)。
第二,您可以创建将唯一标识客户端的客户端证书。
这些允许您authenticate
客户端访问代理。根据您通过MQTT代理构建的pubsub网络的复杂性,您还应该考虑将访问权限限制为仅对每个客户端所需的主题。
这使您可以授权
客户端执行特定的工作。[Mosquitto's documentation讨论如何认证和授权客户端。