私は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
mosquitto.confを含めるように質問を編集して、設定方法を確認してください。また、証明書CNはブローカのホスト名と一致しますか? – hardillb
サーバーとCaのみがブローカーのホスト名と一致しました。クライアントがCNのホスト名を使用する – ZPascal