Automatización IoT

Tasmota MQTT TLS: conecta un dispositivo ESP32 con Tasmota a un broker en el puerto 8883

Descubre qué compilaciones de Tasmota incluyen TLS, cómo funcionan SetOption103 y SetOption132 y cómo conectar un dispositivo ESP32 con Tasmota a un broker MQTT cifrado en el puerto 8883.

Relé inteligente ESP32 con un candado que ilustra Tasmota MQTT TLS en el puerto 8883
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

Tasmota MQTT TLS cifra todo lo que tu dispositivo envía y recibe, incluida la contraseña del broker, para que puedas conectar con seguridad enchufes y relés a un broker en internet. Esta guía explica qué compilaciones de Tasmota incluyen realmente TLS, cómo funcionan las dos opciones relacionadas con TLS y cómo conectar un ESP32 con Tasmota a un broker en el puerto 8883 con una validación de certificado correcta.

Por qué MQTT sin cifrar no es suficiente

En el puerto 1883, MQTT viaja como texto plano. El paquete CONNECT lleva el usuario y la contraseña en claro, y cualquiera que esté en el camino puede leer o reproducir cada mensaje cmnd/.../POWER. Dentro de una red doméstica bien gestionada ese riesgo es pequeño. Cuando el broker está en la nube, el camino atraviesa tu proveedor de internet y la internet pública, y el texto plano deja de ser aceptable.

TLS resuelve tres problemas a la vez: cifra la sesión, demuestra al dispositivo que está hablando con el broker real y protege las credenciales. La guía de buenas prácticas de seguridad MQTT cubre el panorama general; este artículo se centra en conseguir que el propio Tasmota lo haga.

¿Qué compilaciones de Tasmota admiten MQTT TLS?

Aquí es donde se atasca la mayoría. TLS necesita memoria y espacio de código, así que no se compila en todos los binarios.

Plataforma Compilación MQTT TLS
ESP32 tasmota32 y sus variantes Incluido
ESP32 tasmota32-zbbridge Incluido
ESP8266 tasmota, tasmota-lite, tasmota-sensors y otras compilaciones estándar No incluido
ESP8266 Compilación propia con USE_MQTT_TLS Posible, pero con poca memoria

Si tu dispositivo es un enchufe ESP8266, tienes dos opciones: compilar tu propia versión con #define USE_MQTT_TLS en user_config_override.h, o aceptar MQTT sin cifrar en un broker local de confianza y mantener la parte de la nube en otro lugar. En ESP8266, el handshake TLS consume una gran parte de la RAM disponible, así que funciones como un gran motor de reglas o muchos sensores pueden no caber junto a él. Para proyectos nuevos, elige hardware ESP32.

Para comprobar qué estás ejecutando, abre la interfaz web y mira el pie de página o la página Information, que muestra la versión y el nombre de la compilación, por ejemplo 14.2.0(release-tasmota32).

La versión importa para Let's Encrypt

Tasmota valida el certificado del broker con una pequeña lista de certificados raíz integrados en lugar de un paquete de CA completo. La raíz de Let's Encrypt, ISRG Root X1, se añadió en Tasmota 13.4.1.2. Brokers como broker.connectmq.com usan certificados de Let's Encrypt, así que asegúrate de que el dispositivo ejecuta una versión reciente; si es más antigua, actualízala primero.

Las dos opciones TLS explicadas

Tasmota controla TLS con dos comandos SetOption:

  • SetOption103 - 1 activa TLS en la conexión MQTT y 0 lo desactiva. Solo tiene efecto en compilaciones con TLS.
  • SetOption132 - elige cómo se valida el certificado del servidor. 0 (por defecto) lo comprueba con las autoridades de certificación integradas. 1 cambia a validación por huella digital (fingerprint).

Deja SetOption132 en 0 para cualquier broker con un certificado de confianza pública. La validación por huella fija un certificado concreto, y los certificados de Let's Encrypt se renuevan cada pocos meses, así que una huella fijada dejará de funcionar en la siguiente renovación a menos que la actualices continuamente.

Paso 1: probar Tasmota MQTT TLS en el broker público

El servidor MQTT público gratuito en broker.connectmq.com acepta conexiones TLS anónimas en el puerto 8883 con cualquier client ID único. Elige un prefijo aleatorio como q8v3mz e introduce esto en la consola de 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%/

El dispositivo se reinicia. Observa la consola: una conexión correcta registra un mensaje de que TLS está conectado seguido de MQT: Connected. El primer handshake puede tardar uno o dos segundos en un ESP32; es normal.

Verifícalo desde un ordenador:

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

Deberías ver tele/relay1/LWT Online y los mensajes INFO y STATE. Envía un comando por 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'

Recuerda que cualquiera puede leer el área pública, incluso con TLS. TLS protege el transporte, no el acceso al topic. No dejes en topics públicos un dispositivo que controle algo importante.

Paso 2: conectarse a tu broker privado con credenciales

Para producción, crea un broker privado. En ConnectMQ eliges un plan, creas un broker y recibes un usuario, una contraseña y un client ID. El client ID está vinculado a esas credenciales, así que introdúcelo exactamente:

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%/

