Version de Jeedom : 4.2.21
Version du plugin : 2022-10-16 01:01:21
Bonjour,
En configurant la connexion à un broker distant en TLS, j’ai eu les erreurs suivantes :
- dans jMQTTd :
0464|[2022-10-23 08:02:06,702][ERROR] Client335 MainThread start() : Fatal TLS Certificate import Exception, this connection will most likely fail!
0465|Traceback (most recent call last):
0466|File "/var/www/html/plugins/jMQTT/resources/jmqttd/jMqttClient.py", line 161, in start
0467|self.mqttclient.tls_set(ca_certs=ca.name, certfile=cert.name, keyfile=key.name)
0468|File "/var/www/html/plugins/jMQTT/resources/jmqttd/venv/lib/python3.7/site-packages/paho/mqtt/client.py", line 796, in tls_set
0469|context.load_cert_chain(certfile, keyfile, keyfile_password)
0470|ssl.SSLError: [SSL] PEM lib (_ssl.c:3824)
0471|[2022-10-23 08:02:06,725][ERROR] Client335 Brk335Th on_disconnect() : Unexpected disconnection from broker!
0472|[2022-10-23 08:02:11,749][ERROR] Client335 Brk335Th on_disconnect() : Unexpected disconnection from broker!
0473|[2022-10-23 08:02:21,772][ERROR] Client335 Brk335Th on_disconnect() : Unexpected disconnection from broker!
- côté broker :
1666504921: New connection from xx.xx.xx.xx:15329 on port 8883.
1666504921: OpenSSL Error[0]: error:1408F10B:SSL routines:ssl3_get_record:wrong version number
1666504921: Client <unknown> disconnected: Protocol error.
La configuration du broker :
En regardant le code et spécifiquement /var/www/html/plugins/jMQTT/resources/jmqttd/jMqttClient.py, j’ai l’impression que si on met mqtts comme protocole, ça implique un certificat client (ce qui ne doit pas être le cas) :
if self.message['proto'] == 'mqtts':
try:
ca = NamedTemporaryFile(delete=False)
ca.write(str.encode(self.message['tlsca']))
ca.close()
cert = NamedTemporaryFile(delete=False)
cert.write(str.encode(self.message['tlsclicert']))
cert.close()
key = NamedTemporaryFile(delete=False)
key.write(str.encode(self.message['tlsclikey']))
key.close()
self.mqttclient.tls_set(ca_certs=ca.name, certfile=cert.name, keyfile=key.name)
self.mqttclient.tls_insecure_set(('tlsinsecure' in self.message) and self.message['tlsinsecure'])
unlink(ca.name)
unlink(cert.name)
unlink(key.name)
except:
self._log.exception('Fatal TLS Certificate import Exception, this connection will most likely fail!')
En attendant, j’ai remplacé (dans le code ci-dessus) la ligne :
self.mqttclient.tls_set(ca_certs=ca.name, certfile=cert.name, keyfile=key.name)
par
self.mqttclient.tls_set(certfile=None, keyfile=None,cert_reqs=ssl.CERT_REQUIRED) (ajouter l’import du module ssl)
et la connexion via mqtts fontionne



)