我有一个运行在节点实例上的Mosca MQTT代理,我想使用SSL / TLS(MQTTs协议)对所有传入的通信进行加密,但是客户端不必将任何证书链接到连接(我想它必须就像https一样使用自签名证书。我希望所有客户端仅使用指定MQTT协议的凭据进行连接,并且可以对通信进行加密。我之前只是在使用Amazon MQ,这就是它的工作原理,所以我也希望如此。
我不知道如何正确配置Mosca,我不知道必须使用哪种证书。
我正在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
我需要什么样的证书?
与他们还有其他关系吗?
谢谢。
答案 0 :(得分:1)
如果使用的是自行创建的证书,则客户端将需要一份签署了经纪人证书的证书副本。该证书将被添加到受信任来源列表中,以便可以证明经纪人是其声称的身份。
如果您不想/不能分发证书,那么您将需要使用由CA(证书颁发机构)签发的已经为您签名(已捆绑到您的OS /客户端中)证书的代理颁发的证书正在使用)。
到目前为止,Lets Encrypt签名证书应该捆绑到大多数操作系统中,但是IdenTrust再次将它们交叉签名,后者的证书应该与大多数操作系统捆绑在一起。如果您对Lets Encrypt证书有疑问,那么我建议您提出一个新问题,其中包括如何使用这些证书配置mosca的确切详细信息以及有关如何配置MQTT.fx以及收到的错误的详细信息。