Бөлісу құралы:


Программное создание группы регистрации службы подготовки устройств для аттестации сертификатов X.509

В этой статье показано, как программно создать группу регистрации, использующую сертификаты промежуточного или корневого ЦС X.509. Группа регистрации создается с помощью пакета SDK службы DPS Центр Интернета вещей Azure и примера приложения. Группа регистрации управляет доступом к службе подготовки устройств, которые совместно используют стандартный сертификат для подписи в цепочке сертификатов. Дополнительные сведения см. в статье "Использование сертификатов X.509 с DPS". Дополнительные сведения об использовании инфраструктуры открытых ключей на основе сертификатов X.509 с Центром Интернета вещей и службой подготовки устройств см. в статье Device Authentication using X.509 CA Certificates (Проверка подлинности устройств с помощью сертификатов ЦС X.509).

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

  • Установите последнюю версию Git. Обязательно добавьте GIT в переменные среды, доступные в командном окне. Последнюю версию средств git для установки, которая включает Git Bash (приложение командной строки для взаимодействия с локальным репозиторием GIT), можно найти на этой странице.

Примечание.

Хотя действия, описанные в этой статье, применяются к работе на компьютерах под управлением Windows и Linux, в этой статье используется компьютер разработки Windows.

Создание тестовых сертификатов

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

В этой статье требуется файл сертификата корневого ЦС, промежуточный файл сертификата ЦС или как в pem, так и в формате .cer. Один файл содержит общедоступную часть корневого сертификата ЦС X.509, а другой — общедоступную часть промежуточного сертификата ЦС X.509.

Если у вас уже есть корневой ЦС-файл и (или) промежуточный ЦС, можно продолжить добавление и проверку корневого или промежуточного сертификата ЦС.

Если у вас нет корневого ЦС-файла и (или) промежуточного ЦС-файла, выполните действия, описанные в разделе "Создание цепочки сертификатов X.509" для их создания. Вы можете остановиться после выполнения действий, описанных в разделе "Создание промежуточного сертификата ЦС", так как для выполнения действий, описанных в этой статье, сертификаты устройств не требуются. После завершения у вас есть два файла сертификата X.509: ./certs/azure-iot-test-only.root.ca.cert.pem и ./certs/azure-iot-test-only.intermediate.cert.pem.

Добавление и проверка корневого или промежуточного сертификата ЦС

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

В этой статье предполагается, что у вас есть сертификат корневого ЦС и промежуточный сертификат ЦС, подписанный корневым ЦС:

  • Если вы планируете создать группу регистрации с корневым сертификатом ЦС, необходимо отправить и проверить сертификат корневого ЦС.

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

Чтобы добавить и проверить корневой или промежуточный сертификат ЦС в службу подготовки устройств:

  1. Войдите на портал Azure.

  2. В меню слева на портале нажмите Все ресурсы.

  3. Выберите службу Подготовки устройств.

  4. В меню "Параметры" выберите "Сертификаты".

  5. В меню сверху выберите + Добавить:.

  6. Введите имя корневого или промежуточного сертификата ЦС и отправьте pem или файл .cer .

  7. Выберите Задать для параметра "Состояние сертификата" значение "проверено при передаче".

    Снимок экрана: добавление корневого сертификата ЦС в экземпляр DPS.

  8. Выберите Сохранить.

Получение строки подключения к службе подготовки

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

  1. Войдите на портал Azure.

  2. В меню слева на портале нажмите Все ресурсы.

  3. Выберите службу Подготовки устройств.

  4. В меню Параметры выберите Политики общего доступа.

  5. Выберите политику доступа, которую вы хотите использовать.

  6. На панели Политика доступа скопируйте и сохраните строку подключения первичного ключа.

    Снимок экрана: расположение службы подготовки строка подключения на портале.

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

