3

我们目前正在开展一个数据备份项目。我们将自己的硬件运送给工业客户。然后,该硬件将读取客户想要备份的所有相关数据,并使用 MQTT(Node.js 客户端和 Mosca MQTT 代理)将它们发送到云服务器。

现在我的问题是:

  • 是否有可用于我的 MQTT 连接的免费 TLS 证书?我发现唯一需要域名的。
  • 为了提高安全性,我们使用 JWT。虽然我们没有任何数据库。令牌将作为 MQTT-Password 参数传递。有更好的选择吗?
4

3 回答 3

3

即使私有证书不公开,自签名 TLS 证书也是不好的做法吗?它只会被嵌入到我们的硬件中并发送给我们经过验证的客户。

当然这是不好的做法(非常不好的做法)。从适当的 CA 机构获取证书。除非您希望您的公司因安全漏洞而被起诉进入石器时代。

于 2019-09-20T15:39:53.363 回答
1

您的客户端将连接到您的 MQTT 代理,为了安全起见,您需要一个与代理运行的地址(域名)绑定的证书。客户端需要知道他们正在与之交谈的服务器是真实的,为此所需的信息在证书中。如果您正在寻找免费证书,您可以查看Let's encrypt

至于 JWT 代币,为什么要寻找更好的替代方案?你看到什么问题?

于 2019-09-28T10:02:14.003 回答
1
  • 是否有可用于我的 MQTT 连接的免费 TLS 证书?我发现唯一需要域名的。

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

要求不返回域名的 TLS 证书就像要求在没有名称的公司上开具经过认证的支票。

  • 为了提高安全性,我们使用 JWT。虽然我们没有任何数据库。令牌将作为 MQTT-Password 参数传递。有更好的选择吗?

是的,有更好的选择。有某种数据库(它可以是文件系统,它不需要是成熟的 SQL 数据库)保存和管理创建的令牌。如果没有数据库来根据当前预期值验证令牌,任何基于令牌的安全性(JWT 或其他)都将毫无用处,因为您无法确定令牌当前是否有效。

凭证重用(应过期凭证的重放)是一个主要的安全漏洞。所需要做的就是获取令牌,然后使用相同的凭据接受所有未来的通信。这通过将令牌保存在数据库中来关闭,并在一段时间后通过从数据库中删除令牌来使令牌过期。这意味着任何可能的违规行为都仅限于较短的时间跨度。

如果没有任何类型的数据库,我只能猜测您可能允许使用现有令牌进行任何访问,这意味着您的所有令牌都永久有效,因为如果它们存在,它们将被接受。您可能需要修改并肯定验证过期令牌不会授予对受控操作的访问权限。

于 2019-09-29T18:09:55.537 回答