2013-10-23 148 views
1

我的理解是,如果我的配置中有require_certificate false,那麼即使它沒有提供任何證書和密鑰,Mosquitto Broker也會允許客戶端連接;成爲Python用戶端更具體的,即使我不打電話當requires_certificate爲false時無法連接到Mosquitto Broker

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 

Sever的端錯誤:

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來實現嗎?如果是的話,你能幫我弄清楚我在這裏做錯了什麼嗎?

我試過用蚊子1.2版,1.2.1 & 1.2.2。

回答

1

您需要致電tls_set()才能啓用TLS模式。如果您不這樣做,則客戶端將嘗試連接而不使用TLS。您可以撥打tls_set()而不設置客戶端證書或密鑰,方法是將這些參數設置爲C中的NULL或Python中的None,但除非使用TLS-PSK,否則始終需要CA證書。在Python中,如果沒有指定,則默認爲證書和密鑰文件爲None傳遞,這樣你就可以使用,例如:

mq.tls_set(mqttCafile) 

如果require_certificate是真實的,你需要通過有效的客戶端證書和密鑰除了您的CA證書外,經紀人將拒絕您的連接。

對於希望使用或不使用TLS進行連接的客戶端,無法實現單個偵聽器,但是您可以創建多個偵聽器,以便在TLS上偵聽端口1883而使用TLS偵聽端口爲8883例。

+0

謝謝羅傑。 我現在還有一些其他問題可以達到我的要求,我會在另一個問題中提出要求。 – Dilip

相關問題