問題
我想在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一步步引導,但無濟於事。