Pour échanger vos premiers messages en utilisant le protocole MQTT, vous pouvez installer un serveur aussi appelé courtier de messages (message broker) ainsi que les clients éditeur (publisher) et abonné (subscriber) adéquats en procédant comme suit :
L’abonné mosquitto_sub qui écoutait sur la queue de message dans le premier terminal devrait avoir reçu et affiché le texte envoyé depuis le second terminal par l’éditeur mosquitto_pub.
Lorsque vous aurez fini de jouer avec ces deux clients, vous pourrez stopper l’exécution de l’abonné mosquitto_sub à l’aide d’un simple CTRL+C ou CTRL+Z.
Pour écouter tous les “topics” présent sur le Broker il faut lancer la commande :
mosquitto_sub -t "#"
On voit passer tous les topics mais sans voir desquels il s'agit, on a juste le message.
Le courtier Mosquitto MQTT peut être configuré pour exiger l'authentification du client à l' aide d'un nom d'utilisateur et d'un mot de passe valides avant qu'une connexion ne soit autorisée.
La combinaison nom d'utilisateur et mot de passe est transmise en texte clair et n'est pas sécurisée sans une forme de cryptage de transport . (SSL)
Cependant, l'utilisation de l'authentification par nom d'utilisateur et par mot de passe offre un moyen simple de restreindre l'accès à un courtier.
Remarque : le nom d'utilisateur utilisé pour l'authentification peut également être utilisé pour restreindre l'accès aux rubriques .
Dans ce didacticiel, nous examinons comment configurer les restrictions de nom d'utilisateur et de mot de passe sur le courtier mosquitto, et comment cela fonctionne en examinant quelques exemples de connexion à l'aide de simples scripts de test Python.
Toutes les formes de restrictions, à savoir l'identifiant du client, le nom d'utilisateur / mot de passe, le sujet, etc. sont implémentées sur le courtier MQTT.
Une fois implémenté sur le courtier, il appartient au client de se conformer à ces restrictions afin de se connecter, de s'abonner et de publier.
Pour configurer le courtier Mosquitto, vous devrez:
Pour créer un fichier de mot de passe, vous devez utiliser l' utilitaire mosquitto_passwd fourni avec les outils client lors de l' installation du courtier mosquitto .
Il existe plusieurs façons de procéder:
Créez un fichier texte simple et entrez le nom d'utilisateur et les mots de passe, un pour chaque ligne, avec le nom d'utilisateur et le mot de passe séparés par deux points comme indiqué ci-dessous.
user:mot de passe
Maintenant, vous devez convertir le fichier de mot de passe qui crypte les mots de passe, accédez à une ligne de commande et tapez:
mosquitto_passwd -U passwordfile
Maintenant, si vous ouvrez à nouveau le fichier de mot de passe, vous devriez voir ceci:
user:(plein de caractères...)
Le fichier de mots de passe est maintenant prêt à être utilisé.
Vous créez le fichier de mot de passe à l'aide de la commande
mosquitto_passwd -c passwordfile utilisateur
Notez que vous devez entrer un nom d'utilisateur pour que cela fonctionne. Cela ajoute l'utilisateur au fichier de mots de passe.
Vous serez invité à entrer un mot de passe pour l'utilisateur.
Faites attention car le mot de passe n'est pas renvoyé et il ne semble pas avoir été accepté, mais c'est le cas.
Vous pouvez maintenant utiliser la commande
mosquitto_passwd -b passwordfile mot de passe utilisateur
pour ajouter des utilisateurs supplémentaires au fichier.
Vous pouvez également supprimer des utilisateurs du fichier de mots de passe à l'aide de la commande
mosquitto_passwd -D utilisateur du fichier de mot de passe
Remarque importante: Le mosquitto_passwd utilitaire n'a pas fonctionné sur Windows XP, et je devais utiliser l'utilitaire sur mon installation Linux.
Cependant, cela fonctionnait sous Windows 7 et 10, mais j'avais besoin d'ajouter le fichier msvcr100.dll . Voir Installation des scripts client Mosquitto Broker
Vous devrez copier le fichier de mot de passe dans le dossier etc \ mosquitto (linux) ou le dossier mosquitto (windows), puis éditer le fichier mosquiito.conf pour l'utiliser.
Les deux modifications que vous effectuez normalement dans le fichier mosquiito.conf consistent à définir allow anonymous sur false et à définir le chemin password_file .
/etc/mosquitto/passwd user:$6$lHwLOzxLiPPolGzi$h6..... /etc/mosquitto/conf.d/user allow_anonymous false password_file /etc/mosquitto/passwd
Si vous modifiez les fichiers de configuration, y compris le fichier de mot de passe, vous pouvez redémarrer le courtier mosquitto.
Cependant, sous Linux, vous pouvez recharger les fichiers de configuration sans redémarrer le courtier en utilisant les éléments suivants:
kill-HUP PID # où PID est l'ID de processus comme indiqué ci-dessous: relancer mosquitto
ou
systemctl restart mosquitto
Pour un IOT il faudra mettre l'user et le password au moment de la conexion.
ex :
// Attempt to connect if (client.connect("ESP8266Client", mqttUser, mqttPassword )) { if (debug ) { Serial.println("connected"); } // Once connected, publish an announcement... client.publish("mod_lum", "hello world"); // ... and resubscribe client.subscribe("#"); ... ... ...
Pour vous connecter à un courtier qui implémente des restrictions de nom d'utilisateur / mot de passe, vous devez utiliser la méthode d'assistance username_pw_set () du client Paho.
Vous devez l'appeler avant d'établir la connexion .
Le format est:
username_pw_set (nom d'utilisateur = "roger", mot de passe = "mot de passe")
Si vous essayez de vous connecter à un courtier sans les détails d'authentification corrects, la connexion sera rejetée.
Pour détecter cela, vous devrez examiner le rappel on_connect .
Si vous examinez la documentation de la méthode de rappel on_connect , vous verrez qu'elle accepte 4 paramètres.
on_connect (client, données utilisateur, drapeaux, rc):
Le paramètre rc est le code de retour et doit être égal à 0 pour une bonne connexion.
Un code retour de 5 indique une erreur d'authentification .
La méthode de rappel on_connect illustrée ci-dessous imprime simplement le code de retour et ressemble à ceci:
def on_connect (client, données utilisateur, drapeaux, rc):
print ("Indicateurs connectés", str (indicateurs), "code résultat", str (rc)) [/ contour]