Руководство по настройке регистрации через безопасный транспортный сервер для Azure IoT Edge
Область применения: IoT Edge 1.5 IoT Edge 1.4
Внимание
Поддерживаются выпуски IoT Edge 1.5 LTS и IoT Edge 1.4 LTS. IoT Edge 1.4 LTS заканчивается жизнью 12 ноября 2024 года. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.
С помощью Azure IoT Edge вы можете настроить устройства для использования сервера регистрации по протоколу Secure Transport (EST) для управления сертификатами x509.
В этом руководстве описывается размещение тестового сервера EST и настройка устройства IoT Edge для регистрации и продления сертификатов x509. В этом руководстве описано следующее:
- Создание и размещение тестового сервера EST
- Настройка регистрации группы DPS
- Настройка устройства
Необходимые компоненты
- Существующее устройство IoT Edge с последней установленной средой выполнения Azure IoT Edge. Если вам нужно создать тестовое устройство, выполните краткое руководство. Развертывание первого модуля IoT Edge на виртуальном устройстве Linux.
- Для поддержки EST требуется среда выполнения Azure IoT Edge 1.2 или более поздней версии. Среда выполнения Azure IoT Edge 1.3 или более поздней версии, необходимая для продления сертификата EST.
- Центр Интернета вещей служба подготовки устройств (DPS), связанная с Центр Интернета вещей. Сведения о настройке DPS см. в кратком руководстве. Настройка службы подготовки устройств Центр Интернета вещей с помощью портал Azure.
Что такое регистрация через безопасный транспорт?
Регистрация по протоколу Secure Transport (EST) — это криптографический протокол, который автоматизирует выдачу сертификатов x.509. Он используется для клиентов инфраструктуры открытых ключей (PKI), таких как IoT Edge, которые нуждаются в сертификатах клиента, связанных с центром сертификации (ЦС). EST заменяет необходимость ручного управления сертификатами, что может быть рискованным и подверженным ошибкам.
Сервер EST
Для выдачи и продления сертификата требуется сервер EST, доступный для ваших устройств.
Внимание
Для решений корпоративного уровня рассмотрим: GlobalSign IoT Edge Enroll или DigiCert IoT диспетчер устройств.
Для тестирования и разработки можно использовать тестовый сервер EST. В этом руководстве мы создадим тестовый сервер EST.
Запуск сервера EST на устройстве
Чтобы быстро приступить к работе, в этом руководстве показано, как развернуть простой сервер EST в контейнере локально на устройстве IoT Edge. Этот метод является самым простым подходом, чтобы попробовать его.
Dockerfile использует Ubuntu 18.04, вызываемуюlibest
библиотеку Cisco и пример кода сервера. Он настроен с помощью следующего параметра, который можно изменить:
- Корневой ЦС действителен в течение 20 лет
- Сертификат сервера EST действителен в течение 10 лет
- Задайте для сертификата значение 1(1), чтобы проверить продление EST
- Сервер EST выполняется локально на устройстве IoT Edge в контейнере
Внимание
Не используйте этот файл Dockerfile в рабочей среде.
Подключитесь к устройству, например с помощью SSH, где вы установили IoT Edge.
Создайте файл с именем
Dockerfile
(учитывает регистр) и добавьте образец содержимого с помощью избранного текстового редактора.Совет
Если вы хотите разместить сервер EST в экземпляре контейнеров Azure, измените
myestserver.westus.azurecontainer.io
DNS-имя сервера EST. При выборе DNS-имени помните, что метка DNS для экземпляра контейнера Azure должна иметь по крайней мере пять символов.# DO NOT USE IN PRODUCTION - Use only for testing # FROM ubuntu:18.04 RUN apt update && apt install -y apache2-utils git openssl libssl-dev build-essential && \ git clone https://github.com/cisco/libest.git && cd libest && \ ./configure --disable-safec && make install && \ rm -rf /src && apt remove --quiet -y libssl-dev build-essential && \ apt autoremove -y && apt clean -y && apt autoclean -y && \ rm -rf /var/lib/apt /tmp/* /var/tmp/* WORKDIR /libest/example/server/ # Setting the root CA expiration to 20 years RUN sed -i "s|-days 365|-days 7300 |g" ./createCA.sh ## If you want to host your EST server remotely (for example, an Azure Container Instance), ## change myestserver.westus.azurecontainer.io to the fully qualified DNS name of your EST server ## OR, change the IP address ## and uncomment the corresponding line. # RUN sed -i "s|DNS.2 = ip6-localhost|DNS.2 = myestserver.westus.azurecontainer.io|g" ./ext.cnf # RUN sed -i "s|IP.2 = ::1|IP.2 = <YOUR EST SERVER IP ADDRESS>|g" ./ext.cnf # Set EST server certificate to be valid for 10 years RUN sed -i "s|-keyout \$EST_SERVER_PRIVKEY -subj|-keyout \$EST_SERVER_PRIVKEY -days 7300 -subj |g" ./createCA.sh # Create the CA RUN echo 1 | ./createCA.sh # Set cert default-days to 1 to show EST renewal RUN sed -i "s|default_days = 365|default_days = 1 |g" ./estExampleCA.cnf # The EST server listens on port 8085 by default # Uncomment to change the port to 443 or something else. If changed, EXPOSE that port instead of 8085. # RUN sed -i "s|estserver -c|estserver -p 443 -c |g" ./runserver.sh EXPOSE 8085 CMD ./runserver.sh
В каталоге, содержающем
Dockerfile
образ, создайте образ из примера Dockerfile.sudo docker build . --tag est
Запустите контейнер и предопустите порт 8085 для порта 8085 на узле.
sudo docker run -d -p 8085:8085 est
Теперь сервер EST запущен и может быть достигнут с помощью
localhost
порта 8085. Убедитесь, что он доступен, выполнив команду, чтобы просмотреть его сертификат сервера.openssl s_client -showcerts -connect localhost:8085
Вы увидите
-----BEGIN CERTIFICATE-----
в середине выходных данных. Получение сертификата проверяет, доступен ли сервер и может представить его сертификат.
Совет
Чтобы запустить этот контейнер в облаке, создайте образ и отправьте образ в Реестр контейнеров Azure. Затем выполните краткое руководство по развертыванию в экземпляре контейнеров Azure.
Скачивание сертификата ЦС
Для каждого устройства требуется сертификат центра сертификации (ЦС), связанный с сертификатом удостоверения устройства.
На устройстве IoT Edge создайте
/var/aziot/certs
каталог, если он не существует, измените его на него.# If the certificate directory doen't exist, create, set ownership, and set permissions sudo mkdir -p /var/aziot/certs sudo chown aziotcs:aziotcs /var/aziot/certs sudo chmod 755 /var/aziot/certs # Change directory to /var/aziot/certs cd /var/aziot/certs
Извлеките сертификат ЦС с сервера EST в
/var/aziot/certs
каталог и назовите егоcacert.crt.pem
.openssl s_client -showcerts -verify 5 -connect localhost:8085 < /dev/null | sudo awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' && sudo cp cert2.pem cacert.crt.pem
Сертификаты должны принадлежать пользователям службы ключей. Задайте для владельца значение aziotcs для всех файлов сертификатов и задайте разрешения. Дополнительные сведения о владельцах сертификатов и разрешениях см. в разделе "Требования к разрешениям".
# Give aziotcs ownership to certificates sudo chown -R aziotcs:aziotcs /var/aziot/certs # Read and write for aziotcs, read-only for others sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;
Подготовка устройства IoT Edge с помощью DPS
Использование службы подготовки устройств позволяет автоматически выдавать и обновлять сертификаты с сервера EST в IoT Edge. При использовании сервера EST руководства срок действия сертификатов удостоверений истекает в один день, выполняя подготовку вручную с Центр Интернета вещей нецелесообразно, так как каждый раз, когда срок действия сертификата истекает, необходимо вручную обновить в Центр Интернета вещей. Проверка подлинности ЦС DPS с группой регистрации позволяет обновлять сертификаты удостоверения устройства без каких-либо действий вручную.
Отправка сертификата ЦС в DPS
Если у вас нет службы подготовки устройств, связанной с Центр Интернета вещей, см. краткое руководство. Настройка службы подготовки устройств Центр Интернета вещей с помощью портал Azure.
cacert.crt.pem
Передайте файл с устройства на компьютер с доступом к портал Azure, например компьютер разработки. Простой способ передачи сертификата — удаленно подключиться к устройству, отобразить сертификат с помощью командыcat /var/aziot/certs/cacert.crt.pem
, скопировать все выходные данные и вставить содержимое в новый файл на компьютере разработки.На портале Azure перейдите к экземпляру Службы подготовки устройств к добавлению в Центр Интернета вещей.
В разделе "Параметры" выберите "Сертификаты" и "Добавить".
Параметр Значение Имя сертификата Укажите понятное имя сертификата ЦС Pem-файл сертификата или .cer Перейдите cacert.crt.pem
на сервер ESTЗадать для параметра "Состояние сертификата" значение "проверено при передаче" Установите флажок Выберите Сохранить.
Создание группы регистрации
На портале Azure перейдите к экземпляру Службы подготовки устройств к добавлению в Центр Интернета вещей.
В разделе Параметрывыберите Управление регистрациями.
Нажмите кнопку "Добавить группу регистрации", а затем выполните следующие действия, чтобы настроить регистрацию.
На вкладке "Регистрация и подготовка " выберите следующие параметры:
Параметр Значение Механизм аттестации Выберите сертификаты X.509, отправленные в этот экземпляр службы подготовки устройств Первичный сертификат Выберите сертификат из раскрывающегося списка Имя группы Укажите понятное имя для регистрации этой группы Состояние подготовки Установите флажок "Включить эту регистрацию" На вкладке "Центры Интернета вещей" выберите Центр Интернета вещей из списка.
На вкладке "Параметры устройства" установите флажок "Включить IoT Edge" на подготовленных устройствах .
Другие параметры не относятся к учебнику. Вы можете принять настройки по умолчанию.
Выберите Review + create (Просмотреть и создать).
Теперь, когда для устройства существует регистрация, среда выполнения IoT Edge может автоматически управлять сертификатами устройств для связанной Центр Интернета вещей.
Настройка устройства IoT Edge
На устройстве IoT Edge обновите файл конфигурации IoT Edge, чтобы использовать сертификаты устройств с сервера EST.
Откройте файл конфигурации IoT Edge с помощью редактора. Например, используйте
nano
редактор для открытия/etc/aziot/config.toml
файла.sudo nano /etc/aziot/config.toml
Добавьте или замените следующие разделы в файле конфигурации. Эти параметры конфигурации изначально используют проверку подлинности имени пользователя и пароля для получения сертификата устройства с сервера EST. Сертификат устройства используется для проверки подлинности на сервере EST для будущих обновлений сертификатов.
Замените следующий текст заполнителя:
<DPS-ID-SCOPE>
областью идентификатора DPS, связанной с Центр Интернета вещей, содержащей зарегистрированное устройство, иmyiotedgedevice
идентификатором устройства, зарегистрированным в Центр Интернета вещей Azure. Значение области идентификатора можно найти на странице обзора DPS.# DPS provisioning with X.509 certificate # Replace with ID Scope from your DPS [provisioning] source = "dps" global_endpoint = "https://global.azure-devices-provisioning.net" id_scope = "<DPS-ID-SCOPE>" [provisioning.attestation] method = "x509" registration_id = "myiotedgedevice" [provisioning.attestation.identity_cert] method = "est" common_name = "myiotedgedevice" # Auto renewal settings for the identity cert # Available only from IoT Edge 1.3 and above [provisioning.attestation.identity_cert.auto_renew] rotate_key = false threshold = "80%" retry = "4%" # Trusted root CA certificate in the global EST options # Optional if the EST server's TLS certificate is already trusted by the system's CA certificates. [cert_issuance.est] trusted_certs = [ "file:///var/aziot/certs/cacert.crt.pem", ] # The default username and password for libest # Used for initial authentication to EST server # # Not recommended for production [cert_issuance.est.auth] username = "estuser" password = "estpwd" [cert_issuance.est.urls] default = "https://localhost:8085/.well-known/est"
Примечание.
В этом примере IoT Edge использует имя пользователя и пароль для проверки подлинности на сервере EST каждый раз, когда он должен получить сертификат. Этот метод не рекомендуется в рабочей среде, так как 1) он требует хранения секрета в виде обычного текста и 2) IoT Edge должен использовать сертификат удостоверения для проверки подлинности на сервере EST. Чтобы изменить рабочую среду, выполните приведенные действия.
- Рассмотрите возможность использования долговременных сертификатов начальной загрузки, которые можно хранить на устройстве во время производства , аналогично рекомендуемого подхода для DPS. Чтобы узнать, как настроить сертификат начальной загрузки для сервера EST, см. статью "Проверка подлинности устройства с помощью сертификатов, выданных динамически с помощью EST".
- Настройте
[cert_issuance.est.identity_auto_renew]
использование того же синтаксиса , что и конфигурация автоматического продления сертификата подготовки выше.
Таким образом служба сертификатов IoT Edge использует загрузочный сертификат для начальной проверки подлинности с сервером EST и запрашивает сертификат удостоверения для будущих запросов EST на тот же сервер. Если по какой-то причине срок действия сертификата удостоверения EST истекает до продления, IoT Edge возвращается к использованию сертификата начальной загрузки.
Выполните команду
sudo iotedge config apply
, чтобы применить новые параметры.Запустите
sudo iotedge check
, чтобы проверить конфигурацию устройства IoT Edge. Все проверки конфигурации должны успешно выполняться. В этом руководстве можно игнорировать ошибки и предупреждения рабочей готовности, предупреждения DNS-сервера и проверки подключения.Перейдите к устройству в Центр Интернета вещей. Отпечатки сертификатов были добавлены на устройство автоматически с помощью DPS и сервера EST.
Примечание.
При создании нового устройства IoT Edge отображается код
417 -- The device's deployment configuration is not set in the Azure portal.
состояния, который является нормальным, и означает, что устройство готово к развертыванию модуля.
Проверка продления сертификата
Вы можете немедленно повторно создать сертификаты удостоверения устройства, удалив существующие сертификаты и ключи с устройства, а затем применив конфигурацию IoT Edge. IoT Edge обнаруживает отсутствующие файлы и запрашивает новые сертификаты.
На устройстве IoT Edge остановите среду выполнения IoT Edge.
sudo iotedge system stop
Удалите существующие сертификаты и ключи.
sudo sh -c "rm /var/lib/aziot/certd/certs/*" sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
Примените конфигурацию IoT Edge для продления сертификатов.
sudo iotedge config apply
Для запуска среды выполнения может потребоваться несколько минут.
Перейдите к устройству в Центр Интернета вещей. Отпечатки сертификатов обновлены.
Вывод списка файлов сертификатов с помощью команды
sudo ls -l /var/lib/aziot/certd/certs
. Вы увидите последние даты создания файлов сертификатов устройства.Используйте команду, чтобы проверить новое содержимое
openssl
сертификата. Например:sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
Замените имя файла сертификата устройства (.cer) на файл сертификата устройства.
Вы должны заметить, что диапазон дат действия сертификата изменился.
Ниже приведены дополнительные способы проверки продления сертификата. В этих проверках показано, как IoT Edge обновляет сертификаты с сервера EST при истечении срока действия или отсутствии. После каждого теста можно проверить новые отпечатки в портал Azure и использовать openssl
команду для проверки нового сертификата.
- Попробуйте ждать истечения срока действия сертификата в день. Тестовый сервер EST настроен для создания сертификатов, срок действия которого истекает через один день. IoT Edge автоматически обновляет сертификат.
- Попробуйте настроить процент
threshold
для автоматического продленияconfig.toml
(в настоящее время задано значение 80 % в примере конфигурации). Например, задайте для него10%
значение и просмотрите продление сертификата каждые 2 часа. - Попробуйте настроить
threshold
целое число, за которым следуетm
(минуты). Например, задайте для него60m
значение и заметите его продление через 1 час до истечения срока действия.
Очистка ресурсов
Вы можете сохранить ресурсы и конфигурации, созданные в этом руководстве, и повторно использовать их. В противном случае вы можете удалить локальные конфигурации и ресурсы Azure, созданные в рамках этой статьи, чтобы избежать расходов.
Удаление ресурсов Azure
Удаление ресурсов и групп ресурсов Azure является необратимым. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали центр Интернета вещей в группе ресурсов, содержащей ресурсы, которые нужно сохранить, удалите только ресурс Центра Интернета вещей, не удаляя всю группу ресурсов.
Удаление ресурсов:
Войдите на портал Azure и щелкните Группы ресурсов.
Выберите группу ресурсов, содержащую тестовые ресурсы IoT Edge.
Просмотрите список ресурсов, содержащихся в группе ресурсов. Если вы хотите удалить их все, щелкните Удалить группу ресурсов. Если вы хотите удалить только некоторые из них, можно выбрать каждый ресурс, чтобы удалить их по отдельности.
Следующие шаги
- Сведения об использовании сервера EST для выдачи сертификатов ЦС Edge см . в примере конфигурации.
- Использование имени пользователя и пароля для загрузки проверки подлинности на сервере EST не рекомендуется для рабочей среды. Вместо этого рекомендуется использовать долгоживущие сертификаты начальной загрузки, которые можно хранить на устройстве во время производства, аналогично рекомендуемого подхода для DPS. Чтобы узнать, как настроить сертификат начальной загрузки для сервера EST, см. статью "Проверка подлинности устройства с помощью сертификатов, выданных динамически с помощью EST".
- Сервер EST можно использовать для выдачи сертификатов для всех устройств в иерархии. В зависимости от требований ISA-95 может потребоваться запустить цепочку серверов EST с одним на каждом уровне или использовать прокси-модуль API для пересылки запросов. Дополнительные сведения см . в блоге Кевина.
- Для решений корпоративного уровня рассмотрим: GlobalSign IoT Edge Enroll, DigiCert IoT диспетчер устройств и Keytos EZCA.
- Дополнительные сведения о сертификатах см. в статье о том, как Azure IoT Edge использует сертификаты.