使用 TLS 的 EC2 上的 Mosquitto

Mosquitto on EC2 with TLS

问题

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

我有 运行ning 实例,我可以使用普通未加密的 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。我生成证书 issuuing

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 one or this one 这样一步一步地遵循指南,但无济于事。

当我写下这个时,我意识到在我最后一次尝试(遵循上面列出的所有步骤)时,我忘记在尝试订阅之前将 ca.crt 文件复制到客户端经纪人。

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

我想我仍然 post 这个问题,因为我花了几个小时来弄清楚所有步骤中的所有细节,它可能对其他 运行 类似的人有用问题。