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 esmqtts
un identificador totalmente válido para conectarse de forma segura al protocolomqtt
(comohttp
se convierte enhttps
para el protocolo http yws
se convierte enwss
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.