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.