6. mosquitto + TLS (mqtts)

Mqtt no es un protocolo manejado por nginx por lo que no tendremos que configurar nada ahí. Pero vamos a utilizar los certificados de Let'sEncrypt de nuestro dominio. Recordemos que estos certificados los maneja swag. Mediante docker-compose compartimos los mismos con el contenedor de mosquitto.

Aprovechamos para exponer la carpeta log y data de mosquitto

# branch BEe
# compose.yaml

Deberemos agregar un "listener" en el archivo mosquitto.conf que atienda en el puerto 8883. También bloqueamos el acceso sin usuario y contraseña.

# mosquitto.conf

listener 1883 
protocol mqtt
#allow_anonymous true

listener 8883
protocol mqtt
cafile /var/tmp/live/iotunam.duckdns.org/chain.pem    # <-- reemplazar dominio
certfile /var/tmp/live/iotunam.duckdns.org/cert.pem   # <-- reemplazar dominio
keyfile /var/tmp/live/iotunam.duckdns.org/privkey.pem # <-- reemplazar dominio
password_file /mosquitto/config/passwd
#allow_anonymous true

Para generar los usuarios y contraseñas debemos ejecutar el shell del contenedor mosquitto

~/docker $ docker exec -ti mosquitto /bin/sh

una vez adentro utilizamos el comando

$ mosquitto_passwd -c /mosquitto/config/passwd <usuario>

el modificador -c se utiliza solo con el primer usuario. Es para crear el archivo de contraseñas. Para seguir agregando usuarios no se debe agregar -c.

$ mosquitto_passwd /mosquitto/config/passwd <usuario>

Para que nuestro clientemqtt vuelva a funcionar deberemos asignarle un usuario y contraseña válidos ya que nuestro broker ahora exije identificación

# clienteMqtt.py

Antes de poder usar nuestro cliente deberemos volver a compilar la imagen docker (build). También deberemos pasarle el usuario y contraseña vía variables de entorno en docker-compose.

# compose.yaml