使用TLS的EC2上的Mosquitto

问题描述:

问题

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

我有实例正在运行,并且可以使用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。我生成证书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 onethis one一步步引导,但无济于事。

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

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

我想我仍然会提出这个问题,因为我花了几个小时才弄清楚所有步骤中的所有细节,并且它可能适用于其他人遇到类似问题。