MQTT avec Mosquitto

Vos premiers messages MQTT avec Mosquitto sous Ubuntu

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 :

  1. ouvrez un terminal ;
  2. exécutez la commande sudo apt-get install mosquitto pour installer le serveur Mosquitto proposé par la fondation Eclipse ;
  3. exécutez la commande sudo apt-get install mosquitto-clients pour installer les clients mosquitto_pub et mosquitto_sub, respectivements éditeur et abonné ;
  4. exécutez la commande mosquitto_sub -t 'this/is/a/topic' pour créer un client abonné qui va écouter sur la queue de messages passée avec le paramètre t — pour topic, ou thème en français ;
  5. ouvrez un autre terminal ;
  6. exécutez la commande mosquitto_pub -t 'this/is/a/topic' -m 'Hello World!' pour créer un client éditeur qui va publier la chaîne de caractères de votre choix passée avec le paramètre m — pour message ;

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.

MQTT authentifié

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.

Configuration du courtier Mosquitto

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:

  • Créer un fichier de mot de passe
  • Modifiez le fichier mosquitto.conf pour forcer l'utilisation du mot de passe.

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:

Méthode 1

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é.

Méthode 2

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

Utilisation du fichier de mot de passe

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 .

Exemples de paramètres :
/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")

Détection des erreurs d'authentification

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]
test/mosquitto.txt · Dernière modification : 2020/08/14 08:18 de chef
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0