Automatisation IoT

Tasmota MQTT TLS : connecter un appareil Tasmota ESP32 à un broker sur le port 8883

Découvrez quels builds Tasmota incluent TLS, comment fonctionnent SetOption103 et SetOption132, et comment connecter un appareil Tasmota ESP32 à un broker MQTT chiffré sur le port 8883.

Relais connecté ESP32 avec un symbole de cadenas illustrant Tasmota MQTT TLS sur le port 8883
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

Tasmota MQTT TLS chiffre tout ce que votre appareil envoie et reçoit, y compris le mot de passe du broker, pour que vous puissiez connecter sans risque prises et relais à un broker sur Internet. Ce guide explique quels builds Tasmota incluent réellement TLS, comment fonctionnent les deux options liées à TLS et comment connecter un ESP32 sous Tasmota à un broker sur le port 8883 avec une validation de certificat correcte.

Pourquoi MQTT en clair ne suffit pas

Sur le port 1883, MQTT circule en texte clair. Le paquet CONNECT transporte le nom d'utilisateur et le mot de passe en clair, et chaque message cmnd/.../POWER peut être lu ou rejoué par quiconque se trouve sur le chemin. Dans un réseau domestique bien géré, ce risque est faible. Dès que le broker est dans le cloud, le chemin traverse votre FAI et l'Internet public, et le texte clair n'est plus acceptable.

TLS résout trois problèmes à la fois : il chiffre la session, il prouve à l'appareil qu'il parle au vrai broker et il protège les identifiants. Le guide des bonnes pratiques de sécurité MQTT couvre le sujet dans son ensemble ; cet article se concentre sur la mise en œuvre dans Tasmota.

Quels builds Tasmota prennent en charge MQTT TLS ?

C'est là que la plupart des gens bloquent. TLS a besoin de mémoire et d'espace de code ; il n'est donc pas compilé dans tous les binaires.

Plateforme Build MQTT TLS
ESP32 tasmota32 et ses variantes Inclus
ESP32 tasmota32-zbbridge Inclus
ESP8266 tasmota, tasmota-lite, tasmota-sensors et les autres builds standard Non inclus
ESP8266 Compilé soi-même avec USE_MQTT_TLS Possible, mais la mémoire est juste

Si votre appareil est une prise ESP8266, vous avez deux options : compiler votre propre build avec #define USE_MQTT_TLS dans user_config_override.h, ou accepter MQTT en clair sur un broker local de confiance et gérer la partie cloud ailleurs. Sur ESP8266, la négociation TLS consomme une grande partie de la RAM disponible ; des fonctions comme un moteur de règles volumineux ou de nombreux capteurs risquent de ne pas tenir à côté. Pour les nouveaux projets, choisissez du matériel ESP32.

Pour vérifier ce que vous utilisez, ouvrez l'interface web et regardez le pied de page ou la page Information, qui affiche la version et le nom du build, par exemple 14.2.0(release-tasmota32).

La version compte pour Let's Encrypt

Tasmota valide le certificat du broker par rapport à une courte liste de certificats racines intégrés, et non à un bundle complet d'autorités de certification. La racine Let's Encrypt, ISRG Root X1, a été ajoutée dans Tasmota 13.4.1.2. Des brokers comme broker.connectmq.com utilisent des certificats Let's Encrypt ; assurez-vous donc que l'appareil tourne sur une version récente et mettez-le à jour s'il est plus ancien.

Les deux options TLS expliquées

Tasmota contrôle TLS avec deux commandes SetOption :

  • SetOption103 - 1 active TLS pour la connexion MQTT, 0 le désactive. Elle n'a d'effet que sur les builds compilés avec TLS.
  • SetOption132 - choisit la méthode de validation du certificat serveur. 0 (par défaut) le vérifie par rapport aux autorités de certification intégrées. 1 passe à la validation par empreinte.

