首页 文章

使用TLS的EC2上的Mosquitto

提问于
浏览
1

问题

我想在AWS EC2实例上设置我的MQTT代理并使用TLS连接到它 .

我有实例运行,我可以使用vanilla未加密的MQTT成功地从本地机器连接(pub / sub)到Mosquitto . 使用TSL时,我收到错误 tlsv1 alert unknown ca .

经过几个小时的阅读和尝试不同的教程和示例,我仍然无法弄清楚这一点 . 以下是我所做的以及对证书和加密的有限理解应该有效:

我尝试了什么

假设我的EC2实例在主机 ec2-x.compute-1.amazonaws.com 和IP 54.1.1.1 处可用 . 我的本地网络的IP是 192.77.77.77 .

SSH进入EC2并在目录 ~/iot 中生成证书using OwnTracks's generate-CA.sh . 我生成证书颁发

HOSTLIST="ec2-x.compute-1.amazonaws.com" IPLIST="54.1.1.1" bash ./generate-CA.sh ec2-x.compute-1.amazonaws.com

证书生成导致一堆文件,即

ca.crt ca.key ca.srl ec2-x.compute-1.amazonaws.com.crt ec2-x.compute-1.amazonaws.com.csr ec2-x.compute-1.amazonaws.com.key

现在我准备用 mqtt.conf 配置我的经纪人:

# mosquitto.conf
listener 8883
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
cafile ./ca.crt
certfile ./ec2-x.compute-1.amazonaws.com.crt
keyfile ./ec2-x.compute-1.amazonaws.com.key

是时候用 mosquitto -c mqtt.conf 启动代理了 .

为了转到代理,我将 ca.crt 的内容复制到我的笔记本电脑并运行 mosquitto_sub -h ec2-x.compute-1.amazonaws.com -p 8883 --cafile ca.crt -t + .

结果错误

我在订户方面得到的是

Error: A TLS error occurred.

服务器确实意识到发生了连接尝试但会做出反应

1475320985: New connection from 192.77.77.77 on port 8883.
1475320986: OpenSSL Error: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca
1475320986: OpenSSL Error: error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure
1475320986: Socket error on client , disconnecting.

我已经尝试按照this very good onethis one一步一步跟踪指南,但无济于事 .

1 回答

  • 1

    当我写这篇文章的时候,我意识到在我上一次尝试中(遵循上面列出的所有步骤),我忘了在尝试订阅代理之前将 ca.crt 文件复制到客户端 .

    如果客户端安装了错误的 ca.crt 文件(与之前的尝试不同),则上述 unknown ca 错误很有意义 . 将文件复制到客户端后,它成功地将TLS连接到EC2上的代理 .

    我想我仍然会发布这个问题,因为我花了几个小时来计算出所有步骤中的所有细节,并且对于遇到类似问题的其他人来说它可能会派上用场 .

相关问题