ERROR Mosquitto SSL Configuration TLS with MQTT and MOSQUITTO SOLUTIONS

septiembre 23, 2020

    Hola a todos, como saben estoy haciendo mi tesis en el campo de IoT. Quiero compartir aquí las posibles soluciones cuando se generan problemas al generar las claves de seguridad para los clientes MQTT y el broker. 

    PRIMERO QUE TODO, si quieres saber los pasos que debes seguir para generar los certificados CA y su firma, puede ir al siguientes enlace :http://www.steves-internet-guide.com/mosquitto-tls/

    Allí estan los pasos a seguir para la configuración del SSL en mosquitto. Sin embargo esta entrada se centrará en buscar las soluciones cuando se generen errores en la verificacion de claves. Cuando generé las claves tuve los mil y un errores hasta que di con la solución de todo los errores que se pudieron estar ocasionando, aqui enumeraré solo algunos con los que me encontré.

Errores típicos que suelen aparecer cuando se configura el SSL/TLS

  1. "Error: A TLS error occurred."
  2. 2020-09-21|23:16:44: OpenSSL Error[0]: error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol
  3. [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)
  4. OpenSSL Error[1]: error:140940E5:SSL routines:ssl3_read_bytes:ssl handshake failure
  5. OpenSSL Error[0]: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca


Otro salida:

Creando: Client_000
Traceback (most recent call last):
  File "publicador_ssl.py", line 50, in <module>
    client.connect(broker_address,ssl_port)
  File "/usr/local/lib/python3.5/dist-packages/paho/mqtt/client.py", line 937, in connect
    return self.reconnect()
  File "/usr/local/lib/python3.5/dist-packages/paho/mqtt/client.py", line 1100, in reconnect
    sock.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 988, in do_handshake
    self._sslobj.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 633, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

    Eso son solo algunos de los errores que pueden encontrar al momento de configurar y probar los clientes de mosquitto sobre SSL, por eso aquí te presento algunas soluciones dependiento de tu caso.

1) Solución 1

    Error al crear los certificado ca.crt y server.crt

    Este es el error más común al momento de generar las claves porque colocan un Common Name (CM) difrente a la IP de su laptop o el dominio del servidor.

    Por favor cuando genere las claves coloque en el campo Common Name (CM) SU DIRECCIÓN IP o el nombre de dominio del servidor, si no conoce su direccion IP pruebe el comando ipconfig  y allí aparecerá su dirección.

Ejemplos
CN:192.168.0.114 

CN = iot.eclipse.mosquitto

    Coloque el mismo common name CM en el certificado CA y el certificado del SERVER. Ambos deben tener el mismo common name. Cuando cree el certificado y clave del servidor NO coloque 'extra' attributes.




2) Solución 2

    Si después de crear bien sus certificador y claves CA y Server aún aparece un problema es probable que se deba a que tenga activada la autentificación de usuario y contraseña

Pruebe:

$mosquitto_sub -h 192.168.0.130 -p 8883 -t "test/1" -u <user> - P <password> --cafile /etc/mosquitto/certs/ca.crt

$mosquitto_pub -h 192.168.0.130 -p 8883 -t "test/1" -m "HELLOOO"-u <user> - P <password> --cafile /etc/mosquitto/certs/ca.crt

    Si se genera la conexión entonces era un problema de autenticación y solo le faltaba agregar su usuario y contraseña. Ahora si aún le sale algun error, verifique la ruta donde tiene almacenado los certificado por lo general se agregar a la carpeta de /etc/mosquitto/certs/

3) Solución 3

    Revise su configuración de mosquitto, verifique que no hayan espacios adicionales a los necesarios.

    En el archivo de configuración mosquitto, las líneas de los parámetros de configuración con los nombres de archivo cert, key y CA contenían un carácter de 'espacio' después de cada nombre de archivo y antes del carácter de fin de línea.

Su configuración debe lucir así

####################################################
# MOSQUITTO LISTENER WITH SLL
####################################################
listener 8883
protocol mqtt
allow_anonymous false

cafile /etc/mosquitto/certs/ca.crt
keyfile /etc/mosquitto/certs/server.key
certfile /etc/mosquitto/certs/server.crt
tls_version tlsv1.2

4) Solución 4

También puede ser que su computadora no este escuchando el puerto 8883, para eso verifique con el siguiente comando:

netstat --listen

si no aparece 8883, abra el puerto con el comando :

sudo ufw allow 8883

5) Solución 5

VERIFICAR TU CÓDIGO DE PYTHON Y revise SI LAS LLAMADAS DE TLS/SSL ESTAN ANTES DE CLIENT.CONNECT

    Aquí hay un ejemplo de mi suscriptor.py. Tome en cuenta que las llamadas client.tls_set(), client.username_pw_ser() estan antes de client.connect










6) Solución 6

    Otro error común es que creen las llaves de seguridad es que posiblemente creó lo archivos (CA y Server) en el escritorio y al momento de copiarlo en la ruta de cartificados de mosquitto (/etc/mosquitto/certs) NO utilizaron el comando correcto.

Si creaste los archivos en otra parte diferente a la carpeta "certs" y deseas moverlo a la carperta "CERTS", utiliza el siguiente comando: "cp" en vez de "mv":

$sudo cp ca.crt ca.srl ca.key server.key server.crt server.csr /etc/mosquitto/certs/

NO OLVIDEN REINICIAR MOSQUITTO LUEGO DE CREAR LOS CERTIFICADOS Y COLOCARLOS EN LA CARPETA "CERTS", CON EL COMANDO:

#sudo systemctl restart mosquitto

You Might Also Like

0 comentarios

Popular Posts

Subscribe

Visitas




Instagram