Choisir entre un broker MQTT public ou privé se résume à une question : qui d'autre peut voir et manipuler vos messages ? Ce guide explique en quoi les deux diffèrent en matière de confidentialité, d'authentification, de limites et de fiabilité, et montre précisément quand et comment passer d'un serveur MQTT public gratuit à un broker privé sans réécrire votre code.
Qu'est-ce qu'un broker MQTT public ?
Un broker public est un serveur MQTT accessible depuis Internet auquel n'importe qui peut se connecter sans compte. Vous choisissez un client ID, vous vous abonnez à un topic et vous commencez à publier. Il en existe plusieurs ; ConnectMQ exploite le serveur MQTT public gratuit broker.connectmq.com, réservé aux tests et aux prototypes.
Les brokers publics sont conçus pour l'apprentissage, les démos, les tests de connectivité rapides et le partage d'exemples. Ils sont volontairement ouverts, et c'est précisément pour cette raison qu'ils ne sont pas faits pour de vraies données d'appareils.
Principales caractéristiques d'un broker public :
- Accès anonyme. Pas de nom d'utilisateur ni de mot de passe : n'importe qui peut se connecter.
- Espace de topics partagé. Tous les clients voient la même arborescence de topics. Si vous vous abonnez à un topic, un inconnu peut le faire aussi.
- Limites de protection. Pour rester utilisables par tous, les brokers publics plafonnent la taille des messages, le débit et les abonnements.
- Aucune garantie. Il s'agit d'un service communautaire gratuit, pas d'une plateforme de production.
Qu'est-ce qu'un broker MQTT privé ?
Un broker privé n'accepte que les clients disposant d'identifiants valides. Son espace de topics vous appartient, à vous et à vos appareils. Il peut être auto-hébergé ou managé ; dans les deux cas, ses traits distinctifs sont :
- Authentification. Les clients présentent un nom d'utilisateur, un mot de passe et généralement un client ID que le broker reconnaît.
- Isolation. Les autres tenants ne peuvent ni lire vos topics ni y publier.
- Chiffrement par défaut. TLS sur le port 8883 et Secure WebSocket sur le port 8084 pour les navigateurs.
- Des limites dimensionnées selon votre plan et non selon une foule d'utilisateurs anonymes.
Pour un contexte plus large sur les brokers MQTT, cet article présente le modèle publish/subscribe lui-même.
Broker MQTT public ou privé : vue d'ensemble
| Aspect | Serveur MQTT public gratuit (broker.connectmq.com) | Broker MQTT managé privé |
|---|---|---|
| Compte requis | Non | Oui, inscription gratuite |
| Authentification | Anonyme, tout client ID unique non vide | Nom d'utilisateur, mot de passe et client ID générés |
| Qui peut lire vos topics | Quiconque s'y abonne | Uniquement vos clients authentifiés |
| Taille des messages | Jusqu'à 64 Ko | 256 Ko en Serverless gratuit, 1 Mo en Serverless payant |
| Débit | 10 messages par seconde et par client | Quotas du plan |
| Abonnements | 10 par client, 8 niveaux de topic | Quotas du plan |
| QoS | 0, 1 et 2 | Jusqu'à 1 en gratuit, 2 en payant |
| Expiration de session | Jusqu'à 30 minutes | Configurée par vos clients dans les limites du plan |
| Idéal pour | Tutoriels, démos, tests rapides | Prototypes avec données réelles, pilotes, production |
Le protocole est identique. MQTT 3.1.1 et MQTT 5.0 se comportent de la même façon des deux côtés ; seuls l'accès et les limites changent.
Quand un broker public est le bon outil
Utilisez un broker public lorsque les données n'ont de valeur pour personne d'autre et que la rapidité prime :
- Apprendre MQTT. Publiez, abonnez-vous, testez les wildcards et les retained messages en quelques minutes.
- Ateliers et salles de cours. Chaque participant se connecte sans rien configurer.
- Tester une nouvelle bibliothèque ou une nouvelle carte. Vérifiez que votre ESP32 ou votre script Python parvient tout simplement à joindre un broker.
- Partager un exemple reproductible. Un article de blog ou un rapport de bug que tout le monde peut exécuter.
Un test rapide ressemble à ceci :
# Abonnement avec un préfixe unique pour ne pas vous mélanger aux autres utilisateurs
mosquitto_sub -h broker.connectmq.com -p 1883 -i demo-sub-c41d -t "connectmq/demo/c41d/#" -v
# Publication depuis un autre terminal
mosquitto_pub -h broker.connectmq.com -p 1883 -i demo-pub-c41d -t "connectmq/demo/c41d/hello" -m "it works"
Utilisez toujours un préfixe de topic aléatoire et unique comme connectmq/demo/c41d/. Il sépare votre trafic de test de celui des autres, mais ne le rend pas privé pour autant.
Quand il vous faut un broker privé
Passez à un broker privé dès que l'une de ces conditions est remplie :
- Les données identifient une personne, un logement, un véhicule ou un lieu. Des valeurs de capteurs qui révèlent quand une maison est vide sont sensibles.
- Les appareils acceptent des commandes. Sur un broker public, n'importe qui peut publier sur votre topic de commande.
- Vous menez un pilote avec un client. Il attendra de l'authentification et du chiffrement.
- Vous avez besoin de messages plus volumineux, de plus de débit ou de plus d'abonnements que ne le permettent les limites publiques.
- La disponibilité compte. On ne bâtit pas un produit sur un service de test public.
L'article sur les limites d'un broker MQTT public détaille chacune de ces contraintes.
Passer du public au privé sans réécriture
Comme les deux parlent MQTT standard, le changement se résume à une modification de configuration. Voici un exemple Python avec paho-mqtt 2.x qui lit sa cible dans des variables d'environnement, si bien que le même code fonctionne avec les deux :
import os
import ssl
import paho.mqtt.client as mqtt
HOST = os.getenv("MQTT_HOST", "broker.connectmq.com")
PORT = int(os.getenv("MQTT_PORT", "1883"))
USERNAME = os.getenv("MQTT_USERNAME") # non défini pour le broker public
PASSWORD = os.getenv("MQTT_PASSWORD")
CLIENT_ID = os.getenv("MQTT_CLIENT_ID", "demo-c41d-py")
TOPIC = os.getenv("MQTT_TOPIC", "connectmq/demo/c41d/temp")
def on_connect(client, userdata, flags, reason_code, properties):
print("Connected:", reason_code)
client.subscribe(TOPIC, qos=1)
client.publish(TOPIC, "21.7", qos=1)
def on_message(client, userdata, msg):
print(msg.topic, msg.payload.decode())
client = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id=CLIENT_ID,
protocol=mqtt.MQTTv5,
)
client.on_connect = on_connect
client.on_message = on_message
if USERNAME:
client.username_pw_set(USERNAME, PASSWORD)
if PORT == 8883:
client.tls_set(cert_reqs=ssl.CERT_REQUIRED)
client.connect(HOST, PORT, keepalive=60)
try:
client.loop_forever()
except KeyboardInterrupt:
client.disconnect()
Pour le broker privé, définissez les variables à partir de votre portail ConnectMQ :
export MQTT_HOST=broker.connectmq.com
export MQTT_PORT=8883
export MQTT_USERNAME=YOUR_USERNAME
export MQTT_PASSWORD=YOUR_PASSWORD
export MQTT_CLIENT_ID=YOUR_CLIENT_ID
export MQTT_TOPIC=plant1/line1/temp
python client.py
Notez que sur ConnectMQ, le client ID est lié aux identifiants délivrés : utilisez le client ID généré par le portail plutôt que d'en inventer un nouveau.
Erreurs fréquentes lors du passage
- Laisser le port 1883 dans le firmware de production. Utilisez 8883 (TLS) pour les appareils et 8084 avec le chemin
/mqttpour les navigateurs. - Conserver le préfixe de topic de démo. Renommez les topics selon une vraie structure, par exemple site/zone/ligne/appareil. Le guide du broker MQTT cloud donne des conseils de conception de topics pour les brokers hébergés.
- Coder les identifiants en dur dans un dépôt public. Chargez-les depuis des variables d'environnement, un coffre de secrets ou le provisioning des appareils.
- Réutiliser un même client ID sur plusieurs appareils. Le broker déconnecte l'ancienne session chaque fois que l'autre se connecte, ce qui provoque une boucle de reconnexion.
- Supposer que QoS 2 est disponible partout. Le plan Serverless gratuit prend en charge QoS jusqu'à 1. Si vous avez besoin de QoS 2, utilisez un plan payant ou concevez un traitement QoS 1 idempotent. Voir les niveaux de QoS MQTT expliqués.
Liste de contrôle de sécurité pour votre broker privé
Passer à un broker privé supprime l'accès anonyme, mais quelques habitudes déterminent le niveau de sécurité réel du résultat :
- Un jeu d'identifiants par appareil ou par service. Si un appareil est perdu ou compromis, vous pouvez le révoquer sans toucher aux autres.
- TLS partout en dehors du laboratoire. Vérifiez le certificat du serveur dans votre client au lieu de désactiver la vérification pour contourner une erreur.
- Séparer les topics de télémétrie et de commande. Faites apparaître clairement dans l'arborescence quels messages modifient l'état d'équipements réels, et contrôlez qui y publie.
- Surveiller le journal des connexions. Des échecs de connexion répétés signalent généralement un appareil mal configuré ou un identifiant qui a fuité. Votre broker peut bloquer une IP après des échecs répétés, mais vous voudrez quand même en trouver la cause.
- Garder un préfixe de topic de test pour les expérimentations, afin que le trafic de débogage ne se mélange jamais aux données de production.
Le guide des bonnes pratiques de sécurité MQTT approfondit chacun de ces points.
Une règle simple
Utilisez le broker public pour tout ce que vous seriez prêt à publier sur un forum. Utilisez un broker privé pour tout le reste. Comme le passage ne coûte que quelques valeurs de configuration, il n'y a aucune raison de laisser de vrais appareils sur un broker public au-delà du premier après-midi.
Obtenez votre broker privé sur ConnectMQ
Quand vous êtes prêt à dépasser le stade des tests, inscrivez-vous gratuitement au plan Serverless, sans carte bancaire. Créez un broker, copiez le nom d'utilisateur, le mot de passe et le client ID générés, puis pointez le même code vers le port 8883. Le client MQTT intégré au navigateur et l'explorateur de topics en direct du portail vous permettent de confirmer le trafic immédiatement. Découvrez ConnectMQ et comment un broker MQTT managé vous libère du travail d'exploitation.
Questions fréquentes
D'autres personnes peuvent-elles voir mes messages sur un broker MQTT public ?
Oui. N'importe qui peut s'abonner à n'importe quel topic sur un broker public, y compris avec des wildcards comme #. N'envoyez jamais de données personnelles, d'identifiants ni de commandes pilotant de vrais équipements.
Un broker MQTT privé est-il toujours chiffré ?
Pas automatiquement, mais un bon broker MQTT managé privé propose TLS sur le port 8883 et Secure WebSocket sur le port 8084. Utilisez ces ports en production plutôt que du TCP en clair sur le port 1883.
Dois-je modifier mon code pour passer du public au privé ?
En général, seuls l'hôte, le port, les identifiants et le client ID changent. Si votre code les lit depuis la configuration, le passage prend quelques minutes.
Un broker privé gratuit suffit-il pour un prototype ?
Pour de nombreux prototypes, oui. Le plan Serverless gratuit de ConnectMQ autorise jusqu'à 25 connexions, QoS jusqu'à 1 et des messages de 256 Ko, ce qui couvre la plupart des petits pilotes.



