MQTT sobre TLS utilizando RabbitMQ

5

Queremos usar RabbitMQ sobre TLS para nuestros mensajes mqtt, así que hicimos algunas pruebas y conseguimos que funcionara en el puerto 8883 usando esta guía de configuración y necesitamos conectarnos en una url que comienza con el identificador de protocolo mqtts:// .

Nuestra configuración se parece más o menos así:

[{rabbit,        [
                  {ssl_options, [{cacertfile, "/path/to/tls/ca/cacert.pem"},
                                 {certfile,   "/path/to/tls/server/cert.pem"},
                                 {keyfile,    "/path/to/tls/server/key.pem"},
                                 {verify,     verify_peer},
                                 {fail_if_no_peer_cert, true}]}
                 ]},
 {rabbitmq_mqtt, [
                  {ssl_listeners,    [8883]}
                  {tcp_listeners,    []}
                  ]}
].

Deshabilitamos tcp_listeners completely al pasar una matriz vacía (de lo contrario, el valor predeterminado será una matriz como [1883] (con el puerto predeterminado 1883) y luego la conexión insegura directamente sobre tcp todavía será posible (lea también esta respuesta en stackoverflow para más detalles).

Ahora me encontré con el siguiente documento en mqtts (mqtt-s) y afirmé que mqtts no significa que mqtt sea seguro, pero que en realidad significa redes sensoriales MQTT :

  

Algunas personas habían asumido que la S en MQTT-S era segura, por lo que esperamos que este cambio evite esa confusión.

Ahora intenté leer más sobre este tema, pero cuanto más leo, más confuso se vuelve. Algunos documentos dicen que mqtt sobre tls debe hacerse simplemente dirigiéndose a otro puerto y esto da "secure-mqtt":

  

El puerto 8883 está estandarizado para una conexión MQTT segura. El nombre estandarizado en IANA es inssecure-mqtteja y el puerto 8883 es exclusivo reservado para MQTT sobre TLS. *

Otros documentos afirman que podemos conectarnos utilizando diferentes protocolos, entre los cuales hay tls:// :

  

La URL puede estar en los siguientes protocolos: 'mqtt', 'mqtts', 'tcp', 'tls', 'ws', 'wss'. La URL también puede ser un objeto devuelto por URL.parse (), en ese caso, los dos objetos se fusionan, es decir, puede pasar un solo objeto con la URL y las opciones de conexión.

Mis preguntas:

  • ¿Cuál es la forma preferida de conectar un cliente MQTT a un intermediario si desea forzar a este cliente a usar MQTT sobre TLS?
  • ¿Es cierto que mqtts:// no significa MQTT (MQTT sobre SSL / TLS) seguro? ¿O significa esto solo en caso de que utilicemos RabbitMQ como nuestro agente MQTT? O bien, este documento está desactualizado y es mqtts un identificador totalmente válido para conectarse de forma segura al protocolo mqtt (como http se convierte en https para el protocolo http y ws se convierte en wss para el protocolo web sockets ).

Intentamos conectarnos con nuestro agente RabbitMQ usando mqtt:// en el puerto 8883, pero esto definitivamente no funciona.
Parece que la única forma de establecer una conexión segura con nuestro agente parece ser mediante el uso del identificador mqtts:// .

  • ¿Esta configuración de RabbitMQ nos garantiza que los clientes pueden y solo se conectarán a través de una conexión segura (cifrada)?

ACTUALIZACIÓN

Algunas pruebas muestran que el servicio MQTT también funciona bien cuando se dirige al puerto 8883 mientras se usa el identificador tls:// en nuestras solicitudes.

    
pregunta Wilt 07.09.2016 - 15:59
fuente

1 respuesta

1

También puede usar ssl: // como el identificador en su solicitud de conexión, pero necesita establecer el protocolo como TLS [versiones específicas si está previsto bloquear algunas, TLSV1, TLSV1_1, TLSV1_2, etc.].

Usamos clientes java que funcionaron para nosotros. Si está utilizando clientes GUI como MQTTBox, ellos usan mqtts: // para TLS. ¡No sé si funciona como ya sabes lo que es mqtts!

    
respondido por el Amith 26.07.2017 - 14:55
fuente

Lea otras preguntas en las etiquetas