Я рекомендую выполнить следующие шаги перед подключением реального устройства к IoT Central:
Создайте 3 устройства (например, device1, device2 и device3) с разными типами аутентификации, такими как sas, selfSigned и certificateAuthority в Центре Интернета вещей ( вы также можете использовать уровень Free)
Создайте моделируемое устройство (консольную программу) для каждого типа аутентификации, подключите их к Центру Интернета вещей и отправьте пару сообщений.
Я считаю, что все устройства будут работать правильно (как в моем тесте), поэтому аутентификация через сертификат CA (и листовой сертификат) и самоподписанный сертификат в порядке.
Обратите внимание, что описанные выше шаги прошли в моем тесте с использованием смоделированных устройств C # (.Net SDK), а также с прямым протоколом MQTT с моим Azure IoT Hub Tester.
После того, как ваши смоделированные устройства заработают, этот шаг заключается в их замене (кроме устройства sas) вашим реальным устройством. Это важный шаг, который докажет, что ваше настоящее устройство может быть подключено к Azure IoT Hub.
На этом этапе мы собираемся заменить Центр Интернета вещей на Центральное приложение Интернета вещей. Вы можете создать бесплатное приложение для предварительного просмотра. Вы можете загрузить шаблон устройства, например FM-201 IoT Gateway, и создать 3 устройства, как на шаге 1, из этого шаблона. Обратите внимание: используйте те же идентификаторы устройств, что и на шаге 1, мы можем использовать тот же листовой сертификат устройства.
Используя инструмент dps_cstr, мы можем получить строку подключения устройства для , лежащий в основе IoT Hub приложения IoTC.
Замените имя хоста в ваших смоделированных устройствах, а также вам необходимо создать токен sas из этой строки подключения для аутентификации устройства с помощью токена sas.
Запустите моделируемые устройства, подключенные к приложению IoTC.
Основываясь на моем недавнем тесте, вы увидите, что работает только устройство sas, остальные, например устройства сертификатов, не работают из-за ошибки аутентификации.
Этот шаг предназначен для устранения неполадок, по которым моделируемые устройства X509, переключающиеся на приложение IoTC, не проходят проверку подлинности с использованием тех же сертификатов. Для этого случая нет надлежащего документа, и я надеюсь, что кто-то из команды IoT Central ответит на него, если мы сможем переключить устройство X509 между Центром Интернета вещей и приложением IoTC, как мы можем сделать это для устройства sas em >.
Обновление:
На основе Образца клиента устройства инициализации - Microsoft Azure IoT SDK для .NET, шаги 6 и 7 подходят для sas device, где утилита dps_cstr зарегистрирует устройство для SecurityProviderSymmetricKey. После того, как устройство было зарегистрировано и предоставлено этому провайдеру безопасности, реальное устройство (а) должно быть подключено только этим способом. Вот почему мы получаем ошибку для смоделированных устройств x509. Итак, следующий шаг - это пример подготовки устройства X509 с листовым сертификатом (device3.pfx). Обратите внимание, что сертификат CA необходимо загрузить в приложение IoTC.
6a. Регистрация device3 (из шага 1) в приложении IoTC.
string GlobalDeviceEndpoint = "global.azure-devices-provisioning.net";
string idScope = "<idScope_IoTCapp>";
string certificateFileName = @"<your path>\device3.pfx";
//
var cert = new X509Certificate2(certificateFileName, "1234");
var securityProvider = new SecurityProviderX509Certificate(cert);
var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.TcpOnly);
var provClient = ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, idScope, securityProvider, transport);
var result = provClient.RegisterAsync().Result;
string hostname = result.AssignedHub;
string deviceId = result.DeviceId;
На этом этапе состояние устройства в приложении IoTC - Provisioned, и можно подключить смоделированное или реальное устройство.
6b. Для подготовки устройства к приложению IoT Central также можно использовать REST API. Следующие фрагменты экрана показывают подготовку X509 device3, аутентифицированного его конечным сертификатом с помощью Postman:
Перед использованием вызовов REST мы должны добавить листовой сертификат device3 в Postman:
Теперь мы можем вызвать службу подготовки:
PUT https://global.azure-devices-provisioning.net/0ne000AA0F5/registrations/device3/register?api-version=2019-03-31
Чтобы получить объект registrationState:
GET https://global.azure-devices-provisioning.net/0ne000AA0F5/registrations/device3/operations/{operationId}?api-version=2019-03-31
Как вы можете видеть на картинке выше, приложение IoTC готово к подключению к реальному устройству X509.
"registrationState": {
"x509": {
"enrollmentGroupId": "fa472b95-b5f6-47af-a4ef-9490f45c3961"
},
"registrationId": "device3",
"createdDateTimeUtc": "2020-01-04T17:09:15.5147034Z",
"assignedHub": "iotc-bceedf66-9792-4f32-b49f-7674a6aa09ff.azure-devices.net",
"deviceId": "device3",
"status": "assigned",
"substatus": "initialAssignment",
"lastUpdatedDateTimeUtc": "2020-01-04T17:09:15.6947214Z",
"etag": "IjBmMDA3YTgzLTAwMDAtMGMwMC0wMDAwLTVlMTBjNmJiMDAwMCI="
}
Обратите внимание, что в случае инициализации sas-устройства (например, device1 в этом тесте) с использованием вызовов REST, заголовок Authorization должен быть настроенным с помощью токена sas:
string sas = generateSASToken($"{scopeId}/registrations/{deviceId}", deviceKey, "registration");
7a. Следующий фрагмент кода является примером отправки данных телеметрии с устройства X509 с его конечным сертификатом (device3.pfx):
using (var dc = DeviceClient.Create(hostname, new DeviceAuthenticationWithX509Certificate(deviceId, cert), Microsoft.Azure.Devices.Client.TransportType.Mqtt))
{
var telemetryDataPoint = new { bleCnt = 50, telemetryLocation = new { lat = 49.85, lon = 20.99, alt = 29.41 } };
dc.OpenAsync().ConfigureAwait(false);
dc.SendEventAsync(new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(telemetryDataPoint)))).ConfigureAwait(false);
dc.CloseAsync().ConfigureAwait(false);
}
Кроме того, с помощью моего Azure IoT Hub Tester, основанного на библиотека M2Mqtt device3 с листовым сертификатом device3.pfx успешно подключился к приложению IoTC.
На основе вышеуказанного обновления я хотел бы исправить шаг 10. Похоже, устройства (например, sas и X509) можно переключать между Azure IoT Hub и центральным приложением IoT после того, как устройства были подготовлены в приложении IoTC. Другими словами, имя хоста (например, из моего тестового предварительного просмотра приложения IoTC iotc-bceedf66-9792-4f32-b49f-7674a6aa09ff.azure-devices.net) из процесса подготовки является допустимым устройством, обращенным к конечной точке.
Также мой тест показал, что устройство с прямым протоколом MQTT, использующим листовой сертификат (device3.pfx) для подключения к приложению IoTC, работает очень хорошо, оба направления включают модель PnP.
Следующие фрагменты экрана показывают сторону устройства и приложение IoTC:
публикация некоторых данных телеметрии:
отображение данных телеметрии на панели управления:
и сертификат корневого ЦС в приложении IoTC:
person
Roman Kiss
schedule
30.12.2019