2017-09-08 64 views
1

私はPythonに問題があります(私はPythonのnoobであり、それを学んでいます)。 Debian 9システムでバージョン2.7.9を使用しました。私はPythonでpahoとtinkerforgeパッケージをインストールしました。MQTT PAHO [CERTIFICATE_VERIFY_FAILED]

Paho MQTTクライアントを使用してスクリプトを作成し、自分のmosquittoブローカーを接続しました。私は暗号化された接続を使用したい。私の接続は暗号化されていないと正常に動作しますが、暗号化されていると失敗します細かいopenHAB(MQTT-加入者)とMQTTFX(MQTT-加入者とプロデューサー)で暗号化された接続作業

私は私のスクリプトのために、これらのパラメータを使用しています:

self.client = mqtt.Client() 
self.client.tls_set("/home/pi/ca-cert.pem","/home/pi/IWILR1-1-cert.pem","/home/pi/IWILR1-1.pem",tls_version=ssl.PROTOCOL_TLSv1) 
# disables peer verification 
self.client.tls_insecure_set(False) 
    self.client.on_connect = self.mqtt_on_connect 
    self.client.on_disconnect = self.mqtt_on_disconnect 
self.client.on_message = self.mqtt_on_message 

    self.device_proxies = {} 
    self.device_proxy_classes = {} 

    for subclass in DeviceProxy.subclasses(): 
     self.device_proxy_classes[subclass.DEVICE_CLASS.DEVICE_IDENTIFIER] = subclass 

def connect(self): 
    if self.broker_username is not None: 
     self.client.username_pw_set(self.broker_username, self.broker_password) 

    self.client.connect(self.broker_host, self.broker_port) 
    self.client.loop_start() 

をしかし、今の問題は、上のエラーですPython。

sudo python /home/pi/brick-mqtt-proxy.py 
Traceback (most recent call last): 
    File "/home/pi/brick-mqtt-proxy.py", line 1250, in <module> 
    proxy.connect() 
    File "/home/pi/brick-mqtt-proxy.py", line 1109, in connect 
    self.client.connect(self.broker_host, self.broker_port) 
    File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 760, in connect 
    return self.reconnect() 
    File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 919, in reconnect 
    sock.do_handshake() 
    File "/usr/lib/python2.7/ssl.py", line 840, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661) 

これらのエラーが発生しました。

1504896114: New connection from 143.93.197.20 on port 8883. 
1504896114: OpenSSL Error: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca 
1504896114: OpenSSL Error: error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure 
1504896114: Socket error on client <unknown>, disconnecting. 

Mosquitto confに

# Place your local configuration in /etc/mosquitto/conf.d/ 
# 
# A full description of the configuration file is at 
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example 


pid_file /var/run/mosquitto.pid 

persistence true 
persistence_location /var/lib/mosquitto/ 


log_type all 
log_facility 5 
log_timestamp true 
log_dest file /var/log/mosquitto/mosquitto.log 

include_dir /etc/mosquitto/conf.d 

port 8883 
cafile /etc/mosquitto/ca_certificates/ca-cert.pem 
certfile /etc/mosquitto/certs/server-cert.pem 
keyfile /etc/mosquitto/certs/server-key.pem 

サーバーのみとCaがブローカーのホスト名と一致しました。クライアントはCNのホスト名を使用します。私はそれが正しいことを望む?

私はあなたの問題を解決するのを助けてくれることを願っています。

PS:自己署名入りの証明書を使用しました。 TLSバージョン1.2

+0

mosquitto.confを含めるように質問を編集して、設定方法を確認してください。また、証明書CNはブローカのホスト名と一致しますか? – hardillb

+0

サーバーとCaのみがブローカーのホスト名と一致しました。クライアントがCNのホスト名を使用する – ZPascal

答えて

0

TLS v1.2を使用している場合、式(2行目:self.client.tls_set()) 'tls_version = ssl.PROTOCOL_TLSv1'を 'tls_version = ssl.PROTOCOL_TLSv1_2'に変更する必要があります。期待どおりに... TLSv1.2。これは私のために働いた。

関連する問題