Automação IoT

Tasmota MQTT com TLS: Conecte um Dispositivo Tasmota ESP32 a um Broker na Porta 8883

Saiba quais builds do Tasmota incluem TLS, como funcionam o SetOption103 e o SetOption132 e como conectar um dispositivo Tasmota com ESP32 a um broker MQTT criptografado na porta 8883.

Relé inteligente ESP32 com um cadeado ilustrando tasmota mqtt tls na porta 8883
Rode isso no seu próprio broker MQTTTenha um broker MQTT privado e gerenciado no plano Free e comece com exemplos de código prontos.
Teste grátis Exemplos de código Sem cartão de crédito

O TLS no MQTT do Tasmota criptografa tudo o que o seu dispositivo envia e recebe, inclusive a senha do broker, para que você possa conectar tomadas e relés com segurança a um broker na internet. Este guia explica quais builds do Tasmota realmente incluem TLS, como funcionam as duas opções relacionadas ao TLS e como conectar um ESP32 rodando Tasmota a um broker na porta 8883 com validação de certificado adequada.

Por que o MQTT sem criptografia não basta

Na porta 1883, o MQTT trafega como texto puro. O pacote CONNECT leva o usuário e a senha às claras, e cada mensagem cmnd/.../POWER pode ser lida ou reenviada por qualquer um no caminho. Dentro de uma rede doméstica bem administrada, esse risco é pequeno. Quando o broker está na nuvem, o caminho passa pelo seu provedor e pela internet pública, e texto puro deixa de ser aceitável.

O TLS resolve três problemas de uma vez: criptografa a sessão, prova ao dispositivo que ele está falando com o broker verdadeiro e protege as credenciais. O guia de boas práticas de segurança MQTT cobre o panorama geral; este artigo se concentra em fazer o próprio Tasmota usar TLS.

Quais builds do Tasmota suportam MQTT com TLS?

É aqui que a maioria das pessoas trava. O TLS exige memória e espaço de código, por isso não é compilado em todos os binários.

Plataforma Build MQTT com TLS
ESP32 tasmota32 e suas variantes Incluído
ESP32 tasmota32-zbbridge Incluído
ESP8266 tasmota, tasmota-lite, tasmota-sensors e outras builds padrão Não incluído
ESP8266 Compilação própria com USE_MQTT_TLS Possível, mas com pouca memória

Se o seu dispositivo é uma tomada com ESP8266, você tem duas opções: compilar sua própria build com #define USE_MQTT_TLS no user_config_override.h ou aceitar MQTT sem criptografia em um broker local confiável e manter a parte da nuvem em outro lugar. No ESP8266, o handshake TLS consome boa parte da RAM disponível, então recursos como um grande conjunto de regras ou muitos sensores podem não caber junto com ele. Para projetos novos, escolha hardware ESP32.

Para ver o que você está rodando, abra a interface web e olhe o rodapé ou a página Information, que mostra a versão e o nome da build, por exemplo 14.2.0(release-tasmota32).

A versão importa para o Let's Encrypt

O Tasmota valida o certificado do broker contra uma pequena lista de certificados raiz embutidos, e não contra um pacote completo de CAs. A raiz do Let's Encrypt, ISRG Root X1, foi adicionada no Tasmota 13.4.1.2. Brokers como broker.connectmq.com usam certificados Let's Encrypt, então garanta que o dispositivo rode uma versão recente; se for mais antiga, atualize primeiro.

As duas opções de TLS explicadas

O Tasmota controla o TLS com dois comandos SetOption:

  • SetOption103 - 1 ativa o TLS na conexão MQTT, 0 o desativa. Só tem efeito em builds compiladas com TLS.
  • SetOption132 - escolhe como o certificado do servidor é validado. 0 (o padrão) o verifica contra as autoridades certificadoras embutidas. 1 muda para validação por fingerprint.

Deixe o SetOption132 em 0 para qualquer broker com certificado publicamente confiável. A validação por fingerprint fixa um certificado específico, e os certificados Let's Encrypt são renovados a cada poucos meses, então um fingerprint fixado vai quebrar na próxima renovação, a menos que você o atualize sempre.

Passo 1: Teste o TLS no MQTT do Tasmota com o servidor MQTT público

O servidor MQTT público em broker.connectmq.com, destinado a testes, aceita conexões TLS anônimas na porta 8883 com qualquer client ID único. Escolha um prefixo aleatório, como q8v3mz, e digite isto no console do 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%/

O dispositivo reinicia. Acompanhe o console: uma conexão bem-sucedida registra uma mensagem de que o TLS está conectado, seguida de MQT: Connected. O primeiro handshake pode levar um ou dois segundos em um ESP32; isso é normal.

Verifique a partir de um computador:

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

Você deve ver tele/relay1/LWT Online e as mensagens INFO e STATE. Envie um comando 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'

Lembre-se de que a área pública pode ser lida por qualquer pessoa mesmo via TLS. O TLS protege o transporte, não o acesso ao tópico. Não deixe em tópicos públicos um dispositivo que controle algo importante.