В этом разделе показано, как создать консольное приложение .NET Core, которое добавляет группу регистрации в службу подготовки.

  1. Откройте командную строку Windows и перейдите в папку, в которой вы хотите создать приложение.

  2. Чтобы создать консольный проект, выполните следующую команду:

    dotnet new console --framework net6.0 --use-program-main 
    
  3. Чтобы добавить ссылку на пакет SDK службы DPS, выполните следующую команду:

    dotnet add package Microsoft.Azure.Devices.Provisioning.Service 
    

    На этом шаге скачиваются, устанавливаются и добавляются ссылки на пакет NuGet клиента службы Azure IoT DPS и его зависимости. Этот пакет включает двоичные файлы для пакета SDK службы .NET.

  4. Откройте файл Program.cs в редакторе.

  5. Замените инструкцию пространства имен в верхней части файла следующей строкой:

    namespace CreateEnrollmentGroup;
    
  6. Добавьте следующие using инструкции в верхней части файла над инструкцией namespace :

    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  7. Добавьте следующие поля в Program класс и внесите указанные изменения.

    private static string ProvisioningConnectionString = "{ProvisioningServiceConnectionString}";
    private static string EnrollmentGroupId = "enrollmentgrouptest";
    private static string X509RootCertPath = @"{Path to a .cer or .pem file for a verified root CA or intermediate CA X.509 certificate}";
    
    • Замените значение заполнителя ProvisioningServiceConnectionString строкой подключения службы подготовки, скопированной в предыдущем разделе.

    • Замените значение заполнителя X509RootCertPath на путь к PEM- или CER-файлу. Этот файл представляет общедоступную часть корневого сертификата ЦС X.509, который ранее был отправлен и проверен с помощью службы подготовки, или промежуточный сертификат, который был отправлен и проверен или был сертификат в своей цепочке подписей отправлен и проверен.

    • При желании вы можете изменить значение EnrollmentGroupId. Строка может содержать только символы в нижнем регистре и дефисы.

    Внимание

    В рабочем коде следует учитывать следующие рекомендации по безопасности:

    • Жесткое программирование строки подключения для администратора службы подготовки противоречит рекомендациям по обеспечению безопасности. Вместо этого строки подключения должны храниться без угрозы безопасности, например в безопасном файле конфигурации или в реестре.
    • Обязательно отправьте только открытую часть сертификата подписи. Никогда не отправляйте в службу подготовки PFX- (PKCS12) или PEM-файлы, содержащие закрытые ключи.
  8. Добавьте приведенный ниже метод в класс Program. Этот код создает EnrollmentGroup запись, а затем вызывает ProvisioningServiceClient.CreateOrUpdateEnrollmentGroupAsync метод для добавления группы регистрации в службу подготовки.

    public static async Task RunSample()
    {
        Console.WriteLine("Starting sample...");
    
        using (ProvisioningServiceClient provisioningServiceClient =
                ProvisioningServiceClient.CreateFromConnectionString(ProvisioningConnectionString))
        {
            #region Create a new enrollmentGroup config
            Console.WriteLine("\nCreating a new enrollmentGroup...");
            var certificate = new X509Certificate2(X509RootCertPath);
            Attestation attestation = X509Attestation.CreateFromRootCertificates(certificate);
            EnrollmentGroup enrollmentGroup =
                    new EnrollmentGroup(
                            EnrollmentGroupId,
                            attestation)
                    {
                        ProvisioningStatus = ProvisioningStatus.Enabled
                    };
            Console.WriteLine(enrollmentGroup);
            #endregion
    
            #region Create the enrollmentGroup
            Console.WriteLine("\nAdding new enrollmentGroup...");
            EnrollmentGroup enrollmentGroupResult =
                await provisioningServiceClient.CreateOrUpdateEnrollmentGroupAsync(enrollmentGroup).ConfigureAwait(false);
            Console.WriteLine("\nEnrollmentGroup created with success.");
            Console.WriteLine(enrollmentGroupResult);
            #endregion
    
        }
    }
    
  9. Осталось заменить метод Main следующими строками:

    static async Task Main(string[] args)
    {
        await RunSample();
        Console.WriteLine("\nHit <Enter> to exit ...");
        Console.ReadLine();
    }
    
  10. Сохранение изменений.

