c - Azure IoT SDK - 连接不被接受的问题
问题描述
我正在使用 Azure IoT SDK for C 尝试在 Azure IoT 门户上的集线器上预配设备。
我已按照说明生成签名证书并将其添加到门户,如此处所述https://github.com/Azure/azure-iot-sdk-c/blob/master/tools/CACertificates/CACertificateOverview.md
当我使用所有更改运行示例代码 prov_dev_client_ll_sample.c 时,我不断收到以下授权错误。我已经为运行 Debian 的 X86-64 芯片构建并运行了此代码,并且还为 ARM 芯片进行了交叉编译,两者都产生了相同的错误。
在 Azure 门户上,我尝试创建一个关联证书的注册组,还尝试创建一个单独的注册,显式添加证书。没有任何效果。人们认为我的时钟可能已经过时了。但是,当我运行date时,它看起来不错。
任何帮助将不胜感激。我现在花了两天多的时间来解决这个问题。
Running provisioning appplication..
Provisioning API Version : 1.3.8
Iothub API Version: 1.3.8
Device Certificate Name File: Device_identity.txt
Device Certificate PEM File : Device_cert.pem
Device Private Key PEM File : Device_key.pem
Error: Time:Fri Jun 19 12:02:42 2020 File:/home/azure-iot-sdk-
c/provisioning_client/src/prov_transport_mqtt_common.c Func:mqtt_operation_complete_callback Line:208
Connection Not Accepted: 0x5: Not Authorized
Error: Time:Fri Jun 19 12:02:42 2020 File:/home/azure-iot-sdk-
c/provisioning_client/src/prov_transport_mqtt_common.c Func:mqtt_error_callback Line:139 MQTT
communication error
Error: Time:Fri Jun 19 12:02:42 2020 File:/home/azure-iot-sdk-
c/provisioning_client/src/prov_device_ll_client.c Func:on_transport_registration_data Line:771
Failure
retrieving data from the provisioning service
Failure encountered on registration PROV_DEVICE_RESULT_DEV_AUTH_ERROR
registration failed!
Press any enter to continue:
解决方案
使用 X.509 证书将设备连接到 Azure IoT 中心有两种不同的场景:
- 注册设备并将其直接连接到您的 IoT 中心
- 使用设备预配服务将您的设备分配和注册到 IoT 中心,以便它可以连接。
此示例向您展示如何在不使用 DPS 的情况下将设备直接连接到 IoT 中心:https ://github.com/Azure/azure-iot-sdk-c/tree/master/iothub_client/samples/iothub_ll_client_x509_sample 。该示例假定您使用https://github.com/Azure/azure-iot-sdk-c/blob/master/tools/CACertificates/CACertificateOverview.md中描述的脚本来生成密钥和证书。有关详细信息,请参阅:https ://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-x509ca-overview 。
此示例(您尝试运行的示例)向您展示了如何使用 DPS 将您的设备注册到 IoT 中心:https ://github.com/Azure/azure-iot-sdk-c/tree/master/provisioning_client/样本/prov_dev_client_sample。该示例使用模拟的硬件安全模块 (HSM) 来生成密钥和证书(而不是脚本)。有关如何运行此示例的详细信息,请参阅https://docs.microsoft.com/azure/iot-dps/quick-create-simulated-device-x509。
推荐阅读
- javascript - 如何修复“POST http://localhost:8000/users/create 405(不允许的方法)”
- reactjs - 我如何在反应钩子中动态调用方法
- javascript - VueJS实时查盘
- graphql - 指定 GraphQL Schema 中允许的子字段
- java - 当我从 sharedpreferences 中读取数据时,是否需要初始化我的 ArrayList?
- python - 登录到 python 请求失败的网站
- mysql - 尝试与自然连接生成的相同关系进行比较时出现语法错误
- c# - 使用 OWIN WebApi 自托管 Unity 的每个请求的生命周期
- javascript - 如何在 typescript 中编写类似于 jquery 的库
- python - 如何从给定的代理池设置 IP 代理?