【问题标题】:How to configure Mosca for mqtts without the client having a certificate?如何在没有证书的客户端的情况下为 mqtts 配置 Mosca?
【发布时间】:2019-04-05 08:20:59
【问题描述】:

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

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

  • 我在配置中添加了安全字段,如图here

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

  • 我还尝试使用为我的域名注册的 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 只有一个。也许我创建错了,但我遵循许多关于同一主题的教程,例如this one

我需要什么样的证书?

他们还有什么关系吗?

谢谢。

【问题讨论】:

  • 是的,很抱歉,当我过度思考这个简单的问题时,我的脑海中出现了混乱。我编辑了我的帖子以澄清我的问题。我尝试了不同类型的证书,从简单的 open-ssl 自签名证书到让我们加密证书。它总是导致同样的错误。我觉得我必须使用 Let's encrypt 证书,因为它们具有我的客户可以知道的国际权威,但是我看到的每个教程都使用带有 open-ssl 的自签名证书。我觉得我必须以某种方式向我的客户指定我使用的 CA,但我猜它已嵌入我的证书或密钥中。我越来越糊涂了。

标签: ssl mqtt mosca


【解决方案1】:

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

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

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

【讨论】:

  • 提出一个关于 Lets Encrypt Certificates 的新问题
猜你喜欢
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2022-08-08
  • 2017-10-10
  • 2012-06-07
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多