使用TLS的EC2上的Mosquitto

时间:2016-10-01 11:48:52

标签: ssl amazon-ec2 mqtt

问题

我想在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 个答案:

答案 0 :(得分:1)

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

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

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