2016-10-01 42 views
1

問題

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

回答

1

當我寫下這篇文章時,我意識到在我最後一次嘗試(按照上面列出的所有步驟)時,我忘記將ca.crt文件複製到客戶端,然後嘗試將其訂閱到代理。

在客戶端安裝了錯誤的ca.crt文件(與以前的嘗試不同),上述unknown ca錯誤很有意義。在將文件複製到客戶端後,它已成功與TLS連接到EC2上的代理。

我想我仍然會提出這個問題,因爲我花了幾個小時才弄清楚所有步驟中的所有細節,並且它可能適用於其他人遇到類似問題。