Para crear un nivel de control de cuáles dispositivos operan con el servidor MQTT, se añaden usuarios y contraseñas.
1. Crear usuarios y contraseñas
Mosquitto dispone de una instruccion para generar un archivo de contraseñas: mosquitto_passwd. La instruccion para crear el usuario requiere escribir una contraseña a ser usada solo para el servicio MQTT:
sudo mosquitto_passwd -c /etc/mosquitto/passwd usuarioprueba
Para cada usuario se validan las contraseñas, se solicita escribirlas dos veces:
Nota puede usar para el ejemplo : «usuarioprueba» , «usuarioclave», al ejercutar la instruccion anterior tendrá lo siguiente, teniendo que digitar la clave seleccionada.
pi@raspberrypi:~ $ sudo mosquitto_passwd -c /etc/mosquitto/passwd usuarioprueba Password: Reenter password:
2. Añadir control de usuarios a la configuración
Añadir el control de usuarios require modificar el archivo de configuración para indicar la ubicación del archivo de contraseñas de cada usuario registrado.
sudo nano /etc/mosquitto/conf.d/default.conf
Y escribir en el archivo:
password_file /etc/mosquitto/passwd allow_anonymous false
La última instrucción, no permitirá que se den servicio a mensajes sin autenticación de usuario.
Se guarda el archivo (^O) y sale de la aplicacion (^X).
Una vez completada la acción anterior, se debe reiniciar mosquitto:
sudo systemctl restart mosquitto
3. Pruebas de operación
Realice nuevamente las pruebas de mensajes MQTT. Ahora se requiere indicar detalles del usuario que usa el servicio de suscripción y publicación:
mosquitto_sub -d -t "oficina/mensaje" -u "usuarioprueba" -P "usuarioclave" mosquitto_pub -d -t "oficina/mensaje" -m "controlando usuario" -u "usuarioprueba" -P "usuarioclave"
Los resultados se muestran incluso con mayor detalle:
pi@raspberrypi:~ $ mosquitto_sub -d -t "oficina/mensaje" -u "usuarioprueba" -P "usuarioclave" Client mosqsub|754-raspberrypi sending CONNECT Client mosqsub|754-raspberrypi received CONNACK (0) Client mosqsub|754-raspberrypi sending SUBSCRIBE (Mid: 1, Topic: oficina/mensaje, QoS: 0) Client mosqsub|754-raspberrypi received SUBACK Subscribed (mid: 1): 0 Client mosqsub|754-raspberrypi received PUBLISH (d0, q0, r0, m0, 'oficina/mensaje', ... (19 bytes)) controlando usuario
Como comprobación, intente enviar un mensaje con usuario cambiado con clave errada.
En las nuevas versiones, en modo «localhost» es decir desde un terminal del sevidor, se aceptan todos los mensajes sin restriccion como un modo de prueba de operación. Par comprobar otro tipo de conexión se debe realizar desde otro programa o computador. por ejemplo: mqtt.fx
3.1 Subscribirse a todos los tópicos
Se puede usar el comodín ‘#’:
mosquitto_sub -v -h broker_ip -p 1883 -t '#'
3.2 Añadir usuarios
Para añadir usuarios a mosquitto, use la instrucción con el parámetro -b, añadiendo el usuario y la clave.
sudo mosquitto_passwd -b /etc/mosquitto/passwd usuarionuevo clavenueva
para activar los nuevos usuarios puede reiniciar el proceso
4. Mosquitto en Home Assistant
Para conectar Home-Assistant al broker Mosquitto, se requiere configurar los parámetros de conexión.
La configuración se puede realizar usando la página web en el menú de:
«Ajustes/Dispositivos y servicios/Integraciones»
En el botón de «agregar integración», seleccione entre las opciones «MQTT».
En otro caso, la forma mas tradicional es:
Actualizar el inicio del servicio:
sudo nano /etc/systemd/system/home-assistant@homeassistant.service
En la línea correspondiente a After=
[Unit] Description=Home Assistant After=network-online.target mosquitto.service
Se actualiza el archivo configuration.yaml con la instrucción:
sudo nano /home/homeassistant/.homeassistant/configuration.yaml
añadiendo las instrucciones con los datos propuestos en el ejemplo que precede:
mqtt: broker: localhost port: 1883 client_id: 'HA-broker' username: 'usuarioprueba' password: 'usuarioclave'
el parámetro de broker puede ser también la dirección IP del servidor mosquitto.
Al reiniciar Home-Assistant, debería iniciar con la configuración propuesta.
5. MQTT con TLS
Para aumentar el nivel de seguridad de los mensajes MQTT, se añade encriptado TLS a los mensajes. El tema se desarrolla en la siguente página de publicación.
Referencias:
https://mcuoneclipse.com/2017/04/14/enable-secure-communication-with-tls-and-the-mosquitto-broker/
https://aprendiendoarduino.wordpress.com/tag/configurar-mosquitto/
http://www.steves-internet-guide.com/mosquitto-tls/
https://www.hivemq.com/blog/mqtt-security-fundamentals-tls-ssl/