Как встроить AWS Just In Time Provisioning (JITP) в ваш микроконтроллер (под управлением Freertos) - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь запустить приложение на Amazon Freertos, которое использует механизм своевременной инициализации, позволяющий выделять множество устройств.

Я выполнил шаги, чтобы настроить демонстрационное приложение на freertos для устройства Espressif ESP32. Это прекрасно работает, но включает эффективное ручное копирование ваших учетных данных непосредственно в исходный код в одном из запущенных вами сценариев. Хорошее доказательство концепции, но не подходит для производства.

Я отдельно прошел через настройку JITP в бэкэнде AWS. Последний шаг - вручную вызвать комара из bash для отправки ложного сообщения, имитирующего передачу MQTT с устройства.

Это обеспечивает правильную настройку устройства.

Мой вопрос заключается в том, как взять эти строительные блоки и собрать несколько аппаратных устройств, чтобы все они были подготовлены и успешно подключались к AWS IOT.

Некоторые специфические моменты: 1. Какие файлы входят в прошивку устройства? Признаюсь, что у меня не хватает опыта в сфере криптографии и сертификатов. Я думаю, что мне нужно поставить root.cert;deviceVertAndCACert.crt;deviceCert.key в устройство и отправьте запрос MQTT точно в соответствии с поддельным сообщением. Но как это меняется для нескольких устройств? Что отличает одно устройство от другого?

Я предполагаю, что фактический код на аппаратном устройстве одинаков для всех устройств. Допустимо ли это предположение?

Если мне удастся подготовить большое количество устройств, как мне обработать входящий поток данных в AWS IOT. Я хотел бы предусмотреть применение правила для обработки входящих сообщений.

Поддельное сообщение Москита:

$ mosquitto_pub --cafile root.cert --cert deviceCertAndCACert.crt --key deviceCert.key -h <prefix>.iot.us-east-1.amazonaws.com -p 8883 -q 1 -t foo/bar -I anyclientID --tls-version tlsv1.2 -m "Hello" -d

1 Ответ

1 голос
/ 23 октября 2019
  1. Вы правы, вам нужен сертификат CA, к которому прикреплен шаблон из JITP, сертификат устройства и ваш закрытый ключ. Для сертификата и закрытого ключа устройства они должны быть уникальными для каждого устройства и должны быть размещены на устройстве один раз (посредством запуска демонстрационной версии или путем прямой записи в имена файлов, ожидаемые в iot_pkcs11_pal.c во время изготовления)

Для CA "Сертификат JITP / JITR" у вас есть 2 варианта - вы можете либо изменить iot_pkcs11_pal.c, чтобы получить этот сертификат и сохранить его, либо, если сертификат JITR одинаков для всех устройств, вы можетепросто оставьте #define keyJITR_DEVICE_CERTIFICATE_AUTHORITY_PEM в коде.

Для нескольких устройств еще одной вещью, которую необходимо учитывать, является Thing Name - вы можете использовать поле сертификата устройства для передачи своего «Thing Name» в AWS IoT,например, поле CommonName сертификата устройства. #Define clientcredentialIOT_THING_NAME может быть заменено функцией (например, getThingName ()), которая анализирует сертификат и хранит имя вещи где-то, что другие библиотеки могут ссылаться на него. Thing Name должно быть уникальным для каждого устройства - некоторые люди используют уникальный идентификатор устройства для Thing Names.

Когда устройство подключается к ЦС, настроенному с помощью JITP, поскольку каждый сертификат устройства уникален, он может создавать разные вещи. (и зарегистрируйте сертификат устройства и прикрепите политику) для каждого отдельного устройства.

Да, это действительно, учитывая, что вы размещаете сертификат устройства и закрытый ключ при изготовлении и программно извлекаете название вашей вещи, как упомянуто выше.

Как только ваше устройство зарегистрировано вAWS IoT и возможность подключаться и отправлять сообщения MQTT, вы можете использовать AWS IoT Rules, чтобы установить правила для того, что делать с поступающими данными ( В этом уроке показано добавление данных из сообщений MQTT в DynamoDB, инициирующее лямбдуФункция для выполнения кода, который вы пишете, или отправки сообщения SNS)

...