Usa el host que aparece para tu broker en el portal si es distinto. Tras el reinicio, abre el explorador de topics en directo del portal; home/tele/relay1/LWT con el valor retenido Online confirma que el dispositivo está conectado por TLS con su propia identidad.

Puedes confirmar los ajustes activos en cualquier momento con Status 6, que muestra el host, el puerto, el cliente y el usuario MQTT (la contraseña nunca se muestra).

Paso 3: reforzar el dispositivo

TLS en el enlace MQTT es solo una capa. Unos pocos ajustes adicionales cierran los huecos evidentes:

  1. Establece una contraseña de administración web con WebPassword <strong password>; de lo contrario, cualquiera en tu Wi-Fi puede abrir la interfaz y leer los ajustes MQTT.
  2. Desactiva por completo el servidor web con WebServer 0 en los dispositivos que solo controlas por MQTT. Puedes volver a activarlo más tarde por MQTT si lo necesitas.
  3. Usa un conjunto de credenciales por dispositivo. Si un enchufe se pierde o se ve comprometido, revocas un conjunto sin tocar los demás.
  4. Mantén el firmware actualizado. Las listas de raíces TLS y las correcciones de seguridad llegan con las nuevas versiones. Tasmota puede actualizarse por MQTT con Upgrade 1.
  5. No desactives la validación. Las huellas compuestas solo de FF u otros apaños de "aceptar cualquier cosa" eliminan la mitad de autenticación de TLS.

Solución de problemas de Tasmota MQTT TLS

Síntoma Causa probable Qué hacer
SetOption103 no tiene efecto Compilación sin TLS Flashea una compilación tasmota32 o compila con USE_MQTT_TLS
El handshake TLS falla con un error de certificado El firmware anterior a 13.4.1.2 no incluye ISRG Root X1 Actualiza Tasmota
TLS falla justo tras arrancar y funciona después El reloj aún no está ajustado Asegúrate de que NTP funciona; la comprobación de certificados necesita la hora correcta
Se conecta en 1883 pero no en 8883 Puerto bloqueado en la Wi-Fi de invitados o por un cortafuegos Prueba desde otra red
El dispositivo se reinicia durante el handshake (ESP8266) Memoria insuficiente Elimina drivers, usa ESP32
rc 5 no autorizado Credenciales o client ID que no coinciden Vuelve a copiar los valores del portal

Si construyes un firmware propio en lugar de usar Tasmota, los mismos principios de TLS se aplican en código Arduino; consulta el tutorial de ESP32 con MQTT para ver un ejemplo con WiFiClientSecure. El flujo general de configuración de Tasmota, incluidos los topics y full topics, está en la guía para configurar Tasmota MQTT. La referencia oficial de cada opción se encuentra en la documentación TLS de Tasmota.

Un broker en la nube que habla TLS por defecto

Un broker autoalojado con TLS implica comprar o renovar certificados, configurar listeners y aplicar parches al servidor. Un broker MQTT gestionado como ConnectMQ ofrece TLS en el 8883 y WebSocket seguro en el 8084 con un certificado de Let's Encrypt ya configurado, además del bloqueo de IP tras repetidos inicios de sesión fallidos. Así, unos cuantos relés ESP32 en casa o repartidos por varias sedes pueden compartir un único broker seguro. Para ver dónde encajan estos dispositivos en el conjunto, consulta la guía de automatización IoT.

Protege tus dispositivos Tasmota con ConnectMQ

Crea un broker Serverless gratuito en app.connectmq.com, sin tarjeta de crédito. Pega las credenciales generadas en el comando de consola anterior, activa SetOption103 y tus dispositivos Tasmota estarán conectados por TLS en minutos.

Preguntas frecuentes

¿Tasmota admite MQTT sobre TLS?

Sí, de serie en las compilaciones ESP32 tasmota32. Las compilaciones estándar para ESP8266 no incluyen TLS; necesitas una compilación personalizada con USE_MQTT_TLS.

¿Qué hace SetOption103 en Tasmota?

SetOption103 1 activa TLS en la conexión MQTT en las compilaciones que incluyen soporte TLS. Combínalo con MqttPort 8883.

¿Debo usar validación por huella o validación por CA?

Usa la validación por CA (SetOption132 0) en brokers con certificados de confianza pública como los de Let's Encrypt. Las huellas dejan de funcionar cada vez que se renueva el certificado.

¿Por qué falla mi conexión TLS de Tasmota con un firmware antiguo?

Las versiones antiguas no incluyen el certificado ISRG Root X1 que usa Let's Encrypt, así que la validación falla. Actualizar a Tasmota 13.4.1.2 o posterior lo soluciona.

Artículos relacionados

Guía para configurar Zigbee2MQTT: del coordinador al panel

Instala Zigbee2MQTT con Docker, configura el coordinador y la conexión MQTT, empareja y renombra dispositivos, contrólalos por MQTT y consulta sus estados en un panel, probando primero en un servidor MQTT público gratuito.

8 min de lectura

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.