带有 TLS 和 JWT 的 MQTT 代理
MQTT Broker with TLS and JWT
我们目前正在进行一个数据备份类项目。我们将自己的硬件运送给工业客户。然后,该硬件将读取客户想要备份的所有相关数据,并使用 MQTT(Node.js 客户端和 Mosca MQTT Broker)将它们发送到云服务器。
现在我的问题是:
- 是否有可用于我的 MQTT 连接的免费 TLS 证书?我找到的唯一需要域名的。
- 为了提高安全性,我们正在使用 JWT。虽然我们没有任何数据库。令牌将作为 MQTT 密码参数传递。有更好的选择吗?
Is a self-signed TLS certificate bad practice even if the private cert
is not publicly available? It will only be shipped embedded into our
hardware and to our verified customers.
当然是不好的做法(非常不好的做法)。从适当的 CA 机构获取证书。除非您希望您的公司因安全漏洞被起诉到石器时代。
您的客户端将连接到您的 MQTT 代理,为了安全起见,您需要一个与代理 运行 所在的地址(域名)绑定的证书。客户需要知道他们正在与之交谈的服务器是真实的,为此所需的信息包含在证书中。如果您正在寻找免费证书,可以查看 Let's encrypt
关于 JWT 令牌,您为什么要寻找更好的替代品?您看到了什么问题?
- 是否有可用于我的 MQTT 连接的免费 TLS 证书?我找到的唯一需要域名的。
证书"certifies"表明该信息是由特定实体提供的,其中实体定义为"a domain name"。
申请一个不返回域名的 TLS 证书就像申请一张没有名字的公司的认证支票。
- 为了提高安全性,我们正在使用 JWT。虽然我们没有任何数据库。令牌将作为 MQTT 密码参数传递。有更好的选择吗?
是的,有更好的选择。拥有某种数据库(它可以是一个文件系统,它不需要是一个成熟的 SQL 数据库)保存和管理创建的令牌。如果没有数据库根据当前预期值验证令牌,任何类型的基于令牌的安全性(JWT 或其他)都将毫无用处,因为您无法确定令牌当前是否有效。
凭据重用(重播本应过期的凭据)是一个主要的安全漏洞。需要做的就是获取令牌,然后所有未来的通信都将使用相同的凭据接受。这是通过将令牌保存在数据库中并在一段时间后通过从数据库中删除令牌使令牌过期来关闭的。这意味着任何可能的违规都被限制在更短的时间跨度内。
没有任何类型的数据库,我只能猜测您可能允许使用现有令牌进行任何访问,这意味着您的所有令牌永远有效,因为如果它们存在,它们将被接受。您可能需要修改并确认过期令牌不会授予对受控操作的访问权限。
我们目前正在进行一个数据备份类项目。我们将自己的硬件运送给工业客户。然后,该硬件将读取客户想要备份的所有相关数据,并使用 MQTT(Node.js 客户端和 Mosca MQTT Broker)将它们发送到云服务器。
现在我的问题是:
- 是否有可用于我的 MQTT 连接的免费 TLS 证书?我找到的唯一需要域名的。
- 为了提高安全性,我们正在使用 JWT。虽然我们没有任何数据库。令牌将作为 MQTT 密码参数传递。有更好的选择吗?
Is a self-signed TLS certificate bad practice even if the private cert is not publicly available? It will only be shipped embedded into our hardware and to our verified customers.
当然是不好的做法(非常不好的做法)。从适当的 CA 机构获取证书。除非您希望您的公司因安全漏洞被起诉到石器时代。
您的客户端将连接到您的 MQTT 代理,为了安全起见,您需要一个与代理 运行 所在的地址(域名)绑定的证书。客户需要知道他们正在与之交谈的服务器是真实的,为此所需的信息包含在证书中。如果您正在寻找免费证书,可以查看 Let's encrypt
关于 JWT 令牌,您为什么要寻找更好的替代品?您看到了什么问题?
- 是否有可用于我的 MQTT 连接的免费 TLS 证书?我找到的唯一需要域名的。
证书"certifies"表明该信息是由特定实体提供的,其中实体定义为"a domain name"。
申请一个不返回域名的 TLS 证书就像申请一张没有名字的公司的认证支票。
- 为了提高安全性,我们正在使用 JWT。虽然我们没有任何数据库。令牌将作为 MQTT 密码参数传递。有更好的选择吗?
是的,有更好的选择。拥有某种数据库(它可以是一个文件系统,它不需要是一个成熟的 SQL 数据库)保存和管理创建的令牌。如果没有数据库根据当前预期值验证令牌,任何类型的基于令牌的安全性(JWT 或其他)都将毫无用处,因为您无法确定令牌当前是否有效。
凭据重用(重播本应过期的凭据)是一个主要的安全漏洞。需要做的就是获取令牌,然后所有未来的通信都将使用相同的凭据接受。这是通过将令牌保存在数据库中并在一段时间后通过从数据库中删除令牌使令牌过期来关闭的。这意味着任何可能的违规都被限制在更短的时间跨度内。
没有任何类型的数据库,我只能猜测您可能允许使用现有令牌进行任何访问,这意味着您的所有令牌永远有效,因为如果它们存在,它们将被接受。您可能需要修改并确认过期令牌不会授予对受控操作的访问权限。