2012-04-07 10 views
20

Ahora tengo todo configurado y funcionando para MQTT. Estoy utilizando el wmqtt.jar IBM y el corredor mosquitto ..MQTT Security: cómo evitar que los abusadores se suscriban a los temas?

Mi Java Servlet crea una MQTTConnection al corredor y publica bajo el tema "AndroidDeviceID/myAppName" ..

El cliente Android se adhiere a la misma tema ...

Me parece que si alguien supiera el nombre del dispositivo de mi usuario, podrían crear una aplicación de Android simple y suscribirse a ese tema en mi broker MQTT. Luego reciben todas las notificaciones (en este caso mensajes de mensajería instantánea) de mis usuarios ...

¿Cómo se evita esto correctamente?

+1

Este enlace puede ser beneficioso para los conceptos MQTT y seguridad: http: //www.hivemq.com/mqtt-security-fundamentals/ –

Respuesta

13

Mosquitto proporciona seguridad a través de la autenticación de nombre de usuario y contraseña, así como también limita el acceso a temas con listas de control de acceso. Hay detalles en la página del manual mosquitto.conf: http://mosquitto.org/man/mosquitto-conf-5.html

+2

Muchas gracias, acabo de empezar a migrar a la última versión de Java MQTT - Eclipse Paho - http://git.eclipse.org/c/p aho/org.eclipse.paho.mqtt.java.git/parece que esto será compatible con nombre de usuario/contraseñas en connect. Un problema que todavía tengo es la inclusión. Todos mis otros datos se envían a través de SSL ... Los mensajes MQTT serán vistas previas de los mensajes de mensajería instantánea, por lo que considero que esto es confidencial. ¿Alguna idea sobre cómo evitar fisgonear el tráfico de la red? –

+0

Bueno, supongo que puedo hacer mi propio método de ofuscación simple en el texto que va y viene, hmm .. Sin embargo, no es todo lo que obtengo con el cifrado SSL y la autenticación de certificados. Pero tal vez sin ir al intermediario MMQT comercial de IBM, ¿qué es lo mejor que puedo hacer? –

+0

Mosquitto recibirá soporte SSL en el futuro. Mientras tanto, puedes hacer un simple cifrado de mensajes ... No es la mejor respuesta que me doy cuenta. – ralight

3

En general, MQTT mantiene la seguridad muy "ligera", ya que fue diseñada originalmente para su uso con redes de sensores cerradas. Depende de la implementación del intermediario proporcionar, p. SSL y decidir cómo manejar el backend de nombre de usuario/contraseña.

La encriptación de datos de mensaje nunca será provista por el protocolo en sí y es algo que normalmente se hace en la capa de aplicación si esto es crítico.

5

ACL es lo que restringe los clientes suscritos a los temas, yo estoy usando un auth-plugin para hacerlo, aquí está el enlace mosquitto auth plugin

+2

¿Has usado el complemento auth con Redis? Estoy luchando con los valores para: auth_opt_redis_userquery ?? Y auth_opt_redis_aclquery ?? – TheAshwaniK

+2

estoy usando el complemento auth con mysql. investigue la [implementación] (https://github.com/jpmens/mosquitto-auth-plug/blob/master/be-redis.c) puede ayudarlo. – achuth

2

Si necesita una forma más personalizada de manejo de control de acceso y autorización de temas, tratar utilizando el agente de HiveMQ MQTT. Como se explica en la documentación, puede implementar su propio comportamiento con un complemento. Este enfoque le permite decidir completamente cómo se maneja la autenticación y autorización de clientes, publica y suscribe [1]. Si está interesado, la mejor manera de comenzar con su propio complemento se describe aquí [2].

Por cierto, también es muy fácil configurar TLS para HiveMQ [3].

Cristiano (HiveMQ Team)

[1] http://www.hivemq.com/docs/plugins/1.5.0/#auth-permission-chapter

[2] http://www.hivemq.com/documentations/getting-started-plugins/

[3] http://www.hivemq.com/docs/hivemq/1.5.0/#hivemqdocs_ssl_tls

Cuestiones relacionadas