World Wide Web
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