Connect a downstream device to an Azure IoT Edge gateway (Подключение подчиненного устройства к шлюзу Azure IoT Edge)

Область применения:IoT Edge 1.5 проверка mark IoT Edge 1.5 IoT Edge 1.4 проверка mark IoT Edge 1.4

Внимание

Поддерживаются выпуски IoT Edge 1.5 LTS и IoT Edge 1.4 LTS. IoT Edge 1.4 LTS заканчивается жизнью 12 ноября 2024 года. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.

Здесь приведены инструкции по установлению надежного подключения между подчиненными устройствами и прозрачными шлюзами IoT Edge. В сценарии прозрачного использования шлюзов одно или несколько устройств передают сообщения через одно устройство шлюза, которое поддерживает подключение к Центру Интернета вещей. Здесь термины шлюза и шлюза IoT Edge ссылаются на устройство IoT Edge, настроенное как прозрачный шлюз.

Примечание.

Нижестоящему устройству выдаются данные непосредственно в Интернет или на устройства шлюза (с поддержкой IoT Edge или нет). Дочернее устройство может быть подчиненным устройством или устройством шлюза в вложенной топологии.

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

  1. Настройте устройство шлюза в качестве сервера, чтобы подчиненные устройства могли безопасно подключаться к нему. Настройте шлюз для приема сообщений от подчиненных устройств и направьте передачу данных из них в нужное место назначения. Описание шагов из этого раздела см. в статье Настройка устройства IoT Edge для использования в качестве прозрачного шлюза.

  2. Создание удостоверения устройства для подчиненного устройства, чтобы оно могло проходить проверку подлинности в Центре Интернета вещей. Настройте подчиненное устройство для отправки сообщений через устройство шлюза. Дополнительные сведения см. в разделе Аутентификация подчиненного устройства в Центре Интернета вещей.

  3. Подключите подчиненное устройство к устройству шлюза и начните отправку сообщений.

В этой статье вы узнаете о компонентах подключения нижестоящего устройства, таких как:

  • Основы безопасности транспортного уровня (TLS) и сертификатов.
  • Библиотеки TLS работают в разных операционных системах, обрабатывающих сертификаты по-разному.

Затем вы просматриваете примеры Интернета вещей Azure в предпочитаемом языке, чтобы получить устройство для отправки сообщений в шлюз.

Необходимые компоненты

Получите следующее для подготовки нижестоящего устройства:

Примечание.

Устройства Интернета вещей, зарегистрированные в Центре Интернета вещей, могут использовать двойники модуля для изоляции различных процессов, оборудования или функций на одном устройстве. Шлюзы IoT Edge поддерживают подчиненные подключения модулей, используя проверку подлинности с симметричным ключом, но не проверку подлинности сертификата X.509.

Основные сведения о TLS и сертификатах

При создании безопасного подключения между подчиненными устройствами и IoT Edge возникают такие же трудности, как и при любом обмене данными через Интернет в режиме "клиент — сервер". Клиент и сервер безопасно обмениваются данными через Интернет по протоколу TLS. Протокол TLS основан на конструкциях стандарта инфраструктуры открытых ключей (PKI), называемых сертификатами. Протокол TLS является довольно распространенным и предназначен для широкого спектра тем, относящихся к защите двух конечных точек. В этом разделе перечислены основные понятия, относящиеся к безопасному подключению устройств к шлюзу IoT Edge.

Когда клиент подключается к серверу, сервер предоставляет ему цепочку сертификатов сервера. Такая цепочка обычно состоит из сертификата корневого ЦС, одного или нескольких сертификатов промежуточных ЦС, и сертификата самого сервера. Клиент устанавливает отношения доверия с сервером, криптографически проверяя всю цепочку сертификатов сервера. Процесс проверки цепочки сертификатов сервера на клиенте называется проверкой цепочки сервера. Клиент ждет, что сервер докажет наличие закрытого ключа, связанного с сертификатом сервера, в рамках процесса, который называется доказательством владения. Сочетание проверки цепочки сервера и доказательства владения называется проверкой подлинности сервера. Чтобы проверить цепочку сертификатов сервера, клиенту нужна копия сертификата корневого ЦС, который использовался для создания (выдачи) этого сертификата сервера. Как правило, при подключении к веб-сайтам браузер предварительно настраивается с часто используемыми сертификатами ЦС, поэтому клиент имеет простой процесс.

Когда устройство подключается к Центру Интернета вещей, оно выполняет роль клиента облачной службы, а служба Центра Интернета вещей представляет собой сервер. Облачная служба Центра Интернета вещей поддерживается сертификатом корневого ЦС с именем Baltimore CyberTrust Root, который является общедоступным и широко распространенным. Так как сертификат ЦС для Центра Интернета вещей уже установлен на большинстве устройств, во многих реализациях TLS (OpenSSL, Schannel, LibreSSL) он автоматически используется для проверки сертификата сервера. Возможна ситуация, когда устройство успешно подключается к Центру Интернета вещей, но при попытке подключения к шлюзу IoT Edge возникают проблемы.

Когда устройство подключается к шлюзу IoT Edge, подчиненное устройство выполняет роль клиента, а устройство шлюза представляет собой сервер. Azure IoT Edge позволяет по своему усмотрению создавать любые цепочки сертификатов шлюза. Вы можете использовать сертификат общедоступного ЦС, например Baltimore, или самозаверяющий сертификат внутреннего корневого ЦС. Сертификаты общедоступных ЦС часто предоставляются за плату, что делает их использование более оправданным для рабочих сценариев. Самозаверяющие сертификаты удобны для разработки и тестирования. Демонстрационные сертификаты — самозаверяющий корневой ЦС.

