Программное создание группы регистрации службы подготовки устройств для аттестации сертификатов X.509
В этой статье показано, как программно создать группу регистрации в Центр Интернета вещей Azure службе подготовки устройств (DPS), которая использует промежуточные или корневые сертификаты ЦС X.509. Группа регистрации создается с помощью пакета SDK службы Интернета вещей Azure и примера приложения. Группа регистрации управляет доступом к службе подготовки устройств, которые совместно используют стандартный сертификат для подписи в цепочке сертификатов. Дополнительные сведения см. в статье "Использование сертификатов X.509 с DPS". Дополнительные сведения об использовании инфраструктуры открытых ключей на основе сертификатов X.509 с Центром Интернета вещей и службой подготовки устройств см. в статье Device Authentication using X.509 CA Certificates (Проверка подлинности устройств с помощью сертификатов ЦС X.509).
Необходимые компоненты
Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Выполните инструкции по настройке Службы подготовки устройств к добавлению в Центр Интернета вещей на портале Microsoft Azure.
Установите пакет SDK для .NET 6.0 или более поздней версии или более поздней версии на компьютере под управлением Windows. Вы можете проверить установленную версию с помощью приведенной ниже команды.
dotnet --info
- Установите на компьютер Node.js 4.0 или более поздней версии.
Пакет SDK для Java SE 8. В этой статье используется пакет SDK Для Интернета вещей Azure для Java, который работает как в Windows, так и в Linux. В этой статье используется Windows.
- Установите последнюю версию 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 мог проверить цепочку сертификатов, корневой или промежуточный сертификат, настроенный в группе регистрации, должен быть проверенным сертификатом или должен свернуться с проверенным сертификатом в цепочке сертификатов, который устройство представляет при проверке подлинности со службой.
В этой статье предполагается, что у вас есть сертификат корневого ЦС и промежуточный сертификат ЦС, подписанный корневым ЦС:
Если вы планируете создать группу регистрации с корневым сертификатом ЦС, необходимо отправить и проверить сертификат корневого ЦС.
Если вы планируете создать группу регистрации с промежуточным сертификатом ЦС, можно отправить и проверить сертификат корневого ЦС или промежуточный сертификат ЦС. (При наличии нескольких промежуточных сертификатов ЦС в цепочке сертификатов можно также отправить и проверить любой промежуточный сертификат, который находится между корневым сертификатом ЦС и промежуточным сертификатом, с которым вы создали группу регистрации.)
Чтобы добавить и проверить корневой или промежуточный сертификат ЦС в службу подготовки устройств:
Войдите на портал Azure.
В меню слева на портале нажмите Все ресурсы.
Выберите службу Подготовки устройств.
В меню "Параметры" выберите "Сертификаты".
В меню сверху выберите + Добавить:.
Введите имя корневого или промежуточного сертификата ЦС и отправьте pem или файл .cer .
Выберите Задать для параметра "Состояние сертификата" значение "проверено при передаче".
Выберите Сохранить.
Получение строки подключения к службе подготовки
Для примера в этой статье требуется строка подключения для службы подготовки. Чтобы получить его, выполните следующие действия.
Войдите на портал Azure.
В меню слева на портале нажмите Все ресурсы.
Выберите службу Подготовки устройств.
В меню Параметры выберите Политики общего доступа.
Выберите политику доступа, которую вы хотите использовать.
На панели Политика доступа скопируйте и сохраните строку подключения первичного ключа.
Создание примера группы регистрации
В этом разделе показано, как создать консольное приложение .NET Core, которое добавляет группу регистрации в службу подготовки.
Откройте командную строку Windows и перейдите в папку, в которой вы хотите создать приложение.
Чтобы создать консольный проект, выполните следующую команду:
dotnet new console --framework net6.0 --use-program-main
Чтобы добавить ссылку на пакет SDK службы DPS, выполните следующую команду:
dotnet add package Microsoft.Azure.Devices.Provisioning.Service
На этом шаге скачиваются, устанавливаются и добавляются ссылки на пакет NuGet клиента службы Azure IoT DPS и его зависимости. Этот пакет включает двоичные файлы для пакета SDK службы .NET.
Откройте файл Program.cs в редакторе.
Замените инструкцию пространства имен в верхней части файла следующей строкой:
namespace CreateEnrollmentGroup;
Добавьте следующие
using
инструкции в верхней части файла над инструкциейnamespace
:using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; using Microsoft.Azure.Devices.Provisioning.Service;
Добавьте следующие поля в
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-файлы, содержащие закрытые ключи.
Добавьте приведенный ниже метод в класс
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 } }
Осталось заменить метод
Main
следующими строками:static async Task Main(string[] args) { await RunSample(); Console.WriteLine("\nHit <Enter> to exit ..."); Console.ReadLine(); }
Сохранение изменений.
В этом разделе показано, как создать скрипт Node.js, который добавляет группу регистрации в службу подготовки.
Совет
Для простоты в этом примере используется проверка подлинности SAS для подключения к API службы DPS. Более безопасный подход — использовать учетные данные токена Azure. Пример этого метода проверки подлинности см . в примере create_tpm_enrollment_with_token_credentials.js в пакете SDK Node.js.
В окне командной строки перейдите в рабочую папку и выполните следующую команду:
npm install azure-iot-provisioning-service
На этом шаге скачиваются, устанавливаются и добавляются ссылки на клиентский пакет службы Azure IoT DPS и его зависимости. Этот пакет включает двоичные файлы для пакета SDK службы Node.js.
С помощью текстового редактора создайте а рабочей папке файл 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)); } }); } });
Откройте командную строку Windows.
Клонируйте из репозитория GitHub пример кода для регистрации устройства, используя пакет SDK для службы Java:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
В расположении, где вы скачали репозиторий, перейдите в папку примера:
cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample
Откройте файл /src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentGroupSample.java в любом удобном текстовом редакторе.
Замените
[Provisioning Connection String]
строкой подключения, скопированной в разделе Получение строки подключения для службы подготовки.Замените константную
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-файлы, содержащие закрытые ключи.
Пример позволяет настроить центр Интернета вещей в группе регистрации для подготовки устройства. Это должен быть центр Интернета вещей, который ранее был связан со службой подготовки. В этой статье мы позволим DPS выбрать из связанных центров в соответствии с политикой распределения по умолчанию равномерное распределение. Закомментируйте следующую инструкцию в файле:
enrollmentGroup.setIotHubHostName(IOTHUB_HOST_NAME); // Optional parameter.
Пример кода создает, обновляет, запрашивает и удаляет группу регистрации для устройств X.509. Чтобы проверить успешное создание группы регистрации в портал Azure, закомментируйте следующие строки кода в конце файла:
// ************************************** Delete info of enrollmentGroup *************************************** System.out.println("\nDelete the enrollmentGroup..."); provisioningServiceClient.deleteEnrollmentGroup(enrollmentGroupId);
Сохраните файл ServiceEnrollmentGroupSample.java .
Запуск примера группы регистрации
Запустите пример:
dotnet run
После создания в окне командной строки отобразятся свойства новой группы регистрации.
Выполните следующую команду в командной строке. Включите кавычки вокруг аргументов команд и замените
<connection string>
строка подключения, скопированные в предыдущем разделе, и<certificate .pem file>
путь к файлу сертификата.pem
. Этот файл представляет общедоступную часть корневого сертификата ЦС X.509, который ранее был отправлен и проверен службой подготовки, или промежуточным сертификатом, который был отправлен и проверен или был сертификат в своей цепочке подписей отправлен и проверен.node create_enrollment_group.js "<connection string>" "<certificate .pem file>"
После создания в окне командной строки отобразятся свойства новой группы регистрации.
В папке azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample в командной строке выполните следующую команду, чтобы создать пример:
mvn install -DskipTests
Эта команда загружает пакет клиента службы Azure IoT DPS Maven на компьютер и создает пример. Этот пакет включает двоичные файлы для пакета SDK службы Java.
Перейдите в целевую папку и запустите пример. Сборка на предыдущем шаге выводит .jar файл в целевой папке со следующим форматом файла: например:
provisioning-x509-sample-{version}-with-deps.jar
provisioning-x509-sample-1.8.1-with-deps.jar
Может потребоваться заменить версию в следующей команде.cd target java -jar ./service-enrollment-group-sample-1.8.1-with-deps.jar
После создания в окне командной строки отобразятся свойства новой группы регистрации.
Чтобы убедиться, что группа регистрации создана:
В портал Azure перейдите к экземпляру службы подготовки устройств.
В меню Параметры выберите Управление регистрациями.
Перейдите на вкладку "Группы регистрации". Вы увидите новую запись регистрации, соответствующую идентификатору группы регистрации, используемому в примере.
Очистка ресурсов
Если вы планируете изучить учебники по службе подготовки устройств Центр Интернета вещей Azure, не убирайте ресурсы, созданные в этой статье. В противном случае выполните следующие действия, чтобы удалить все ресурсы, созданные этой статьей.
Закройте окно выходных данных примера, если оно открыто на компьютере.
На портале Azure в меню слева выберите элемент Все ресурсы.
Выберите службу Подготовки устройств.
В меню слева в разделе "Параметры" выберите "Управление регистрацией".
Перейдите на вкладку "Группы регистрации".
Установите флажок рядом с именем группы регистрации, созданной в этой статье.
В верхней части страницы выберите команду Удалить.
В службе подготовки устройств в портал Azure выберите "Сертификаты" в разделе "Параметры" в меню слева.
Выберите сертификат, отправленный для этой статьи.
В верхней части сведений о сертификате нажмите кнопку "Удалить".
Инструменты для сертификатов
Пакет SDK для Azure IoT C содержит сценарии, которые помогут вам создавать сертификаты и управлять ими. Дополнительные сведения см. в разделе "Управление тестовыми сертификатами ЦС" для примеров и учебников.
Пакет SDK для Интернета вещей Azure Node.js содержит сценарии, которые помогут вам создавать сертификаты и управлять ими. Дополнительные сведения см. в статье "Инструменты для пакета SDK для устройств подготовки устройств Интернета вещей Azure" для Node.js.
Вы также можете использовать средства, доступные в пакете SDK Для Интернета вещей Azure. Дополнительные сведения см. в разделе "Управление тестовыми сертификатами ЦС" для примеров и учебников.
Пакет SDK java для Azure IoT содержит средства тестирования, которые помогут вам создавать сертификаты и управлять ими. Дополнительные сведения см. в разделе генератора сертификатов X509 с помощью эмулятора DICE.
Следующие шаги
В этой статье вы создали группу регистрации для промежуточного или корневого сертификата ЦС X.509 с помощью службы подготовки устройств Центр Интернета вещей Azure. Чтобы узнать больше, ознакомьтесь со следующими ссылками:
Дополнительные сведения о аттестации сертификатов X.509 с помощью DPS см. в разделе аттестации сертификатов X.509.
Полный пример подготовки устройств с помощью группы регистрации с помощью сертификатов X.509 см. в руководстве по подготовке нескольких устройств X.509 с помощью руководства по группам регистрации.
Сведения об управлении отдельными группами регистрации и регистрацией с помощью портал Azure см. в статье "Управление регистрацией устройств с помощью портал Azure".