2017-01-10 7 views
0


Я использую RaspberryPi с Ubuntu Mate, и я пытаюсь запустить образцы с Iot Hub Client. Я построил библиотеку для Ubuntu doumented here. Я также создал версию Windows для тестирования, и он отлично работал с точным кодом. Я получаю ошибку на Unix, при использовании IoTHubClient.send_event_async является:Клиент IoT Hub на Emb Linux возвращает SSL-канал, когда send_event_async

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. 

Я попытался это исправить, установив системное время и проверить спецификации сертификатов: Я пытался «пинг» сервер, чтобы увидеть если я могу подключиться к нему с:

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 
    ...... 

Итак, все нормально, Все выглядит отлично, но все же я получаю эту ошибку. Кто-нибудь знает, что может быть неправильным?
Спасибо

ответ

0

У меня есть опыт в этом, что может вам помочь.

Во-первых, убедитесь, что время на вашем RaspberryPi правильное.

Затем распечатать пароль устройства, чтобы увидеть, если таковые поля является правильным: в umqtt/SRC/mqtt_codec.c constructConnPayload() mqttOptions-> пароль выглядеть следующим образом: SharedAccessSignature КН = ВГД-xxxx.azure-устройств .net/устройства/хххх & сиг = XXXXXXXXXXX & се = 1484812561 & СКН =

Если посмотреть себе = 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) (время (NULL));

В моей системе находится EPOCH_TIME_T_VALUE, поэтому (difftime (get_time (NULL), EPOCH_TIME_T_VALUE) + 0) должно быть равно get_time (NULL). Но difftime, похоже, не работает в моей системе, поэтому secSinceEpoch всегда 0. Наконец, я просто использую для этого время (NULL).

Я провел дни для этого решения. Надеюсь, это может вам помочь.

 Смежные вопросы

  • Нет связанных вопросов^_^