Laissez SetOption132 à 0 pour tout broker doté d'un certificat publiquement reconnu. La validation par empreinte épingle un certificat précis, or les certificats Let's Encrypt sont renouvelés tous les quelques mois : une empreinte épinglée cassera au prochain renouvellement, à moins de la mettre à jour en permanence.

Étape 1 : tester Tasmota MQTT TLS sur le broker public

Le serveur MQTT public gratuit broker.connectmq.com accepte les connexions TLS anonymes sur le port 8883 avec n'importe quel client ID unique. Choisissez un préfixe aléatoire comme q8v3mz et saisissez ceci dans la console Tasmota :

Backlog SetOption103 1; SetOption132 0; MqttHost broker.connectmq.com; MqttPort 8883; MqttClient tasmota-q8v3mz; MqttUser 0; MqttPassword 0; Topic relay1; FullTopic connectmq/demo/q8v3mz/%prefix%/%topic%/

L'appareil redémarre. Surveillez la console : une connexion réussie consigne un message indiquant que TLS est connecté, suivi de MQT: Connected. La première négociation peut prendre une à deux secondes sur un ESP32 ; c'est normal.

Vérifiez depuis un ordinateur :

mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -i watch-q8v3mz -t 'connectmq/demo/q8v3mz/#' -v

Vous devriez voir tele/relay1/LWT Online ainsi que les messages INFO et STATE. Envoyez une commande via TLS :

mosquitto_pub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -i send-q8v3mz -t 'connectmq/demo/q8v3mz/cmnd/relay1/POWER' -m 'TOGGLE'

N'oubliez pas que l'espace public reste lisible par tous, même via TLS. TLS protège le transport, pas l'accès au topic. Ne laissez pas sur des topics publics un appareil qui pilote quoi que ce soit d'important.

Étape 2 : se connecter à votre broker privé avec des identifiants

Pour la production, créez un broker privé. Dans ConnectMQ, vous choisissez un plan, créez un broker et recevez un nom d'utilisateur, un mot de passe et un client ID. Le client ID est lié à ces identifiants ; saisissez-le donc exactement :

Backlog SetOption103 1; MqttHost broker.connectmq.com; MqttPort 8883; MqttClient YOUR_CLIENT_ID; MqttUser YOUR_USERNAME; MqttPassword YOUR_PASSWORD; Topic relay1; FullTopic home/%prefix%/%topic%/

Utilisez l'hôte indiqué pour votre broker dans le portail s'il diffère. Après le redémarrage, ouvrez l'explorateur de topics en direct du portail ; home/tele/relay1/LWT avec la valeur retenue Online confirme que l'appareil est connecté via TLS avec sa propre identité.

