我当前正在尝试建立一个MQTT系统,在该系统中,我在服务器上运行一个中央代理(代理1),并且需要TLS加密,而一个本地代理(代理2)只能在我的本地网络中访问并且不需要任何形式的加密或身份验证。 我的“内容”将发布并订阅应该配置为与Broker 1的桥梁的Broker 2,因此我的东西可以发布和订阅Broker 1上的主题,而无需自己实现TLS。
代理程序1是在Cent Os 6服务器(我的Uberspace)上运行的Mosquitto实例,并配置为要求使用Lets Encrypt证书进行身份验证和加密。
Mosquitto.conf:
port <port>
persistence true
persistence_location /home/drparrot/mosquitto/var/lib/mosquitto/
log_dest topic
log_type error
log_type warning
log_type notice
log_type information
certfile /home/drparrot/.config/letsencrypt/live/<url>/cert.pem
cafile /home/drparrot/.config/letsencrypt/live/<url>//chain.pem
keyfile /home/drparrot/.config/letsencrypt/live/<url>/ /privkey.pem
allow_anonymous false
connection_messages true
log_timestamp true
Broker 2也是在连接到我本地WiFi的树莓派上运行的蚊子。 它被配置为与代理1的桥梁。 mosquitto.conf:
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
log_type all
connection uberspace-bridge
address <url>:<port>
topic # out 0
topic # in 0
clientid <id>
username <username>
password <password>
bridge_capath /etc/ssl/certs/
启动Broker 2时,我可以从日志文件中验证它尝试连接到Broker 1,但失败,并显示以下消息:
1541447922: Bridge <id> sending CONNECT
1541447922: OpenSSL Error: error:1417110A:SSL routines:tls_process_server_hello:wrong ssl version
1541447922: Socket error on client local.<id>, disconnecting.
但是,如果我尝试通过
从Raspberry Pi托管Broker 2连接到托管Broker 1的服务器openssl s_client -connect <url>:<port>
一切正常,因此我想我的证书都已正确设置,并且在树莓派和服务器上的开放ssl版本总体上是匹配的。而且,我能够使用MQTT.fx从Windows计算机连接/发布/订阅Broker 1。
有人能给我提示我做错了什么,或者我可以做些什么来进一步调试问题吗?