В этом разделе показано, как создать скрипт Node.js, который добавляет группу регистрации в службу подготовки.

  1. В окне командной строки перейдите в рабочую папку и выполните следующую команду:

    npm install azure-iot-provisioning-service
    

    На этом шаге скачиваются, устанавливаются и добавляются ссылки на клиентский пакет службы Azure IoT DPS и его зависимости. Этот пакет включает двоичные файлы для пакета SDK службы Node.js.

  2. С помощью текстового редактора создайте а рабочей папке файл create_enrollment_group.js. Добавьте в этот файл следующий код и сохраните файл:

        'use strict';
        var fs = require('fs');
    
        var provisioningServiceClient = require('azure-iot-provisioning-service').ProvisioningServiceClient;
    
        var serviceClient = provisioningServiceClient.fromConnectionString(process.argv[2]);
    
        var enrollment = {
          enrollmentGroupId: 'first',
          attestation: {
            type: 'x509',
            x509: {
              signingCertificates: {
                primary: {
                  certificate: fs.readFileSync(process.argv[3], 'utf-8').toString()
                }
              }
            }
          },
          provisioningStatus: 'disabled'
        };
    
        serviceClient.createOrUpdateEnrollmentGroup(enrollment, function(err, enrollmentResponse) {
          if (err) {
            console.log('error creating the group enrollment: ' + err);
          } else {
            console.log("enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2));
            enrollmentResponse.provisioningStatus = 'enabled';
            serviceClient.createOrUpdateEnrollmentGroup(enrollmentResponse, function(err, enrollmentResponse) {
              if (err) {
                console.log('error updating the group enrollment: ' + err);
              } else {
                console.log("updated enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2));
              }
            });
          }
        });
    

  1. Откройте командную строку Windows.

  2. Клонируйте из репозитория GitHub пример кода для регистрации устройства, используя пакет SDK для службы Java:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. В расположении, где вы скачали репозиторий, перейдите в папку примера:

    cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample 
    
  4. Откройте файл /src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentGroupSample.java в любом удобном текстовом редакторе.

  5. Замените [Provisioning Connection String] строкой подключения, скопированной в разделе Получение строки подключения для службы подготовки.

  6. Замените константную PUBLIC_KEY_CERTIFICATE_STRING строку значением корневого или промежуточного файла сертификата .pem ЦС. Этот файл представляет общедоступную часть корневого сертификата ЦС X.509, который ранее был отправлен и проверен с помощью службы подготовки, или промежуточный сертификат, который был отправлен и проверен или был сертификат в своей цепочке подписей отправлен и проверен.

    Синтаксис текста сертификата должен соответствовать приведенному ниже шаблону без дополнительных пробелов или символов.

    private static final String PUBLIC_KEY_CERTIFICATE_STRING = 
            "-----BEGIN CERTIFICATE-----\n" +
            "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" +
                ...
            "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" +
            "-----END CERTIFICATE-----";
    

    Обновление этого строкового значения вручную может быть подвержено ошибке. Чтобы создать правильный синтаксис, можно скопировать и вставить следующую команду в строку Git Bash , заменить your-cert.pem расположение файла сертификата и нажать клавишу ВВОД. Эта команда создает синтаксис для значения строковой PUBLIC_KEY_CERTIFICATE_STRING константы и записывает его в выходные данные.

    sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' your-cert.pem
    

    Скопируйте и вставьте текст выходного сертификата для значения константы.

    Внимание

    В рабочем коде следует учитывать следующие рекомендации по безопасности:

    • Жесткое программирование строки подключения для администратора службы подготовки противоречит рекомендациям по обеспечению безопасности. Вместо этого строки подключения должны храниться без угрозы безопасности, например в безопасном файле конфигурации или в реестре.
    • Обязательно отправьте только открытую часть сертификата подписи. Никогда не отправляйте в службу подготовки PFX- (PKCS12) или PEM-файлы, содержащие закрытые ключи.
  7. Пример позволяет настроить центр Интернета вещей в группе регистрации для подготовки устройства. Это должен быть центр Интернета вещей, который ранее был связан со службой подготовки. В этой статье мы позволим DPS выбрать из связанных центров в соответствии с политикой распределения по умолчанию равномерное распределение. Закомментируйте следующую инструкцию в файле:

    enrollmentGroup.setIotHubHostName(IOTHUB_HOST_NAME);                // Optional parameter.
    
  8. Пример кода создает, обновляет, запрашивает и удаляет группу регистрации для устройств X.509. Чтобы проверить успешное создание группы регистрации в портал Azure, закомментируйте следующие строки кода в конце файла:

    // ************************************** Delete info of enrollmentGroup ***************************************
    System.out.println("\nDelete the enrollmentGroup...");
    provisioningServiceClient.deleteEnrollmentGroup(enrollmentGroupId);
    
  9. Сохраните файл ServiceEnrollmentGroupSample.java .

Запуск примера группы регистрации

  1. Запустите пример:

    dotnet run
    
  2. После создания в окне командной строки отобразятся свойства новой группы регистрации.

  1. Выполните следующую команду в командной строке. Включите кавычки вокруг аргументов команд и замените <connection string> строка подключения, скопированные в предыдущем разделе, и <certificate .pem file> путь к файлу сертификата.pem. Этот файл представляет общедоступную часть корневого сертификата ЦС X.509, который ранее был отправлен и проверен с помощью службы подготовки, или промежуточный сертификат, который был отправлен и проверен или был сертификат в своей цепочке подписей отправлен и проверен.

    node create_enrollment_group.js "<connection string>" "<certificate .pem file>"
    
  2. После создания в окне командной строки отобразятся свойства новой группы регистрации.

  1. В папке azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample в командной строке выполните следующую команду, чтобы создать пример:

    mvn install -DskipTests
    

    Эта команда загружает пакет клиента службы Azure IoT DPS Maven на компьютер и создает пример. Этот пакет включает двоичные файлы для пакета SDK службы Java.

  2. Перейдите в целевую папку и запустите пример. Сборка на предыдущем шаге выводит .jar файл в целевой папке со следующим форматом файла: например: provisioning-x509-sample-{version}-with-deps.jarprovisioning-x509-sample-1.8.1-with-deps.jar Возможно, потребуется заменить версию в приведенной ниже команде.

    cd target
    java -jar ./service-enrollment-group-sample-1.8.1-with-deps.jar
    
  3. После создания в окне командной строки отобразятся свойства новой группы регистрации.

Чтобы убедиться, что группа регистрации успешно создана:

  1. В портал Azure перейдите к экземпляру службы подготовки устройств.

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

  3. Перейдите на вкладку "Группы регистрации". Вы увидите новую запись регистрации, соответствующую идентификатору группы регистрации, используемому в примере.

Снимок экрана: только что созданная группа регистрации на портале.

Снимок экрана: только что созданная группа регистрации на портале.

Снимок экрана: только что созданная группа регистрации на портале.

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

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

  1. Закройте окно выходных данных примера, если оно открыто на компьютере.

  2. На портале Azure в меню слева выберите элемент Все ресурсы.

  3. Выберите службу Подготовки устройств.

  4. В меню слева в разделе "Параметры" выберите "Управление регистрацией".

  5. Перейдите на вкладку "Группы регистрации".

  6. Установите флажок рядом с именем группы регистрации, созданной в этой статье.

  7. В верхней части страницы выберите команду Удалить.

  8. В службе подготовки устройств в портал Azure выберите "Сертификаты" в разделе "Параметры" в меню слева.

  9. Выберите сертификат, отправленный для этой статьи.

  10. В верхней части сведений о сертификате нажмите кнопку "Удалить".

Инструменты для сертификатов

Пакет SDK для Azure IoT C содержит сценарии, которые помогут вам создавать сертификаты и управлять ими. Дополнительные сведения см. в разделе "Управление тестовыми сертификатами ЦС" для примеров и учебников.

Пакет SDK для Интернета вещей Azure Node.js содержит сценарии, которые помогут вам создавать сертификаты и управлять ими. Дополнительные сведения см. в статье "Инструменты для пакета SDK для устройств подготовки устройств Интернета вещей Azure" для Node.js.

Вы также можете использовать средства, доступные в пакете SDK Для Интернета вещей Azure. Дополнительные сведения см. в разделе "Управление тестовыми сертификатами ЦС" для примеров и учебников.

Пакет SDK java для Azure IoT содержит средства тестирования, которые помогут вам создавать сертификаты и управлять ими. Дополнительные сведения см. в разделе генератора сертификатов X509 с помощью эмулятора DICE.

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

В этой статье вы создали группу регистрации для промежуточного или корневого сертификата ЦС X.509 с помощью службы подготовки устройств Центр Интернета вещей Azure. Чтобы узнать больше, ознакомьтесь со следующими ссылками: