MQTT su TLS utilizzando RabbitMQ

5

Vogliamo utilizzare RabbitMQ su TLS per la nostra messaggistica mqtt, quindi abbiamo eseguito alcuni test e siamo riusciti a farlo funzionare sulla porta 8883 utilizzando questa guida alla configurazione e dobbiamo collegarci su un URL che inizia con l'identificativo del protocollo mqtts:// .

La nostra configurazione sembra più o meno così:

[{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,    []}
                  ]}
].

Abbiamo disattivato tcp_listeners completely passando un array vuoto (altrimenti il valore predefinito sarà un array come [1883] (con la porta predefinita 1883) e quindi la connessione non sicura direttamente oltre tcp sarà ancora possibile (leggi anche questa risposta su stackoverflow per maggiori dettagli).

Ora mi sono imbattuto in il seguente documento su mqtts (mqtt-s) sostenendo che mqtts non significa mqtt sicuro, ma che in realtà sta per reti sensoriali MQTT :

Some people had assumed that the S in MQTT-S stood for secure, so we hope this change will avoid that confusion.

Ora ho provato a leggere di più su questo argomento, ma più leggo e più confuso diventa. Alcuni documenti rivendicare mqtt su tls dovrebbero essere fatti semplicemente indirizzando un'altra porta e questo sarà dare "secure-mqtt":

Port 8883 is standardized for a secured MQTT connection. The standardized name at IANA is “secure-mqtt” and port 8883 is exclusively reserved for MQTT over TLS.*

Altri documenti affermano che possiamo connetterci utilizzando diversi protocolli tra cui tls:// :

The URL can be on the following protocols: 'mqtt', 'mqtts', 'tcp', 'tls', 'ws', 'wss'. The URL can also be an object as returned by URL.parse(), in that case the two objects are merged, i.e. you can pass a single object with both the URL and the connect options.

Le mie domande:

  • Qual è il modo migliore di connettere un client MQTT a un broker se si desidera forzare questo client a utilizzare MQTT su TLS?
  • È vero che mqtts:// non significa MQTT sicuro (MQTT su SSL / TLS)? O significa questo solo nel caso in cui usiamo RabbitMQ come nostro broker MQTT? Oppure questo documento è obsoleto ed è mqtts un identificatore totalmente valido per connettersi in modo sicuro al protocollo mqtt (come http diventa https per il protocollo http e ws diventa wss per il protocollo web socket ).

Abbiamo provato a connetterci al nostro broker RabbitMQ usando mqtt:// sulla porta 8883, ma questo non funziona.
Sembra che l'unico modo per stabilire una connessione sicura con il nostro broker sembra essere utilizzando l'identificatore mqtts:// .

  • Questa configurazione di RabbitMQ ci garantisce che i client possono connettersi solo tramite una connessione protetta (crittografata)?

UPDATE

Alcuni test mostrano che il servizio MQTT funziona bene anche quando si indirizza la porta 8883 mentre si utilizza l'identificatore tls:// nelle nostre richieste.

    
posta Wilt 07.09.2016 - 15:59
fonte

1 risposta

1

Puoi anche usare ssl: // come identificatore nella tua richiesta di connessione ma devi impostare il protocollo come TLS [versioni specifiche se intendi bloccare pochi, TLSV1, TLSV1_1, TLSV1_2 ecc.]

Abbiamo usato client java che hanno funzionato per noi. Se si utilizzano client GUI come MQTTBox, utilizzano mqtts: // per TLS. Non so se funziona come già sapete che mqtts è !!

    
risposta data 26.07.2017 - 14:55
fonte

Leggi altre domande sui tag