Passo 2: Conecte-se ao seu broker privado com credenciais

Para produção, crie um broker privado. Na ConnectMQ você escolhe um plano, cria um broker e recebe usuário, senha e client ID. O client ID é vinculado a essas credenciais, então digite-o exatamente:

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

Use o host exibido para o seu broker no portal, se for diferente. Após o reinício, abra o explorador de tópicos ao vivo do portal; home/tele/relay1/LWT com o valor retido Online confirma que o dispositivo está conectado via TLS com sua própria identidade.

Você pode confirmar as configurações ativas a qualquer momento com Status 6, que imprime host, porta, client e usuário do MQTT (a senha nunca é exibida).

Passo 3: Reforce a segurança do dispositivo

O TLS no link MQTT é apenas uma camada. Algumas configurações extras fecham as brechas óbvias:

  1. Defina uma senha de administração web com WebPassword <senha forte>; caso contrário, qualquer pessoa no seu Wi-Fi pode abrir a interface e ler as configurações de MQTT.
  2. Desative totalmente o servidor web com WebServer 0 nos dispositivos que você controla apenas via MQTT. Reative-o depois via MQTT, se precisar.
  3. Use um conjunto de credenciais por dispositivo. Se uma tomada for perdida ou comprometida, você revoga um conjunto sem mexer nos outros.
  4. Mantenha o firmware atualizado. Listas de raízes TLS e correções de segurança chegam com as novas versões. O Tasmota pode ser atualizado via MQTT com Upgrade 1.
  5. Não desative a validação. Fingerprints só com FF ou outros atalhos do tipo "aceitar qualquer coisa" eliminam a metade de autenticação do TLS.

Solução de problemas do TLS no MQTT do Tasmota

Sintoma Causa provável O que fazer
SetOption103 não tem efeito Build sem TLS Grave uma build tasmota32 ou compile com USE_MQTT_TLS
Handshake TLS falha, erro de certificado Firmware anterior ao 13.4.1.2 não tem a ISRG Root X1 Atualize o Tasmota
TLS falha logo após o boot e funciona depois Relógio ainda não ajustado Garanta que o NTP funcione; a verificação de certificados exige a hora correta
Conecta na 1883, mas não na 8883 Porta bloqueada no Wi-Fi de convidados ou por um firewall Teste a partir de outra rede
O dispositivo reinicia durante o handshake (ESP8266) Falta de memória Remova drivers, use ESP32
rc 5 não autorizado Credenciais ou client ID divergentes Copie de novo os valores do portal

Se você está criando um firmware próprio em vez de usar o Tasmota, os mesmos princípios de TLS valem no código Arduino; veja o tutorial de ESP32 com MQTT para um exemplo com WiFiClientSecure. O fluxo geral de configuração do Tasmota, incluindo topics e full topics, está no guia de configuração MQTT do Tasmota. A referência oficial de cada opção está na documentação de TLS do Tasmota.

Um broker na nuvem que fala TLS por padrão

Um broker auto-hospedado com TLS significa comprar ou renovar certificados, configurar listeners e aplicar patches no servidor. Um broker MQTT gerenciado como a ConnectMQ oferece TLS na 8883 e WebSocket seguro na 8084 com um certificado Let's Encrypt já configurado, além de bloqueio de IP após repetidas falhas de login. Isso permite que alguns relés ESP32 em casa ou em vários locais compartilhem um único broker seguro. Para uma visão mais ampla de onde esses dispositivos se encaixam, veja o guia de automação IoT.

Proteja seus dispositivos Tasmota com a ConnectMQ

Crie um broker Serverless gratuito em app.connectmq.com, sem cartão de crédito. Cole as credenciais geradas no comando de console acima, ative o SetOption103 e seus dispositivos Tasmota estarão conectados via TLS em minutos.

Perguntas frequentes

O Tasmota suporta MQTT sobre TLS?

Sim, nas builds tasmota32 para ESP32, de fábrica. As builds padrão para ESP8266 não incluem TLS; você precisa de uma build personalizada com USE_MQTT_TLS.

O que o SetOption103 faz no Tasmota?

SetOption103 1 ativa o TLS na conexão MQTT em builds que incluem suporte a TLS. Combine-o com MqttPort 8883.

Devo usar validação por fingerprint ou por CA?

Use a validação por CA (SetOption132 0) para brokers com certificados publicamente confiáveis, como os do Let's Encrypt. Os fingerprints quebram sempre que o certificado é renovado.

Por que minha conexão TLS do Tasmota falha com um firmware antigo?

Versões antigas não incluem o certificado ISRG Root X1 usado pelo Let's Encrypt, então a validação falha. Atualizar para o Tasmota 13.4.1.2 ou posterior resolve.

Artigos relacionados

Guia de Configuração do Zigbee2MQTT: do Coordenador ao Painel

Instale o Zigbee2MQTT com Docker, configure o coordenador e a conexão MQTT, pareie e renomeie dispositivos, controle-os via MQTT e veja seus estados em um painel, testando primeiro no servidor MQTT público (gratuito).

8 min de leitura

Todos os artigos →

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.