Repository navigation
mqtt seguranca
Home > MQTT > Segurança no MQTT
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Nível: intermediário
Em uma frase: TLS para ninguém ler o caminho, um certificado que o cliente confere, e uma identificação do cliente que o broker aceita - cada nuvem pede uma.
Você vai precisar: a OpenSSL 1.1 ou 3 ao lado do executável (dependências).
A regra é a do cliente HTTP: o evento OnValidateServerCert
decide; sem ele, um pin de SSL.Pins que valha para aquele endereço; sem pin, a
OpenSSL (cadeia e nome). Para um broker com certificado autoassinado, ponha em
SSL.Pins a impressão digital SHA-256 dele. SSL.CAFile aceita uma autoridade sua.
Certificado do cliente (TLS mútuo): SSL.CertFile e SSL.KeyFile.
| broker | componente |
|---|---|
| usuário e senha (Mosquitto, o do RAL) |
UserName/Password ou TRALMQTTBasicAuth
|
| SCRAM (MQTT 5.0) |
TRALMQTTSCRAMAuth (Mechanism: SHA-1, SHA-256, SHA-512) |
| token de um servidor de login (JWT, OAuth2) |
TRALMQTTNetTokenAuth com um TRALClientJWTAuth ou TRALClientOAuth2 em Source
|
| JWT assinado pelo próprio aparelho (nuvens de IoT) | TRALMQTTSelfTokenAuth |
| assinatura de acesso compartilhado (Azure IoT Hub, Event Grid) | TRALMQTTSASAuth |
| outro método de autenticação do 5.0 |
TRALMQTTCustomAuth (Method e eventos) |
Ligue o componente em Authentication do cliente. Os que usam token renovam antes de
vencer.
- TLS:
SSL.Enabled,SSL.CertFile,SSL.KeyFile(ouCertPEM/KeyPEM); exigir certificado do cliente:SSL.RequireClientCertcomSSL.CAFile. Um certificado autoassinado sai do certificado automático. - Quem entra:
Users,AuthMethods(SCRAM) ou os autenticadores do RAL ligados ao broker, como a qualquer servidor; comPasswordIsTokena senha vai a eles como token (TRALServerJWTAuth). - Os plugins de segurança do servidor (lista branca e negra, força bruta, inundação) julgam cada CONNECT (segurança).
-
Permissionslimita o que cada um lê e escreve (broker).
| sintoma | causa | o que fazer |
|---|---|---|
| "certificate" ao conectar | autoassinado, ou o nome não bate | pin em SSL.Pins, ou SSL.CAFile
|
| "Every SSL.Pins line must end in the SHA-256" | pin em outro formato | 64 dígitos hexadecimais, com ou sem :
|
| SCRAM recusado no 3.1.1 | autenticação estendida é do 5.0 | ProtocolVersion := mv50 |
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- Servidor SOAP 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar