问题
我想在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 one或this one一步一步跟踪指南,但无济于事 .
1 回答
当我写这篇文章的时候,我意识到在我上一次尝试中(遵循上面列出的所有步骤),我忘了在尝试订阅代理之前将
ca.crt
文件复制到客户端 .如果客户端安装了错误的
ca.crt
文件(与之前的尝试不同),则上述unknown ca
错误很有意义 . 将文件复制到客户端后,它成功地将TLS连接到EC2上的代理 .我想我仍然会发布这个问题,因为我花了几个小时来计算出所有步骤中的所有细节,并且对于遇到类似问题的其他人来说它可能会派上用场 .