Siempre es tentador usar ejemplos rápidos sin credenciales, pero en un escenario real debes autenticar tu cliente MQTT. En este post veremos cómo añadir autenticación básica en C# y hablaremos de los riesgos de fuerza bruta y cómo mitigarlos.
Configuración de autenticación básica
Con la librería MQTTnet, basta con llamar a .WithCredentials()
al construir las opciones:
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using System;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var options = new MqttClientOptionsBuilder()
.WithTcpServer("broker.hivemq.com", 1883)
.WithClientId("dotnet-iot-secure-demo")
.WithCredentials("miUsuario", "miContrasenaSegura") // ← autenticación básica
.Build();
var factory = new MqttFactory();
var client = factory.CreateMqttClient();
client.UseConnectedHandler(async _ =>
{
Console.WriteLine("Conectado con autenticación básica");
await client.SubscribeAsync("iot/door/status");
});
client.UseApplicationMessageReceivedHandler(e =>
{
var payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
Console.WriteLine($"Mensaje: {payload}");
});
await client.ConnectAsync(options);
Console.WriteLine("Presiona ENTER para salir...");
Console.ReadLine();
}
}
Nota: Aunque usas usuario/contraseña, es crucial que tu broker esté configurado para TLS (puerto 8883) si quieres proteger las credenciales en tránsito.
Buenas prácticas para reforzar la seguridad Contraseñas robustas
Usa longitudes ≥16 caracteres, mezcla de mayúsculas, minúsculas, números y símbolos.
Limitación de intentos
Implementa bloqueo temporal tras N intentos fallidos (e.g., 5 intentos = bloqueo 5 min).
Filtrado por IP
Permite conexiones solo desde rangos confiables (por ejemplo, tu red corporativa).
TLS obligatorio
Nunca envíes credenciales en texto plano; configura tu cliente y broker para usar TLS.
var options = new MqttClientOptionsBuilder()
.WithTcpServer("tu-broker-seguro.com", 8883) // puerto estándar TLS
.WithClientId("cliente-seguro-csharp")
.WithCredentials("usuario", "contraseña")
.WithTls(new MqttClientOptionsBuilderTlsParameters {
UseTls = true,
AllowUntrustedCertificates = false, // rechaza certs no válidos
IgnoreCertificateChainErrors = false,
IgnoreCertificateRevocationErrors = false
})
.Build();
Rotación de credenciales
Cambia usuario/contraseña periódicamente (cada 3–6 meses).
Monitorización y alertas
Registra intentos fallidos y configura notificaciones si superan un umbral.
Top comments (0)