web-dev-qa-db-ja.com

RabbitMQを使用したMQTT over TLS

私たちはmqttメッセージングにRabbitMQ over TLSを使用したいので、いくつかのテストを行い、ポート8883で this configuration guide を使用して動作させることができました。プロトコルで始まるURLに接続する必要があります識別子mqtts://

私たちの設定は多かれ少なかれこのように見えます:

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

空の配列を渡すことでtcp_listeners completelyを無効にしました(そうでない場合、デフォルト値は[1883](デフォルトのポート1883を使用)のような配列となり、tcpを介して安全でない方法で直接接続することは引き続き可能です(詳細については stackoverflowに関するこの回答 も参照してください)。

今私はmqttsがmqttの安全を意味するのではなく、実際にはMQTT感覚ネットワークを意味すると主張してmqtts(mqtt-s)で 次のドキュメント に遭遇しました

一部の人々はMQTT-SのSが安全であると想定していたため、この変更により混乱が回避されることを願っています。

今、私はこのトピックについてもっと読むことを試みました、しかし、より多くのそれを読むと、それはますます混乱します。 一部のドキュメント tls上のmqttは、別のポートをアドレス指定するだけで実行できると主張し、これにより「secure-mqtt」が得られます。

ポート8883は、保護されたMQTT接続用に標準化されています。IANAでの標準化された名前はです。 「secure-mqtt」およびポート8883は、MQTT over TLS専用に予約されています。*

その他のドキュメントtls://があるさまざまなプロトコルを使用して接続できると主張します。

URLは、「mqtt」、「mqtts」、「tcp」、「tls」、「ws」、「wss」のプロトコル上にあります。 URLは、URL.parse()によって返されるオブジェクトにすることもできます。その場合、2つのオブジェクトがマージされます。つまり、URLと接続オプションの両方を持つ単一のオブジェクトを渡すことができます。


私の質問:

  • このクライアントがMQTT over TLSを使用するように強制したい場合、MQTTクライアントをブローカーに接続する好ましい方法は何ですか?
  • mqtts://が安全なMQTT(SSL/TLS上のMQTT)を意味するではないのは本当ですか?それとも、MQTTブローカーとしてRabbitMQを使用する場合にのみこれが意味するのでしょうか?または、このドキュメントは古くなっており、mqttsは、mqttプロトコルに安全に接続するための完全に有効な識別子です(httpプロトコルではhttphttpsになり、 wsは、Webソケットプロトコルの場合はwssになります)。

ポート8883でmqtt://を使用してRabbitMQブローカーに接続しようとしましたが、これは確実に機能しません。
ブローカーへの安全な接続を確立する唯一の方法は、mqtts://識別子を使用することであると思われます。

  • このRabbitMQ設定は、クライアントが安全な(暗号化された)接続を介してのみ接続できることを保証しますか?

更新

一部のテストでは、リクエストでtls://識別子を使用しているときにポート8883をアドレス指定する場合にもMQTTサービスが適切に機能することが示されています。

5
Wilt

接続リクエストの識別子としてssl://を使用することもできますが、プロトコルをTLSとして設定する必要があります[一部をブロックする場合は、特定のバージョン、TLSV1、TLSV1_1、TLSV1_2など]。

使用したクライアントはJavaクライアントでした。MQTTBoxのようなGUIクライアントを使用している場合は、TLSにmqtts://を使用しています。mqttsが何であるかをすでに知っているので、動作するかどうかわかりません! !

1
Amith