1

私の理解ではrequire_certificate false、構成にある場合、証明書とキーが提供されていなくても、Mosquitto Broker はクライアントの接続を許可します。私が呼び出していない場合でも、Python クライアントに対してより具体的にする

mq.tls_set(mqttCafile,  mqttCertfile, mqttKeyfile)

電話する前に

mq.connect(mqttBrokerURL, mqttBrokerPort, keepAliveTime)

しかし、関数を呼び出さないとブローカーに接続できませんtls_set()

mosquitto.conf の内容:

port 8883

cafile ssl/all-ca.crt
certfile ssl/server.crt
keyfile ssl/server.key
require_certificate false

tls_version tlsv1

password_file /etc/mosquitto/passwd
allow_anonymous false

サーバー側のエラー:

1382529992: Config loaded from mosquitto.conf.
1382529992: Opening ipv4 listen socket on port 8883.
1382529992: Opening ipv6 listen socket on port 8883.
1382530058: New connection from 127.0.0.1 on port 8883.
1382530058: OpenSSL Error: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
1382530058: Socket read error on client (null), disconnecting.

クライアント側のエラー:

[Errno 104] Connection reset by peer
Done: 7

証明書を渡すと、正常に接続されます。私の要件は、ブローカーが両方のケースの接続を許可することです。を使用してこれを達成できますrequire_certificateか? はいの場合、ここで何か間違ったことをしているかどうかを理解するのを手伝ってもらえますか?

Mosquitto バージョン 1.2、1.2.1、および 1.2.2 で試しました。

4

1 に答える 1

1

tls_set()TLS モードを有効にするには、呼び出す必要があります。これを行わないと、クライアントは TLS を使用せずに接続を試みます。C または Python でtls_set()これらのパラメーターを設定することにより、クライアント側の証明書またはキーを設定せずに呼び出すことができますが、TLS-PSK を使用していない限り、CA 証明書は常に必要です。Python では、指定されていない場合のデフォルトは、証明書とキー ファイルが として渡されるため、たとえば次のように使用できます。NULLNoneNone

mq.tls_set(mqttCafile)

true の場合require_certificate、有効なクライアント証明書とキーを CA 証明書と一緒に渡す必要があります。そうしないと、ブローカーは接続を拒否します。

TLS を使用する場合と使用しない場合の両方に接続する必要があるクライアントを 1 つのリスナーで処理することはできませんが、複数のリスナーを作成して、たとえば 1 つを TLS なしでポート 1883 でリッスンし、もう 1 つを TLS 付きで 8883 でリッスンするようにすることができます。

于 2013-10-23T13:36:51.573 に答える