通过 MQTT 直接连接到 Azure IoT Edge 作为 Azure IoT Central 的透明网关

Directly connect to Azure IoT Edge via MQTT as transparent gateway to Azure IoT Central

我正在尝试将 Azure IoT Edge 设置为透明网关,我想通过 MQTT(没有任何 IoT SDK)直接连接到该网关。

###---短版---###
我想通过 MQTT 直接连接到 IoT Edge,例如 this 到 IoT 中心。
通过对称密钥连接到物联网边缘网关的主机、用户名和密码是什么?



###---长版---###

通信应如下所示:设备 (MQTT) -> Azure IoT Edge -> Azure IoT Central。

我开始将设备配置到 Azure IoT Central 并能够直接连接到那里。我使用 .NET 示例在 Azure IoT Central 上配置设备并获取 Iot-Hub 名称。然后我创建了 SAS 令牌以直接通过 MQTT 客户端连接到 Azure IoT Central(分配的 IoT-Hub)
我使用了以下凭据:

"ClientID": "plc2"
"Host": "mqtts://iotc-x-x-x-x-x.azure-devices.net"
"Port": "8883"
"Username": "iotc-x-x-x-x-x.azure-devices.net/plc2/?api-version=2021-04-12"
"Password": "SharedAccessSignature sr=iotc-x-x-x-x-x.azure-devices.net%2Fdevices%2Fplc2&sig=P......D&se=1652037456"

我按照此文档为 MQTT 直接设备连接创建了 SAS 令牌:SAS Token structure
作为创建 SAS 令牌的 ressourceUri,我使用了以下内容:"iotc-x-x-x-x-x.azure-devices.net.azure-devices.net/devices/plc2"

为了测试,我使用了带有 Azure Baltimore 根 CA 证书的 MQTTX windows 客户端,并解释了凭证,一切都很好。

问题


现在我希望通过作为透明网关的 Azure IoT Edge 与 运行 进行通信。我关注了 Microsoft 的 documentation

  1. 创建了 Microsoft 的演示证书
  2. 已配置 "config.toml" -> 将主机名设置为:iotedge-prod1
  3. 在 Azure IoT Central 中配置设备 -> 将其网关设置为边缘设备
  4. 在端口开放且允许上游的边缘使用示例清单文件
  5. 在我的 windows 电脑上创建了一个带有 "192.168.0.100 iotedge-prod1"
  6. 的主机文件条目
  7. 对于边缘设备的新主机名,Ping 正常
  8. 从 windows 机器的 .PEM 证书生成了 .PKCS12 证书
  9. 但现在我无法通过我的 MQTT 客户端连接 -> 它说用户名或密码错误

我的大问题

Edge 设备的 MQTT 连接数据是什么样的?
Edge Hub的结构我想我还没有理解。我尝试了多种凭据组合,但我没有得到它

"ClientID": "plc2" --> 应该可以

"Host": "mqtts://iotedge-prod1" --> 在我看来 IP 地址很重要,对吗?

"Port": "8883" --> 与之前的 TLS 相同

"Username": "iotedge-prod1.iotc-x-x-x-x-x.azure-devices.net/plc2/?api-version=2021-04-12" 或只是 "iotedge-prod1/plc2/?api-version=2021-04-12" --> 用户名必须是什么?

"Password": "SharedAccessSignature sr=iotc...." --> 密码也一样。 SAS 令牌中需要哪些信息?用于创建的 ressourceUri 是:"iotedge-prod1.myHub.azure-devices.net/devices/plc2" 还是 "iotedge-prod1/devices/plc2" 或其他任何不同?

我希望我能解释清楚我的问题是什么。

附加信息:
Edge-config_toml.jpg
Edge-IoTCentral.jpg
Edge-Manifest (MS Docs)

直接连接到 IoT Central 或通过 IoT Edge 作为透明网关的用户名和密码将相同。这是因为 IoT Edge 会将令牌传递给 IoTHub 进行认证。

唯一需要更改的是主机,应该是 mqtts://hostname 或 ip

确保在 MQTTX 客户端中将证书选择为自签名并提供测试根 CA 的路径,不需要客户端证书和密钥。设备的父级也需要在 IoT Central 中正确设置。

例如这里的deviceId是mqttclient,iotedge gateway是raspi###

检查 edgeHub 日志以查看您是否正在从 MQTTX 客户端尝试使用“iotedge logs -f edgeHub”进行连接

一个可能的问题是证书层次结构不正确。如果安装了 Azure IoT Edge,则会安装一些证书。使用 Azure 的演示证书后,层次结构应该与 Microsoft 的 documentation 中的基本相同 - 从“Azure ... 仅测试”开始

Demo Azure Certificate Hierarchy