0

我有一个在节点实例上运行的 Mosca MQTT 代理,我想用 SSL/TLS(MQTTs 协议)加密所有传入的通信,但客户端不必将任何证书链接到连接(我猜它与 self -签名证书)就像 https 一样。我希望我的所有客户端只使用指定 MQTTs 协议的凭据进行连接,并且可以加密通信。我之前正在使用 Amazon MQ,它就是这样工作的,所以我想要同样的。

我不知道如何正确配置 Mosca 来做到这一点,我不知道我必须使用什么样的证书。

  • 我在配置中添加了安全字段,如下所示

  • 对于证书,我尝试创建一个自签名证书,如此处所示

  • 我还尝试使用为我的域名注册的 certbot 证书(Let's Encrypt):mq.xxx.com。

我在 ec2 (ubuntu 18) 上运行所有东西,我的网络和防火墙对 1883 和 8883 开放。我的密钥和证书位于我的项目的根目录,其中守护程序以良好的权利和所有权运行。我知道我的实例可以正确访问它们。

new mosca.Server({
   port: 1883,
   secure: {
      keyPath: "./privkey.pem",
      certPath: "./cert.pem"
   },
   backend: {
      type: 'redis',
      redis: require('redis'),
      host: "localhost",
      port: 6379,
      db: 0,
      return_buffers: true,
   },
   persistence: {
      factory: mosca.persistence.Redis
   }
});

我的服务器正在端口 1883 上运行并使用简单的 mqtt,但是当我尝试使用端口 8883 上的客户端连接 ssl/tls 时,指定服务器使用自签名证书(我尝试使用 MQTT.fx)它失败说:“无法找到请求目标的有效认证路径”

我无法解决这个问题,我认为客户端无法“接受”或“验证”提供的证书。也许我向 Mosca 提供了错误的密钥或证书,但每个生成的 openssl 或 certbot 只有一个。也许我创建错了,但我遵循了很多关于同一主题的教程,比如这个

我需要办什么证书?

他们还有什么关系吗?

谢谢你。

4

1 回答 1

1

如果您使用的是自行创建的证书,那么客户端将需要一份签署代理证书的证书副本。该证书将被添加到受信任的来源列表中,因此它可以证明经纪人就是它声称的那个人。

如果您不想/不能分发证书,那么您将需要为您的代理使用由 CA(证书颁发机构)颁发的证书,该证书由您已经拥有的签名证书(捆绑到您正在使用的操作系统/客户端中) .

Lets Encrypt 签名证书现在应该捆绑到大多数操作系统中,但它们也由 IdenTrust 再次交叉签名,谁的证书应该与大多数操作系统捆绑在一起。如果您在 Lets Encrypt 证书方面遇到问题,那么我建议您提出一个新问题,详细说明您如何使用这些证书配置 mosca,以及如何配置 MQTT.fx 以及您收到的错误的更多详细信息。

于 2019-04-05T10:02:50.303 回答