【问题标题】:Mosquitto broker bridge broker unavailable - SAP IoTMosquitto 代理桥代理不可用 - SAP IoT
【发布时间】:2019-11-26 11:27:30
【问题描述】:

在我的 IoT 项目遇到一些问题后,请参阅此线程: Mosquitto Broker Bridge Configuration - unacceptable protocol version实现桥接还有一个问题。

我在安装了 Raspbian Stretch 的 Raspberry Pi 上使用 Mosquitto v1.6.7。 mosquitto 代理桥和远程代理 (SAP IoT Cloud) 之间的连接无法建立。我再次仔细检查了所有设置(端点地址正确,CAcert.pem 与我刚从客户端发送到没有网桥的远程代理时使用的相同,再次高度赞赏任何提示!

这是我为 mosquitto 经纪人更新的配置:

我已经取消了连接名称和地址的个性化。连接名称在远程代理 (SAP Cloud) 中用作 clientId,并经过双重检查,端点地址也是如此。

listener 8883

connection raspberryPiZero
address xxxxxxxx.eu10.cp.iot.sap:8883
bridge_protocol_version mqttv311
try_private false
topic # both
log_type all
bridge_cafile /etc/mosquitto/certs/CAcert.pem

这是更新的日志文件:

1574766394: mosquitto version 1.6.7 starting
1574766394: Config loaded from /etc/mosquitto/conf.d/local.conf.
1574766394: Opening ipv4 listen socket on port 8883.
1574766394: Opening ipv6 listen socket on port 8883.
1574766394: Bridge local.raspberrypi.raspberryPiZero doing local SUBSCRIBE on topic #
1574766394: Connecting bridge (step 1) raspberryPiZero (xxxxxxxx.eu10.cp.iot.sap:8883)
1574766395: Connecting bridge (step 2) raspberryPiZero (xxxxxxxx.eu10.cp.iot.sap:8883)
1574766395: Bridge raspberrypi.raspberryPiZero sending CONNECT
1574766395: Received CONNACK on connection local.raspberrypi.raspberryPiZero.
1574766395: Connection Refused: broker unavailable
1574766395: Socket error on client local.raspberrypi.raspberryPiZero, disconnecting.
1574766400: Bridge local.raspberrypi.raspberryPiZero doing local SUBSCRIBE on topic #
1574766400: Connecting bridge (step 1) raspberryPiZero (xxxxxxxx.eu10.cp.iot.sap:8883)
1574766401: Connecting bridge (step 2) raspberryPiZero (xxxxxxxx.eu10.cp.iot.sap:8883)
1574766401: Bridge raspberrypi.raspberryPiZero sending CONNECT
1574766401: Received CONNACK on connection local.raspberrypi.raspberryPiZero.
1574766401: Connection Refused: broker unavailable
1574766401: Socket error on client local.raspberrypi.raspberryPiZero, disconnecting.
1574766406: Bridge local.raspberrypi.raspberryPiZero doing local SUBSCRIBE on topic #
1574766406: Connecting bridge (step 1) raspberryPiZero (xxxxxxxx.eu10.cp.iot.sap:8883)
1574766407: Connecting bridge (step 2) raspberryPiZero (xxxxxxxx.eu10.cp.iot.sap:8883)
1574766407: Bridge raspberrypi.raspberryPiZero sending CONNECT
1574766407: mosquitto version 1.6.7 terminating

【问题讨论】:

  • 顺便说一句,您的侦听器条目没有设置任何 TLS 设置,因此您的本地客户端连接不会通过 TLS。 (这与这里提出的实际问题是分开的。)
  • 好的,谢谢您的信息。我在 SAP IoT 中生成证书(.pem 文件并为客户端本地代理加密生成 client_cert 和 private_key),CAcert 给了我。所以我必须为本地代理创建 server_cert 和密钥?
  • 如何为本地客户端连接设置 TLS 又是一个单独的问题,但您不能使用 SAP 中的任何东西来设置该连接。
  • 您是否有使用客户端直接连接到 SAP Broker 时的用户名/密码?
  • 不,我没有将客户端连接到 SAP 代理的用户名/密码。当我连接我的客户端时,我使用:来自 SAP 代理的 CA 文件,您可以下载包含 client_cert 和加密的 private_key 的证书。使用 OpenSSL,我解密 private_key 并拥有三个文件(CA 文件、client_cert、private_key),可用于通过端口 8883 将 mqtt 消息发送到 SAP 代理。

标签: sap mqtt mosquitto


【解决方案1】:

来自 mosquitto.conf 人 page

remote_clientid id

设置此桥接连接的客户端 ID。如果没有定义,这个 默认为 'name.hostname',其中 name 是连接名称, hostname 是这台计算机的主机名。

这取代了旧的“clientid”选项,以避免与 桥的本地/远程两侧。 “clientid”对 暂时。

这意味着呈现给远程代理的客户端 ID 是 raspberryPiZero.raspberrypi 而不是 raspberryPiZero。如果客户端 ID 只需为 raspberryPiZero,则需要使用 remote_clientid 选项进行设置。

这将使客户端 ID 正确。接下来,您需要告诉本地代理使用您的客户端使用的所有相同证书。

您需要使用bridge_certfile 指向客户端证书文件,使用bridge_keyfile 指向未加密的客户端私钥。

connection raspberryPiZero
address xxxxxxxx.eu10.cp.iot.sap:8883
bridge_protocol_version mqttv311
remote_clientid raspberryPiZero
try_private false
bridge_cafile /etc/mosquitto/certs/CAcert.pem
bridge_certfile /etc/mosquitto/certs/clientCert.pem
bridge_keyfile /etc/mosquitto/certs/clientKey.pem
topic # both

log_type all

【讨论】:

    猜你喜欢
    • 2015-08-18
    • 2016-03-19
    • 2021-03-12
    • 2020-12-13
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多