Если вы используете для шлюза IoT Edge самозаверяющий корневой сертификат, он должен быть установлен или предоставлен для всех подчиненных устройств, которые будут подключаться к этому шлюзу.

Снимок экрана: настройка сертификата шлюза.

Дополнительные сведения о сертификатах IoT Edge и некоторых ограничениях для рабочей среды см. в статье Сведения об использовании сертификатов Azure IoT Edge.

Предоставление сертификата корневого ЦС

Чтобы проверить сертификаты устройства шлюза, подчиненному устройству требуется собственная копия сертификата корневого ЦС. Если вы использовали скрипты, предоставленные в репозитории git IoT Edge, для создания тестовых сертификатов, сертификат корневого ЦС называется azure-iot-test-only.root.ca.cert.pem.

Если вы еще не сделали этого, переместите этот файл сертификата в любой каталог на нижнем устройстве. Файл можно переместить, установив сертификат ЦС в хранилище сертификатов операционной системы или (для определенных языков), ссылаясь на сертификат в приложениях с помощью пакетов SDK Для Интернета вещей Azure.

Для перемещения файлов сертификатов можно использовать службу, например Azure Key Vault, или функцию, такую как протокол защищенного копирования.

Установка сертификатов в операционной системе

После того как сертификат корневого ЦС находится на нижнем устройстве, убедитесь, что приложения, подключающиеся к шлюзу, могут получить доступ к сертификату.

Установка сертификата корневого ЦС в хранилище сертификатов операционной системы обычно позволяет большинству приложений использовать сертификат корневого ЦС. Но есть и некоторые исключения, например: приложения NodeJS используют не хранилище сертификатов ОС, а внутреннее хранилище сертификатов среды выполнения Node. Если вы не можете установить сертификат на уровне операционной системы, перейдите к разделу Использование сертификатов с пакетами SDK для Интернета вещей Azure.

Установите корневой сертификат ЦС в Ubuntu или Windows.

Команды из следующего примера устанавливают сертификат ЦС на узле под управлением ОС Ubuntu. В этом примере предполагается, что вы используете сертификат azure-iot-test-only.root.ca.cert.pem из статей, указанных в предварительных требованиях, и этот сертификат вы скопировали в локальное расположение на подчиненном устройстве.

sudo cp <file path>/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
sudo update-ca-certificates

Должно отобразиться следующее сообщение: "Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done."

Использование сертификатов с пакетами SDK для Azure IoT

Пакеты SDK Для Интернета вещей Azure подключаются к устройству IoT Edge с помощью простых примеров приложений. Цель примеров — подключить клиент устройства и отправить сообщения телеметрии шлюзу, а затем закрыть подключение и выйти.

Прежде чем использовать примеры на уровне приложения, получите следующие элементы:

  • Ваш Центр Интернета вещей строка подключения с нижнего устройства, измененного, чтобы указать на устройство шлюза.

  • Все сертификаты, необходимые для проверки подлинности нижнего устройства в Центр Интернета вещей. Дополнительные сведения см. в разделе Проверка подлинности подчиненного устройства в Центре Интернета вещей.

  • Полный путь к сертификату корневого ЦС, который вы скопировали (сохранили) на подчиненное устройство.

    Например: <file path>/azure-iot-test-only.root.ca.cert.pem.

Теперь вы готовы использовать сертификаты с примером на выбранном языке:

Этот раздел содержит пример приложения для подключения клиентского устройства Azure IoT NodeJS к шлюзу IoT Edge. Для приложений Node.js необходимо установить сертификат корневого ЦС на уровне приложения, как показано здесь. Приложения Node.js не используют хранилище сертификатов системы.

  1. Получите пример файла edge_downstream_device.js из репозитория примеров использования пакета SDK для устройств Azure IoT для Node.js.
  2. Убедитесь, что у вас есть все необходимые компоненты для запуска примера (см. файл readme.md).
  3. В файле edge_downstream_device.js измените переменные connectionString и edge_ca_cert_path.
  4. В документации по пакету SDK вы найдете инструкции по запуску примера на конкретном устройстве.

Чтобы помочь вам разобраться в выполняемом примере, мы приводим ниже фрагмент кода, в котором клиентский пакет SDK считывает файл сертификата и использует его для создания безопасного TLS-подключения:

// Provide the Azure IoT device client via setOptions with the X509
// Edge root CA certificate that was used to setup the Edge runtime
var options = {
    ca : fs.readFileSync(edge_ca_cert_path, 'utf-8'),
};

Тестирование подключения к шлюзу

Используйте этот пример команды на подчиненном устройстве, чтобы проверить возможность подключения к устройству шлюза:

openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts

Эта команда проверяет подключение через MQTTS (порт 8883). Если вы используете другой протокол, настройте команду по мере необходимости для AMQPS (5671) или HTTPS (443).

Выходные данные этой команды могут быть длинными, включая сведения обо всех сертификатах в цепочке. Если подключение выполнено успешно, отображается строка или Verification: OKVerify return code: 0 (ok).

Снимок экрана: проверка подключения шлюза.

Устранение неполадок с подключением шлюза

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

  • Имя узла шлюза в строке подключения совпадает со значением имени узла в файле конфигурации IoT Edge на устройстве шлюза?
  • Имя узла шлюза разрешается в IP-адресе? Можно разрешить периодические подключения с помощью DNS или путем добавления записи файла узла на нижнем устройстве.
  • Открыты ли порты связи в брандмауэре? Между подчиненным устройством и прозрачным шлюзом IoT Edge должна быть возможность взаимодействия по используемому протоколу (MQTTS:8883/AMQPS:5671/HTTPS:433).

Следующие шаги

Узнайте, как IoT Edge расширяет возможности автономной работы для подчиненных устройств.