Поделиться через


Руководство по настройке регистрации через безопасный транспортный сервер для Azure IoT Edge

Область применения: Флажок IoT Edge 1.5 IoT Edge 1.5 Флажок IoT Edge 1.4 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
  • Настройка устройства

Схема, на которой показан общий обзор трех шагов, необходимых для выполнения этого руководства.

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

Что такое регистрация через безопасный транспорт?

Регистрация по протоколу 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 в рабочей среде.

  1. Подключитесь к устройству, например с помощью SSH, где вы установили IoT Edge.

  2. Создайте файл с именем 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
    
  3. В каталоге, содержающем Dockerfileобраз, создайте образ из примера Dockerfile.

    sudo docker build . --tag est
    
  4. Запустите контейнер и предопустите порт 8085 для порта 8085 на узле.

    sudo docker run -d -p 8085:8085 est
    
  5. Теперь сервер EST запущен и может быть достигнут с помощью localhost порта 8085. Убедитесь, что он доступен, выполнив команду, чтобы просмотреть его сертификат сервера.

    openssl s_client -showcerts -connect localhost:8085
    
  6. Вы увидите -----BEGIN CERTIFICATE----- в середине выходных данных. Получение сертификата проверяет, доступен ли сервер и может представить его сертификат.

Совет

Чтобы запустить этот контейнер в облаке, создайте образ и отправьте образ в Реестр контейнеров Azure. Затем выполните краткое руководство по развертыванию в экземпляре контейнеров Azure.

Скачивание сертификата ЦС

Для каждого устройства требуется сертификат центра сертификации (ЦС), связанный с сертификатом удостоверения устройства.

  1. На устройстве 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
    
  2. Извлеките сертификат ЦС с сервера 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
    
  3. Сертификаты должны принадлежать пользователям службы ключей. Задайте для владельца значение 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

  1. Если у вас нет службы подготовки устройств, связанной с Центр Интернета вещей, см. краткое руководство. Настройка службы подготовки устройств Центр Интернета вещей с помощью портал Azure.

  2. cacert.crt.pem Передайте файл с устройства на компьютер с доступом к портал Azure, например компьютер разработки. Простой способ передачи сертификата — удаленно подключиться к устройству, отобразить сертификат с помощью команды cat /var/aziot/certs/cacert.crt.pem, скопировать все выходные данные и вставить содержимое в новый файл на компьютере разработки.

  3. На портале Azure перейдите к экземпляру Службы подготовки устройств к добавлению в Центр Интернета вещей.

  4. В разделе "Параметры" выберите "Сертификаты" и "Добавить".

    Снимок экрана: добавление сертификата ЦС в службу подготовки устройств с помощью портал Azure.

    Параметр Значение
    Имя сертификата Укажите понятное имя сертификата ЦС
    Pem-файл сертификата или .cer Перейдите cacert.crt.pem на сервер EST
    Задать для параметра "Состояние сертификата" значение "проверено при передаче" Установите флажок
  5. Выберите Сохранить.

Создание группы регистрации

  1. На портале Azure перейдите к экземпляру Службы подготовки устройств к добавлению в Центр Интернета вещей.

  2. В разделе Параметрывыберите Управление регистрациями.

  3. Нажмите кнопку "Добавить группу регистрации", а затем выполните следующие действия, чтобы настроить регистрацию.

  4. На вкладке "Регистрация и подготовка " выберите следующие параметры:

    Снимок экрана: добавление группы регистрации DPS с помощью портал Azure.

    Параметр Значение
    Механизм аттестации Выберите сертификаты X.509, отправленные в этот экземпляр службы подготовки устройств
    Первичный сертификат Выберите сертификат из раскрывающегося списка
    Имя группы Укажите понятное имя для регистрации этой группы
    Состояние подготовки Установите флажок "Включить эту регистрацию"
  5. На вкладке "Центры Интернета вещей" выберите Центр Интернета вещей из списка.

  6. На вкладке "Параметры устройства" установите флажок "Включить IoT Edge" на подготовленных устройствах .

    Другие параметры не относятся к учебнику. Вы можете принять настройки по умолчанию.

  7. Выберите Review + create (Просмотреть и создать).

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

Настройка устройства IoT Edge