Vous pouvez vérifier à tout moment les réglages actifs avec Status 6, qui affiche l'hôte MQTT, le port, le client et l'utilisateur (le mot de passe n'est jamais affiché).

Étape 3 : durcir l'appareil

TLS sur la liaison MQTT n'est qu'une couche. Quelques réglages supplémentaires comblent les failles évidentes :

  1. Définissez un mot de passe d'administration web avec WebPassword <strong password>, sinon n'importe qui sur votre Wi-Fi peut ouvrir l'interface et lire les réglages MQTT.
  2. Désactivez complètement le serveur web avec WebServer 0 sur les appareils que vous ne pilotez que via MQTT. Réactivez-le plus tard via MQTT si besoin.
  3. Utilisez un jeu d'identifiants par appareil. Si une prise est perdue ou compromise, vous révoquez un seul jeu sans toucher aux autres.
  4. Gardez le firmware à jour. Les listes de racines TLS et les correctifs de sécurité arrivent avec les nouvelles versions. Tasmota peut se mettre à jour via MQTT avec Upgrade 1.
  5. Ne désactivez pas la validation. Les empreintes remplies de FF ou autres contournements « tout accepter » suppriment la moitié authentification de TLS.

Dépannage de Tasmota MQTT TLS

Symptôme Cause probable Que faire
SetOption103 n'a aucun effet Build sans TLS Flashez un build tasmota32 ou compilez avec USE_MQTT_TLS
La négociation TLS échoue, erreur de certificat Firmware antérieur à 13.4.1.2, sans ISRG Root X1 Mettez Tasmota à jour
TLS échoue juste après le démarrage, fonctionne ensuite Horloge pas encore réglée Vérifiez que NTP fonctionne ; la vérification des certificats exige l'heure exacte
Se connecte sur 1883 mais pas sur 8883 Port bloqué sur le Wi-Fi invité ou par un pare-feu Testez depuis un autre réseau
L'appareil redémarre pendant la négociation (ESP8266) Mémoire insuffisante Retirez des pilotes, utilisez un ESP32
rc 5 non autorisé Identifiants ou client ID incorrects Recopiez les valeurs depuis le portail

Si vous développez un firmware personnalisé au lieu d'utiliser Tasmota, les mêmes principes TLS s'appliquent en code Arduino ; consultez le tutoriel ESP32 MQTT pour un exemple avec WiFiClientSecure. La procédure générale de configuration de Tasmota, topics et full topics compris, se trouve dans le guide de configuration Tasmota MQTT. La référence officielle de chaque option se trouve dans la documentation TLS de Tasmota.

Un broker cloud qui parle TLS par défaut

Un broker auto-hébergé avec TLS implique d'acheter ou de renouveler des certificats, de configurer des listeners et de patcher le serveur. Un broker MQTT managé comme ConnectMQ propose TLS sur 8883 et WebSocket sécurisée sur 8084 avec un certificat Let's Encrypt déjà en place, ainsi que le blocage des IP après des échecs de connexion répétés. Quelques relais ESP32 dans la maison connectée ou répartis sur plusieurs sites peuvent ainsi partager un seul broker sécurisé. Home Assistant, Jeedom et Domoticz savent aussi communiquer en MQTT et peuvent s'abonner aux mêmes topics. Pour une vue d'ensemble de la place de ces appareils, consultez le guide de l'automatisation IoT.

Sécurisez vos appareils Tasmota avec ConnectMQ

Créez un broker Serverless gratuit sur app.connectmq.com, sans carte bancaire. Collez les identifiants générés dans la commande console ci-dessus, activez SetOption103, et vos appareils Tasmota sont connectés via TLS en quelques minutes.

Questions fréquentes

Tasmota prend-il en charge MQTT sur TLS ?

Oui, d'emblée sur les builds ESP32 tasmota32. Les builds ESP8266 standard n'incluent pas TLS ; il vous faut un build personnalisé avec USE_MQTT_TLS.

À quoi sert SetOption103 dans Tasmota ?

SetOption103 1 active TLS pour la connexion MQTT sur les builds qui prennent en charge TLS. Combinez-la avec MqttPort 8883.

Faut-il utiliser la validation par empreinte ou par autorité de certification ?

Utilisez la validation par autorité de certification (SetOption132 0) pour les brokers dotés de certificats publiquement reconnus comme Let's Encrypt. Les empreintes cassent à chaque renouvellement du certificat.

Pourquoi ma connexion TLS Tasmota échoue-t-elle avec un ancien firmware ?

Les anciennes versions n'incluent pas le certificat ISRG Root X1 utilisé par Let's Encrypt ; la validation échoue donc. Passer à Tasmota 13.4.1.2 ou ultérieur règle le problème.

Articles liés

Guide d'installation de Zigbee2MQTT : du coordinateur au tableau de bord

Installez Zigbee2MQTT avec Docker, configurez le coordinateur et la connexion MQTT, appairez et renommez les appareils, pilotez-les via MQTT et affichez leurs états sur un tableau de bord, en testant d'abord sur le serveur MQTT public gratuit.

8 min de lecture

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.