Mqtts (tls) / jmqtt

Bonjour,
Pour respecter la consigne un sujet / un fil de messages, je vais continuer ici la digression de la discussion https://community.jeedom.com/t/shelly-gen3-et-jmqtt/120423/23

Les nouveau module shelly (je suis en train de tester le Shelly Plus 1PM mini gn3 qui permet d’utiliser du MQTTS

Je n’y connais pas beaucoup en protocole, mais il me semble que le MQTT (sans S) n’a pas une sécurité suffisante pour certaines fonctions. Je cherche donc à tester le MQTTS
Dans mon installation, j’ai pas mal de Shelly ancienne génération et donc si je ne me trompe, ne pouvant pas fonctionner en MQTTS; seulement en MQTT Il faut donc que j’arrive à faire cohabiter les deux (MQTT et MQTTS)

Avant de me lancer complètement, j’ai quelques questions de compréhension :
Pour avancer pas à pas :

Un seul brocker peut il fonctionner à la fois en MQTT (pour mes ancien modules) et en MQTTS ?
Je suppose que non, alors, peut on avoir plusieurs brockers sur le mêmes pi (je suppose vraiment que oui)
Et si oui, comment installer un second brocker :
J’ai essayé dans jMQTTde cliquer sur le +
image
pour ajouter un brocker (pour l’instant, sans chercher à ce qu’il soit TLS), mais pas réussi : soit je mets exactement les mêmes identifiant mdp et port et là, il démarre correctement, c’est en vert, mais je suppose que je suis sur exactement le même brocker que celui déjà présent dans le pi, ce n’est pas ce que je veux) soit je change par exemple uniquement le port (ça me semble logique qu’un second brocker doit avoir un port différent…) et là, ça reste en orange, pas bon.

Si, sans PB, il écoute sur 2 ports différents :
1883 pour le mqtt
8883 pour le mqtts
Ports par défaut mais modifiables

Tout ça se paramètre dans le fichier de configuration de mosquitto

Norbert

Donc, je vais aller voir et tenter de comprendre comment configurer le fichier de configuration de mosquito sur mon pi, mais on est bien d’accord que dans jeedom, il faut avoir deux brocker : un en MQTT et un en MQTTS ?

Non il ne faut pas. C’était votre question et @ngrataloup y a répondu.

Ha ok, donc dans JMQTT un seul brocker, mais on le configure en MQTTS alors et avec le port 8883 ?

Je ne sais pas comment on configure cela avec plugin-jmqtt ni même si le plugin le permet mais c’est possible d’avoir un broker avec mosquitto sur écoutant avec et sans tls.

Bon, j’ai pas mal avancé :
Alors, sous jmqtt, il faut faire ce que j’appelai ajouter un brocker,
image

Auparavant, il faut avoir généré les bonne clefs qui vont bien en faisant ce qui est décrit dans cette page créée par @Bad :
https://docs.bad.wf/fr_FR/jmqtt/stable/index#Chiffrement%20TLS

et plus précisément ceci :

Voici un exemple de commandes pour générer les certificats CA, de Mosquitto et d’un client MQTT avec des “Subject Alternative Name” (SAN) :

# Génération de la paire de certificat de la CA
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 9999 -subj "/C=FR/CN=MQTT-CA" -key ca.key -out ca.crt

# Génération de la paire de certificats pour le Broker (avec les SAN suitants : mon.domaine.net, localhost, 127.0.0.1 et ::1)
openssl genrsa -out mosquitto.key 2048
openssl req -new -subj "/C=FR/CN=MQTT-mosquitto" -key mosquitto.key -out mosquitto.csr
openssl x509 -req -extfile <(printf "subjectAltName = DNS:mon.domaine.net,DNS:localhost,IP:127.0.0.1,IP:::1") -in mosquitto.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out mosquitto.crt -days 9999 -sha256

# Génération d'une paire de certificats pour un client MQTT
openssl genrsa -out client.key 2048
openssl req -new -subj "/C=FR/CN=MQTT-client001" -key client.key -out client.csr
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 9999 -sha256

et récupérer les fichier générés (par ex via sftp) pour pouvoir après les fournir à Jeedom.

Il faudra alors modifier la configuration du service mosquitto et ajouter (à minima) les lignes suivantes, pour que mosquitto écoute sur le port 8883 :

listener 8883
protocol mqtt
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/mosquitto.crt
keyfile /etc/mosquitto/certs/mosquitto.key

en remplaçant mon.domaine.net, par le mien,

Il faut aussi, dans jmqtt télécharger les certificats qui vont bien via ici :

Une précision car pour moi j’ai pas mal tâtonné : Le fichier à fournir pour la clé autorité personnalisée est le fichier ca.crt

Alors, en faisant tout cela le broker est au vert (ok) si je me mets comme sur la copie écran en « Activé Autorité Personnalisée » mais je n’ai pas réussi à le mettre en autorité publique. Certainement un problème des clef, mais bon, c’est déjà pas mal et je suppose que c’est bon comme cela du point de vue sécurité.

Il me reste à configurer mon modul shelly en MQTTS. A suivre…

2 « J'aime »

Bon, je confirme, ça marche, enfin au moins un peu ! J’ai configuré le modul shelly en TLS no validation et ça marche. Par contre, ça ne marche pas en default TLS ou en USER TLS

si no validation veut dire sans validation d’une autorité, ça me semble logique.
Vous avez réussi à faire mieux ?
C’est bon comme cela pour la sécurité non ?