簡體   English   中英

帶有 TLS 的 EC2 上的 Mosquitto

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM