Proteger Mosquitto con TLS, por diversión y provecho

En el artículo anterior como instalar y configurar un broker Mosquitto en Unix. Ahora voy a explicar como generar los certificados SSL y como asegurar las conexiones al broker con ellos.

Para generar los certificados utilizaremos un script muy majo que ha creado la gente de Owntracks y que facilita mucho la creación de los certificados. Por defecto utiliza el algortimo SHA-512, pero puede cambiarse en la línea 83 según sea la necesidad del cliente:

~$ wget https://github.com/owntracks/tools/blob/master/TLS/generate-CA.sh ~$ chmod +x generate-CA.sh ~$ ./generate-CA.sh

El script genera 6 archivos y utiliza el nombre del equipo (en mi caso testing) para tres de ellos, nos interesan solo tres: ca.crt, testing.crt y testing.key. Esos tres archivos hay que copiarlos a /etc/mosquitto/certs u otra ubicación segura y que pueda acceder el usuario mosquitto.

Una vez copiado los archivos añadiremos al archivo de configuración que creamos en el artículo anterior (/etc/mosquitto/mosquitto.conf) estas líneas:

listener 8883 cafile /etc/mosquitto/certs/ca.crt certfile /etc/mosquitto/certs/testing.crt keyfile /etc/mosquitto/certs/testing.key require_certificate true tls_version tlsv1.2

Las tres primeras líneas indican la ubización de los certificados. La opción requiere_certificate en el caso de estar activada obligaría a los clientes que quieran conectarse al broker tener una copia del certificado. La opción tls_version permite especificar la versión de TLS a utilizar (tlsv1, tlsv1.1 y tlsv1.2) para las conexiones, en el caso de no estar determinada permitiría los tres tipos.

Una vez hechos los cambios probamos con:

~$ mosquitto -c /etc/mosquitto/mosquitto.conf

Para conectarnos al servidor necesitamos una copia del certificado ca.crt, y el comando sería:

~$ mosquitto_sub -h [servidor] -p 8883 -t [canal] -u [usuario] -P [contraseña] –cafile ca.crt

En el caso de que no queramos permitir conexiones sin TLS debemos comentar la línea listener 1883.