如何在没有客户端证书的情况下为mqtts配置Mosca?

时间:2019-04-05 08:21:00

标签: ssl mqtt mosca

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

我不知道如何正确配置Mosca,我不知道必须使用哪种证书。

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

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

  • 我还尝试了为我的域名mq.xxx.com注册的certbot证书(让我们加密)。

我正在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

我需要什么样的证书?

与他们还有其他关系吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

如果使用的是自行创建的证书,则客户端将需要一份签署了经纪人证书的证书副本。该证书将被添加到受信任来源列表中,以便可以证明经纪人是其声称的身份。

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

到目前为止,Lets Encrypt签名证书应该捆绑到大多数操作系统中,但是IdenTrust再次将它们交叉签名,后者的证书应该与大多数操作系统捆绑在一起。如果您对Lets Encrypt证书有疑问,那么我建议您提出一个新问题,其中包括如何使用这些证书配置mosca的确切详细信息以及有关如何配置MQTT.fx以及收到的错误的详细信息。