На устройстве IoT Edge обновите файл конфигурации IoT Edge, чтобы использовать сертификаты устройств с сервера EST.

  1. Откройте файл конфигурации IoT Edge с помощью редактора. Например, используйте nano редактор для открытия /etc/aziot/config.toml файла.

    sudo nano /etc/aziot/config.toml
    
  2. Добавьте или замените следующие разделы в файле конфигурации. Эти параметры конфигурации изначально используют проверку подлинности имени пользователя и пароля для получения сертификата устройства с сервера 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. Чтобы изменить рабочую среду, выполните приведенные действия.

    1. Рассмотрите возможность использования долговременных сертификатов начальной загрузки, которые можно хранить на устройстве во время производства , аналогично рекомендуемого подхода для DPS. Чтобы узнать, как настроить сертификат начальной загрузки для сервера EST, см. статью "Проверка подлинности устройства с помощью сертификатов, выданных динамически с помощью EST".
    2. Настройте [cert_issuance.est.identity_auto_renew] использование того же синтаксиса , что и конфигурация автоматического продления сертификата подготовки выше.

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

  3. Выполните команду sudo iotedge config apply , чтобы применить новые параметры.

  4. Запустите sudo iotedge check , чтобы проверить конфигурацию устройства IoT Edge. Все проверки конфигурации должны успешно выполняться. В этом руководстве можно игнорировать ошибки и предупреждения рабочей готовности, предупреждения DNS-сервера и проверки подключения.

  5. Перейдите к устройству в Центр Интернета вещей. Отпечатки сертификатов были добавлены на устройство автоматически с помощью DPS и сервера EST.

    Снимок экрана: параметры устройства Центр Интернета вещей в портал Azure. Поля отпечатков сертификатов отображают значения.

    Примечание.

    При создании нового устройства IoT Edge отображается код 417 -- The device's deployment configuration is not set in the Azure portal. состояния, который является нормальным, и означает, что устройство готово к развертыванию модуля.

Проверка продления сертификата

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

  1. На устройстве IoT Edge остановите среду выполнения IoT Edge.

    sudo iotedge system stop
    
  2. Удалите существующие сертификаты и ключи.

    sudo sh -c "rm /var/lib/aziot/certd/certs/*"
    sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
    
  3. Примените конфигурацию IoT Edge для продления сертификатов.

    sudo iotedge config apply
    

    Для запуска среды выполнения может потребоваться несколько минут.

  4. Перейдите к устройству в Центр Интернета вещей. Отпечатки сертификатов обновлены.

    Снимок экрана: параметры устройства Центр Интернета вещей в портал Azure. Поля отпечатков сертификатов отображают новые значения.

  5. Вывод списка файлов сертификатов с помощью команды sudo ls -l /var/lib/aziot/certd/certs. Вы увидите последние даты создания файлов сертификатов устройства.

  6. Используйте команду, чтобы проверить новое содержимое openssl сертификата. Например:

    sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
    

    Замените имя файла сертификата устройства (.cer) на файл сертификата устройства.

    Вы должны заметить, что диапазон дат действия сертификата изменился.

Ниже приведены дополнительные способы проверки продления сертификата. В этих проверках показано, как IoT Edge обновляет сертификаты с сервера EST при истечении срока действия или отсутствии. После каждого теста можно проверить новые отпечатки в портал Azure и использовать openssl команду для проверки нового сертификата.

  1. Попробуйте ждать истечения срока действия сертификата в день. Тестовый сервер EST настроен для создания сертификатов, срок действия которого истекает через один день. IoT Edge автоматически обновляет сертификат.
  2. Попробуйте настроить процент threshold для автоматического продления config.toml (в настоящее время задано значение 80 % в примере конфигурации). Например, задайте для него 10% значение и просмотрите продление сертификата каждые 2 часа.
  3. Попробуйте настроить threshold целое число, за которым следует m (минуты). Например, задайте для него 60m значение и заметите его продление через 1 час до истечения срока действия.

Очистка ресурсов

Вы можете сохранить ресурсы и конфигурации, созданные в этом руководстве, и повторно использовать их. В противном случае вы можете удалить локальные конфигурации и ресурсы Azure, созданные в рамках этой статьи, чтобы избежать расходов.

Удаление ресурсов Azure

Удаление ресурсов и групп ресурсов Azure является необратимым. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали центр Интернета вещей в группе ресурсов, содержащей ресурсы, которые нужно сохранить, удалите только ресурс Центра Интернета вещей, не удаляя всю группу ресурсов.

Удаление ресурсов:

  1. Войдите на портал Azure и щелкните Группы ресурсов.

  2. Выберите группу ресурсов, содержащую тестовые ресурсы IoT Edge.

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

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