El protocolo MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería ligero y eficiente, diseñado para la comunicación entre dispositivos con limitaciones de recursos, como los dispositivos del Internet de las Cosas (IoT). A continuación explico como instalarlo mediante Mosquitto.
sudo apt install mosquitto
En la localización donde tenemos instalado mosquitto (por defecto, /etc/mosquitto/conf.d), podemos añadir archivos .conf que serán cargados por el broker.
Para añadir usuarios, si es la primera vez, utilizaremos:
mosquitto_passwd -c passw.txt user
Si ya lo hemos creado antes, lo añadimos mediante:
mosquitto_passwd -b passw.txt user password
Una vez tenemos el fichero, lo copiamos:
sudo mv passw.txt /etc/mosquitto/conf.d/
Añadimos el nuevo fichero con contraseñas añadiendo:
allow_anonymous false
password_file passw.txt
En el archivo .conf:
sudo nano /etc/mosquitto/conf.d/myConfig.conf
Para probarlo, podemos hacer restart del servicio mosquitto mediante:
sudo service mosquitto restart
Necesitamos tener instalado:
sudo apt install mosquitto-clients
Ejecutamos mosquitto con nuestra configuración:
mosquitto -c /etc/mosquitto/conf.d/myConfig.conf
Publicamos un mensaje:
mosquitto_pub -h <IP> -u <User> -P <Password> -t /NuestroTopic -m MensajeEnviado
Podemos recibir el mensaje si tenemos abierta una suscripción:
mosquitto_sub -h <IP> -u <User> -P <Password> -t /NuestroTopic
Para mejorar la seguridad de nuestro broker Mosquitto, podemos añadir cifrado TLS, lo que protegerá la comunicación entre el cliente y el servidor. Para ello, necesitamos generar certificados SSL y configurarlos en Mosquitto.
Si no tienes certificados SSL ya generados, puedes generarlos con openssl. A continuación se muestra cómo generar un certificado autofirmado.
Crea una carpeta para guardar los certificados:
sudo mkdir /etc/mosquitto/certs
Genera una clave privada:
openssl genpkey -algorithm RSA -out /etc/mosquitto/certs/mosquitto.key
Genera un certificado autofirmado:
openssl req -new -x509 -key /etc/mosquitto/certs/mosquitto.key -out /etc/mosquitto/certs/mosquitto.crt -days 365
Sigue las instrucciones para ingresar la información requerida (país, estado, organización, etc.).
Edita el archivo de configuración de Mosquitto:
sudo nano /etc/mosquitto/conf.d/myConfig.conf
Añade la siguiente configuración para habilitar TLS:
listener 8883
cafile /etc/mosquitto/certs/mosquitto.crt
certfile /etc/mosquitto/certs/mosquitto.crt
keyfile /etc/mosquitto/certs/mosquitto.key
Aquí configuramos Mosquitto para escuchar en el puerto 8883, que es el puerto estándar para comunicaciones seguras con MQTT.
Después de haber configurado el cifrado, reinicia el servicio Mosquitto:
sudo service mosquitto restart
Para conectarte con TLS desde un cliente MQTT, debes utilizar el puerto seguro y especificar la ruta del archivo del certificado.
Por ejemplo, si usamos mosquitto_sub, sería algo así:
mosquitto_sub --cafile /etc/mosquitto/certs/mosquitto.crt -h <IP> -p 8883 -t /NuestroTopic -u <User> -P <Password>