MQTT代理服务器支持TLS和JWT

4
我们目前正在进行一项数据备份项目。我们将自己的硬件运送给工业客户。然后,这些硬件将读取客户想要备份的所有相关数据,并使用MQTT(Node.js客户端和Mosca MQTT代理程序)将它们发送到云服务器。
现在我的问题是:
  • 是否有免费的TLS证书可用于我的MQTT连接?我找到的唯一需要域名的证书。
  • 为了增加安全性,我们使用JWT。不过我们没有任何数据库。该令牌将作为MQTT密码参数传递。是否有更好的替代方案?
3个回答

3

即使私有证书没有公开,自签名的TLS证书是否是不良实践? 它只会被嵌入到我们的硬件和经过验证的客户端中。

当然,这是不良实践(非常不良的实践)。从适当的CA机构获取证书,除非你想让你的公司因安全漏洞而在诉讼中败诉。


2
  • 有没有免费的TLS证书可以用于我的MQTT连接?我找到的唯一需要域名的。

证书“证明”信息是由特定实体提供的,其中实体定义为“域名”。

要求不带域名回溯的TLS证书就像要求在没有名称的公司开具认证支票一样。

  • 为了增加安全性,我们正在使用JWT。虽然我们没有任何数据库,但令牌将作为MQTT-密码参数传递。是否有更好的替代方案?

是的,有更好的替代方案。拥有某种类型的数据库(它可以是文件系统,不需要是完整的SQL数据库)来保存和管理创建的令牌。如果没有数据库来验证令牌与当前预期值的匹配情况,任何基于令牌的安全性(JWT或其他)都将无效,因为您无法确定令牌当前是否有效。

凭证重用(应该过期的凭证的重复使用)是一个重要的安全漏洞。只需要获取令牌,然后所有未来的通信都将接受相同的凭证。通过将令牌保存在数据库中,并通过从数据库中删除令牌来使令牌在一段时间后过期,可以关闭此功能。这意味着任何可能的违规行为都被限制在较短的时间范围内。
如果没有任何类型的数据库,我只能猜测您可能允许使用现有令牌进行任何访问,这意味着所有令牌实际上都是永久有效的,因为如果它们存在,则会被接受。您需要可能修改,并确保已过期的令牌不授予对受控操作的访问权限。

1
你的客户将连接到你的MQTT代理服务器,为了保证安全性,你需要一个与代理服务器运行地址(域名)绑定的证书。客户端需要知道他们正在交流的服务器是真实可信的,这个信息包含在证书中。如果你正在寻找免费证书,可以考虑 Let's encrypt
至于JWT令牌,为什么你要寻找更好的替代方案?你看到了什么问题?

我可以直接使用代理运行的服务器的IP地址吗? - David
我相信这是可能的,但与常规带有域名的证书相比,获取绑定到IP的官方证书有严格的规定。而且让客户连接到IP似乎不是一个好主意。每当您更改IP时,他们都必须进行配置,而域名确实在这方面有所帮助。 - Joost Aarts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接