Mosquitto证书SSL23_GET_CLIENT_HELLO:未知协议

时间:2016-03-07 14:15:31

标签: ssl ssl-certificate mqtt ca

我一直在拼命想让我的MQTT客户端连接到一个MQTT代理,该代理使用来自CA的证书进行设置。 (Letsencrypt:https://pypi.python.org/pypi/letsencrypt/0.4.1)我为我的https网站使用了相同的证书,这似乎工作正常。不过,我不确定这是否有任何联系。

我已使用本指南为经纪商设置证书(http://mosquitto.org/2015/12/using-lets-encrypt-certificates-with-mosquitto/

代理,v1.4.8似乎可以正常使用以下配置:

cafile chain.pem
certfile cert.pem
keyfile privkey.pem

[ ok ] mosquitto is running.

尝试使用调试消息连接到此代理的客户端产生:

Client mosqsub/42074-titan sending CONNECT

在我的经纪人的副本日志中,我收到了以下错误消息:

1457358950: New connection from NOT.TELLING.YOU.OBVIOUSLY on port 8883.
1457358950: OpenSSL Error: error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol
1457358950: Socket error on client <unknown>, disconnecting.

我已经在广泛寻找解决方案,遗憾的是那里几乎没有什么。

任何帮助将不胜感激!谢谢!

4 个答案:

答案 0 :(得分:2)

当我使用 tcp 作为协议而不是 ssl 时,我遇到了paho.mqtt.c MQTT客户端库的问题。

所以我不得不使用

ssl://1.2.3.4:56789

而不是

tcp://1.2.3.4:56789

此外,当使用paho.mqtt.c时,请确保您使用SSL支持链接libs,并且SSL支持的lib实际上是使用SSL支持构建的!曾经有一个缺少定义的CMake文件中的错误(OPENSSL),因此SSL库没有提供SSL支持......

答案 1 :(得分:1)

我的猜测是你没有启用TLS模式 - 你是否已将--cafile传递给mosquitto_sub?

答案 2 :(得分:1)

这对我来说只是为了测试一个简单的安全发布订阅。

  1. 我使用https://github.com/owntracks/tools/blob/master/TLS/generate-CA.sh来生成证书(在/ share / mosquitto中),很简单:

    generate-CA.sh

  2. 我使用以下命令配置了mosquitto.conf(包括完整日志记录):

    log_dest文件/var/log/mosquitto.log

    log_type全部

    cafile /share/mosquitto/ca.crt

    certfile /share/mosquitto/localhost.crt

    密钥文件/share/mosquitto/localhost.key

  3. 我订阅了(启用调试):

    mosquitto_sub -h本地主机-t测试-p 8883-不安全-d --cafile /share/mosquitto/ca.crt

  4. 我发表于:

    mosquitto_pub -h本地主机-t test -p 8883 --cafile /share/mosquitto/ca.crt -m“ Hi”-不安全

答案 3 :(得分:0)

我最近在我的一位Cloud mosquitto经纪人上开始遇到此问题。 我使用python客户端从另一个VPS连接到此代理,并且我正在使用paho.mqtt.client Python库。

一切正常,直到一天晴朗,一切都崩溃了。原因可能是定期更新或其他内容,但突然开始给我握手错误和OP中提到的完全相同的错误。

Client connection from AREA51 failed: error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol.

在python客户端上,我正在使用transport = tcp并使用tls连接到安全的MQTT端口。较早之前,这工作正常。遇到此问题后,我已将Openssl更新到最新版本,但无法解决此问题。

我的问题是我的经纪人允许所有其他客户端的所有ssl / tcp和websocket连接。甚至相同的Python代码在我的本地计算机上都可以正常工作。

很明显,其他VPS(客户端)上的传输机制出了问题

利用Python MQTT库,我发现我们可以尝试更改传输机制。

因此只需将客户端代码更改为:

client = mqtt.Client(transport="websockets")

先前是:

client = mqtt.Client(transport="tcp")

解决了我的问题。 我确实必须更改运行安全websocket的连接端口。

我希望这可以帮助处于类似情况的人。