当require_certificate为false时,无法连接到Mosquitto Broker

时间:2013-10-23 12:49:01

标签: mqtt mosquitto

我的理解是,如果我的配置中有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

当我们通过证书时它成功连接。我的要求是Broker应允许两个案例的连接。使用require_certificate可以实现这一点吗?如果是的话,请你帮我弄清楚我在这里做错了什么?

我尝试过Mosquitto版本1.2,1.2.1& 1.2.2。

1 个答案:

答案 0 :(得分:1)

您需要致电tls_set()以启用TLS模式。如果不这样做,客户端将尝试连接而不使用TLS。您可以在不设置客户端证书或密钥的情况下调用tls_set(),方法是将这些参数设置为C中的NULL或Python中的None,但除非您使用TLS,否则始终需要CA证书-PSK。在Python中,默认情况下,如果未指定,则证书和密钥文件将作为None传递,因此您可以使用例如:

mq.tls_set(mqttCafile)

如果require_certificate为真,则需要将有效的客户端证书和密钥与CA证书一起传递,否则代理将拒绝您的连接。

不可能让单个侦听器处理想要使用和不使用TLS连接的客户端,但是您可以创建多个侦听器,以便一个人在没有TLS的情况下侦听端口1883,在一个8883上使用TLS监听一个侦听器,例如