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