使用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 one或this one一步步引导,但无济于事。
当我写下这篇文章时,我意识到在我最后一次尝试(按照上面列出的所有步骤)时,我忘记将ca.crt
文件复制到客户端,然后尝试将其订阅到代理。
在客户端安装了错误的ca.crt
文件(与以前的尝试不同),上述unknown ca
错误很有意义。在将文件复制到客户端后,它已成功与TLS连接到EC2上的代理。
我想我仍然会提出这个问题,因为我花了几个小时才弄清楚所有步骤中的所有细节,并且它可能适用于其他人遇到类似问题。