J'ai un problème avec Python (je suis un python noob et je l'apprends). J'ai utilisé la version 2.7.9 sur un système Debian 9. J'ai installé le paquetage paho et tinkerforge en python.MQTT PAHO [CERTIFICATE_VERIFY_FAILED]
J'ai développé un script en utilisant le client Paho MQTT pour connecter mon courtier mosquitto. Je veux utiliser une connexion cryptée. Ma connexion fonctionne correctement lorsqu'elle n'est pas cryptée mais échoue lorsqu'elle est cryptée. Les travaux de connexion bien cryptée sur openHAB (MQTT-abonné) et MQTTFX (MQTT-abonné et producteur)
J'utilise ces paramètres pour mon script:
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()
Mais maintenant, le problème est l'erreur 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)
et à mosquitto ces erreurs sont arrivées.
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
seul serveur et Ca correspondent au nom d'hôte de courtier. Le client utilise son propre nom d'hôte pour le CN. J'espère que c'est vrai?
J'espère que vous pouvez m'aider à résoudre mon problème. PS: J'ai utilisé un certificat auto-signé! TLS Version 1.2
Modifiez la question pour inclure mosquitto.conf afin que nous puissions voir comment vous l'avez configuré. Est-ce que le certificat CN correspond au nom d'hôte du courtier? – hardillb
Seul le serveur et Ca correspondaient au nom d'hôte du courtier. Le client utilise son propre nom d'hôte pour CN – ZPascal