[英]Mosquitto on EC2 with TLS
我想在 AWS EC2 實例上設置我的 MQTT 代理並使用 TLS 連接到它。
我的實例正在運行,我可以使用普通未加密的 MQTT 從我的本地機器成功連接(發布/訂閱)到 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 並使用 OwnTracks 的generate-CA.sh
在目錄~/iot
生成證書。 我生成證書頒發
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
啟動代理了。
為了mosquitto_sub -h ec2-x.compute-1.amazonaws.com -p 8883 --cafile ca.crt -t +
代理,我將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.
當我寫下這個時,我意識到在我最后一次嘗試中(遵循上面列出的所有步驟),我忘記在嘗試將ca.crt
文件訂閱到代理之前將其復制到客戶端。
由於客戶端上安裝了錯誤的ca.crt
文件(與之前的嘗試不同),上述unknown ca
錯誤很有意義。 將文件復制到客戶端后,它通過 TLS 成功連接到 EC2 上的代理。
我想我仍然會發布這個問題,因為我花了幾個小時來弄清楚所有步驟中的所有細節,它可能對遇到類似問題的其他人派上用場。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.