使用 TLS 的 EC2 上的 Mosquitto

Wro*_*ngs 3 ssl amazon-ec2 mqtt

问题

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

我已经运行了实例,并且可以使用普通未加密的 MQTT 从本地计算机成功连接(发布/订阅)到 Mosquitto。使用 TSL 时,出现错误tlsv1 alert unknown ca

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

我尝试过的

假设我的 EC2 实例在 hostec2-x.compute-1.amazonaws.com和 IP上可用54.1.1.1。我的本地网络 IP 是192.77.77.77

通过 SSH 连接到 EC2 并使用目录中的OwnTracksgenerate-CA.sh生成证书~/iot。我生成颁发的证书

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
听众 8883
pid_file /var/run/mosquitto.pid
持久真实
persistence_location /var/lib/mosquitto/
cafile ./ca.crt
certfile ./ec2-x.compute-1.amazonaws.com.crt
密钥文件 ./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 +.

结果错误

我在订户端得到的是

错误:发生 TLS 错误。

服务器确实意识到正在发生连接尝试,但做出反应

1475320985:来自端口 8883 上的 192.77.77.77 的新连接。
1475320986:OpenSSL 错误:错误:14094418:SSL 例程:SSL3_READ_BYTES:tlsv1 警报未知 ca
1475320986:OpenSSL 错误:错误:140940E5:SSL 例程:SSL3_READ_BYTES:ssl 握手失败
1475320986:客户端上的套接字错误,断开连接。

我已经尝试过一步步遵循指南,例如这个非常好的指南这个指南,但无济于事。

Wro*_*ngs 5

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

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

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