2016-08-23 679 views
3

我想通過tls使用我自己的證書頒發機構將我的python paho mqtt客戶端連接到我的代理。我生成了必要的文件,並配置了我的RabbitMQ代理來使用它們。我的想法是客戶端認證服務器,但客戶端本身不需要認證。python paho mqtt客戶端連接通過ssl/tls給出錯誤

  • ca.cert.pem
  • cert.pem
  • key.pem

我知道這些應能正常工作,因爲我也有一個階泛美衛生組織MQTT客戶端正常工作。

目前我直接從我的Mac上的終端運行文件。我使用的Python 3.5.2創建virtuanenv和我有一個文件subscribe.py

import paho.mqtt.client as paho 
import ssl 

def on_message(clnt, userdata, msg): 
    print(msg.topic+" "+str(msg.payload)) 

def on_connect(client, userdata, rc): 
     print("Connected with result code "+str(rc)) 
     mqttc.subscribe("foo") 

mqttc = paho.Client() 
mqttc.on_message = on_message 
mqttc.on_message = on_message 
mqttc.tls_set("ca.cert.pem", tls_version=ssl.PROTOCOL_TLSv1_2) 
mqttc.connect("address", 8883, 60) 
mqttc.loop_forever() 

當我跑我收到以下錯誤

ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645) 

我也試圖改變tls_versionTLSv1_1文件,TLSv1,並完全放棄。 ca.cert.pemsubscribe.py文件位於同一文件夾中

paho網站上的示例看起來很簡單,所以我在這裏錯過了什麼?爲什麼我在我的Python客戶端上收到錯誤?

回答

1

您是否嘗試過蚊子客戶?遇到的問題有很多可能性,所以最好的方法是嘗試另一種方法。

mosquitto_sub -h address -p 8883 --cafile ca.cert.pem -t "#" -d -v

d標誌是用於調試消息,v標誌是詳細模式。

如果mosquitto客戶端無法與CA連接,你可以嘗試:

mosquitto_sub -h address -p 8883 --cafile ca.cert.pem -t "#" -d -v --insecure

的不安全標誌將忽略CA服務器檢查。如果添加不安全標誌可以讓你連接,那麼也許CA是錯誤的。你可以使用openssl來調試它。