gpt4 book ai didi

linux - Emb Linux 上的 IoT Hub 客户端在 send_event_async 时返回关闭的 SSL channel

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:33 26 4
gpt4 key购买 nike


我正在使用 RaspberryPi 和 Ubuntu Mate,我正在尝试运行来自 Iot Hub Client 的示例.我为 Ubuntu 构建了库 doumented here .我还构建了仅用于测试的 Windows 版本,它使用确切的代码运行良好。使用 IoTHubClient.send_event_async 时,我在 Unix 上遇到的错误是:

Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609]
IoT Hub for Python SDK Version: 1.0.17
Starting the IoT Hub Python sample...
Protocol MQTT
Connection string=HostName=<hub name>.azure-devices.net;DeviceId=BananaPi_rasp;SharedAccessKey=<access kwy>
Info: IoT Hub SDK for C, version 1.0.17
IoTHubClient sending 2 messages
IoTHubClient.send_event_async accepted message [0] for transmission to IoT Hub.
Error: Time:Tue Jan 10 02:21:25 2017 File:/home/pi/azure-iot-sdks/c/iothub_client/src/iothubtransport_mqtt_common.c Func:mqtt_operation_complete_callback Line:951 Connection Not Accepted: 0x5: Not Authorized
Error: Time:Tue Jan 10 02:21:25 2017 File:/home/pi/azure-iot-sdks/c/c-utility/src/tlsio_openssl.c Func:decode_ssl_received_bytes Line:654 SSL channel closed in decode_ssl_received_bytes.
Error: Time:Tue Jan 10 02:21:25 2017 File:/home/pi/azure-iot-sdks/c/c-utility/src/tlsio_openssl.c Func:on_underlying_io_bytes_received Line:709 Error in decode_ssl_received_bytes.

我尝试通过设置系统时间和检查证书规范来修复它:我尝试“ping”服务器以查看是否可以连接到它:

openssl s_client -connect .azure-devices.net:8883

我得到:

CONNECTED(00000003)
depth=2 C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root
......
Server certificate
-----BEGIN CERTIFICATE-----
MIIGcjCCBFqgAwIBAgITWgABtrN..........<etire certificate>...
......
SSL handshake has read 3677 bytes and written 531 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA384
Server public key is 2048 bit
.....
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-SHA384
Session-ID: B0010000E7F6C6ADDC09A37DC7C618C4F4522528E20C8AD6E08DCB5B302101D2
Session-ID-ctx:
Start Time: 1483986649
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
read:errno=0

据我所知,一切看起来都不错。

我还尝试检查证书的有效性:

openssl x509 -in /usr/lib/ssl/certs/Baltimore_CyberTrust_Root.pem

我得到:

  ........
Validity
Not Before: May 12 18:46:00 2000 GMT
Not After : May 12 23:59:00 2025 GMT
......

所以看起来还可以,这里的一切看起来都很好,但我仍然收到该错误。有人知道哪里出了问题吗?
谢谢

最佳答案

我在这方面有一些经验,可能会对你有所帮助。

首先,确保您的 RaspberryPi 上的系统时间正确。

然后打印你的设备密码看se字段是否正确:在 umqtt/src/mqtt_codec.c constructConnPayload()mqttOptions->password 是这样的:SharedAccessSignature sr=IoT-xxxx.azure-devices.net/devices/xxxx&sig=xxxxxxxxxxx&se=1484812561&skn=

如果你看到se=3600或者不等于(当前UTC时间+3600),那么你的情况跟我一样。

修复方法:在 iothub_client/src/iothubtransport_mqtt_common.c SendMqttConnectMsg()案例DEVICE_KEY:修改 size_t secSinceEpoch = (size_t)(difftime(get_time(NULL), EPOCH_TIME_T_VALUE) + 0);到 size_t secSinceEpoch = (size_t)(time(NULL));

EPOCH_TIME_T_VALUE 在我的系统上是 0,所以 (difftime(get_time(NULL), EPOCH_TIME_T_VALUE) + 0) 应该等于 get_time(NULL)。但是 difftime 似乎在我的系统上不起作用,所以 secSinceEpoch 总是 0。最后我只用了 time(NULL)。

我花了好几天时间来研究这个解决方案。希望对您有所帮助。

关于linux - Emb Linux 上的 IoT Hub 客户端在 send_event_async 时返回关闭的 SSL channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41565874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com