Impossible de sélectionner le certificat client dans la configuration du broker

Bonjour,

J’essaie de configurer Mosquitto avec prise en charge de TLS (MQTTS) mais je n’arrive pas à sélectionner le certificat client : liste vide alors que les fichiers sont dans le répertoire avec semble-t-il les bons droits, voir captures d’écran ci-dessous :

image

J’ai essayé d’ajouter les fichiers dans la configuration du broker dans la base de données directement pour avoir cet affichage avec la clé qui est reconnue mais pas le certificat.

Merci d’avance pour votre aide.

A priori le format de certificat attendu est « .pem ». il serait judicieux de préciser cela dans le documentation je pense.

Maintenant la connexion essaie de s’établir mais j’ai des erreurs dans les logs Mosquitto :

2021-12-04T20:25:35: Client connection from 10.0.0.2 failed: error:1404A3F2:SSL routines:ST_ACCEPT:sslv3 alert unexpected message.
2021-12-04T20:25:39: New connection from 10.0.0.2:39569 on port 1883.
2021-12-04T20:25:39: OpenSSL Error[0]: error:1404A3F2:SSL routines:ST_ACCEPT:sslv3 alert unexpected message
2021-12-04T20:25:39: Client <unknown> disconnected: Protocol error.
2021-12-04T20:25:44: New connection from 10.0.0.2:50821 on port 1883.
2021-12-04T20:25:44: OpenSSL Error[0]: error:02FFF020:system library:func(4095):Broken pipe
2021-12-04T20:25:44: Client <unknown> disconnected: Protocol error.

Il s’agit d’une histoire de nom de certificat.

Contournement possible par une option dans zigbee2mqtt : reject_unauthorized: true mais pas ici a priori.

[2021-12-04 21:25:39,775]ERROR    : BrkId:   21 : MqttClient.start() Exception
Traceback (most recent call last):
File "/var/www/html/plugins/jMQTT/resources/jmqttd/jmqttd.py", line 141, in start
self.mqttclient.connect(self.mqtthostname, self.mqttport, 30)
File "/usr/local/lib/python3.7/dist-packages/paho/mqtt/client.py", line 914, in connect
return self.reconnect()
File "/usr/local/lib/python3.7/dist-packages/paho/mqtt/client.py", line 1073, in reconnect
sock.do_handshake()
File "/usr/lib/python3.7/ssl.py", line 1117, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: IP address mismatch, certificate is not valid for '192.168.0.100'. (_ssl.c:1056)

Hello @Florentin,

En effet, la lib que l’on utilise attends un certificat au format PEM dans un fichier en .pem, on va le préciser.

Pour quels « noms » ont été construit ta PKI / tes certificats ?
Si ça se trouve « 192.168.0.100 » n’en fait pas partie et tu dois declarer le broker dans jmqtt avec son hostname plutôt que son IP.

Il y a une doc pdf cachée dans le répertoire docs sur l’implémentation du mqtts et la génération des certificats ici https://github.com/Domochip/jMQTT/raw/beta/docs/fr_FR/MQTTS_Openest.pdf

N’hésite pas à nous faire d’autres retours, ils sont toujours très pertinent :+1::ok_hand:

Merci.
Je vais regarder ça courant de la semaine. Effectivement j’avais lu qu’il faut l’adresse du serveur dans le certificat. Je l’ai ajoutée dans les alternatives names du certificat server.crt mais l’erreur apparaît toujours. Est-ce que ça devrait être également dans l’autorité de certification ? Dans le certificat client ?