使用 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 这个问题,因为我花了几个小时来弄清楚所有步骤中的所有细节,它可能对其他 运行 类似的人有用问题。
问题
我想在 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 这个问题,因为我花了几个小时来弄清楚所有步骤中的所有细节,它可能对其他 运行 类似的人有用问题。