Сертификаты X.509

Сертификаты X.509 — это цифровые документы, представляющие пользователя, компьютер, сервис или устройство. Сертификаты X.509 выдают сертификационный орган (CA), подчинённый CA или регистрационный орган. Сертификаты содержат открытый ключ предмета сертификата. В них нет приватного ключа субъекта, который должен храниться в безопасности. RFC 5280 документирует сертификаты открытых ключей, включая их поля и расширения. Сертификаты с открытым ключом имеют цифровую подпись и обычно содержат следующую информацию:

  • Информация о предмете сертификата
  • Публичный ключ, соответствующий приватному ключу субъекта
  • Информация о выдающем CA
  • Поддерживаемые алгоритмы шифрования и/или цифровой подписи
  • Информация для определения статуса отзыва и действительности сертификата

Поля сертификата

Существует три инкрементальные версии стандарта сертификата X.509, и каждая последняя версия добавляла поля сертификата в стандарт:

  • Версия 1 (v1), опубликованная в 1988 году, следует первоначальному стандарту X.509 для сертификатов.
  • Версия 2 (v2), опубликованная в 1993 году, добавляет два поля к полям, включённым в Версию 1.
  • Версия 3 (v3), опубликованная в 2008 году, представляет собой текущую версию стандарта X.509. В этой версии добавлена поддержка расширений сертификатов.

Этот раздел предназначен как общий справочник для полей сертификатов и расширений сертификатов, доступных в сертификатах X.509. Для получения дополнительной информации о полях сертификатов и расширениях сертификатов, включая типы данных, ограничения и другие детали, см. спецификацию RFC 5280 .

Поля версии 1

В следующей таблице описаны поля сертификатов версии 1 для сертификатов X.509. Все поля, включённые в эту таблицу, доступны в последующих версиях сертификатов X.509.

Name Description
Version Целое число, указывающее номер версии сертификата.
Серийный номер Целое число, представляющее уникальный номер для каждого сертификата, выданного центром сертификации (CA).
Подпись Идентификатор криптографического алгоритма, используемого CA для подписания сертификата. Значение включает как идентификатор алгоритма, так и любые дополнительные параметры, используемые этим алгоритмом, если применимы.
Эмитент Отличительное имя (DN) выдачителя сертификата CA.
Срок действия Инклюзивный период, на который сертификат действителен.
Тема Отличительное имя (DN) субъекта сертификата.
Информация о публичном ключе предмета Публичный ключ, принадлежащий субъекту сертификата.

Поля версии 2

В следующей таблице описаны поля, добавленные для версии 2, содержащие информацию об эмитенте сертификата. Однако эти области используются редко. Все поля, включённые в эту таблицу, доступны в последующих версиях сертификатов X.509.

Name Description
Уникальный идентификатор эмитента Уникальный идентификатор, представляющий эмитирующее CA, определённое выдающим CA.
Уникальный идентификатор субъекта Уникальный идентификатор, представляющий предмет сертификата, определённый выдающим CA.

Поля версии 3

В следующей таблице описывается поле, добавленное для версии 3, представляющее собой набор расширений сертификатов X.509.

Name Description
Расширения Коллекция стандартных и специализированных для Интернета расширений сертификатов. Для получения дополнительной информации о расширениях сертификатов, доступных для сертификатов X.509 v3, см. раздел Расширения сертификатов.

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

Расширения сертификатов, введённые с версией 3, предоставляют методы для связи большего количества атрибутов с пользователями или публичными ключами, а также для управления отношениями между центрами сертификации. Для получения дополнительной информации о расширениях сертификатов см. раздел «Расширения сертификатов » спецификации RFC 5280 .

Стандартные расширения

Стандарт X.509 определяет расширения, включённые в этот раздел, для использования в инфраструктуре открытых ключей Интернета (PKI).

Name Description
Идентификатор ключа центра Идентификатор, представляющий либо предмет сертификата и серийный номер сертификата CA, выдавшего этот сертификат, либо хэш публичного ключа выдающего CA.
Идентификатор ключа субъекта Хэш публичного ключа текущего сертификата.
Использование ключей Растровое значение, определяющее сервисы, для которых может использоваться сертификат.
Период использования приватного ключа Срок действия части приватного ключа пары ключей.
Правила сертификации Коллекция информации о политике, используемая для проверки предмета сертификата.
Политические планы Коллекция сопоставлений политик, каждое из которых сопоставляет политику одной организации с политикой другой.
Альтернативное имя субъекта Сборник альтернативных названий для этой темы.
Альтернативное название эмитента Коллекция альтернативных названий для выдающего CA.
Атрибуты каталога предметов Коллекция атрибутов из каталога X.500 или LDAP.
Основные ограничения Набор ограничений, позволяющих сертификату определять, выдается ли он CA, пользователю, компьютеру, устройству или сервису. Это расширение также включает ограничение на длину пути, ограничивающее количество подчинённых CA, которые могут существовать.
Ограничения по названию Набор ограничений, определяющих, какие пространства имён разрешены в сертификате, выданном CA.
Политические ограничения Набор ограничений, которые можно использовать для запрета сопоставления политик между CA.
Расширенное использование клавиш Набор значений цели ключа, указывающих на то, как можно использовать публичный ключ сертификата, выходя за рамки целей, указанных в расширении Key Use .
Точки распределения CRL Коллекция URL, в которых публикуется базовый список отзыва сертификатов (CRL).
Запрещайте любую политику Ограничивает использование всех полисов выпуска OID (2.5.29.32.0) в подчинённых сертификатах CA
Самый свежий CRL Это расширение, также известное как Delta CRL Distribution Point, содержит один или несколько URL, где публикуется дельта-CRL выдающего CA.

Частные интернет-расширения

Расширения, включённые в этот раздел, схожи со стандартными и могут использоваться для направления заявок на онлайн-информацию о выдающем CA или предмете сертификата.

Name Description
Доступ к информации органов Коллекция записей, описывающих формат и местоположение дополнительной информации, предоставленной эмитентом CA.
Доступ к информации по предмету Коллекция записей, описывающих формат и местоположение дополнительной информации, предоставленной субъектом сертификата.

Форматы сертификатов

Сертификаты могут сохраняться в различных форматах. Центр Интернета вещей Azure аутентификация обычно использует форматы Privacy-Enhanced Mail (PEM) и Personal Information Exchange (PFX). В следующей таблице описаны широко используемые файлы и форматы, используемые для представления сертификатов.

Формат Description
Бинарный сертификат Суровый бинарный сертификат с использованием кодировки Distinguished Encoding Rules (DER) ASN.1.
Формат ASCII PEM Файл сертификата PEM (.pem) содержит сертификат, закодированный в Base64, начинающийся и -----BEGIN CERTIFICATE----- заканчивающийся на -----END CERTIFICATE-----. Один из самых распространённых форматов для сертификатов X.509, формат PEM требуется Центр Интернета вещей при загрузке определённых сертификатов, таких как сертификаты устройств.
ASCII PEM-ключ Содержит DER-ключ, закодированный в Base64, с дополнительными метаданными об алгоритме защиты паролем.
Сертификат PKCS #7 Формат, предназначенный для передачи подписанных или зашифрованных данных. Он может включать всю цепочку сертификатов. RFC 2315 определяет этот формат.
Ключ PKCS #8 Формат для приватного хранилища ключей. RFC 5208 определяет этот формат.
Ключ и сертификат PKCS #12 Сложный формат, который может хранить и защищать ключ и всю цепочку сертификатов. Обычно его используют с расширением .p12 или .pfx. PKCS #12 ассоциируется с форматом PFX. RFC 7292 определяет этот формат.

Самоподписанные сертификаты

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

Important

Мы рекомендуем использовать сертификаты, подписанные выдавающим центром сертификации (CA), даже для целей тестирования. Никогда не используйте самоподписанные сертификаты в производстве.

Создание самозаверяющего сертификата

С помощью OpenSSL можно создать самозаверяющий сертификат. Следующие шаги показывают, как выполнить команды OpenSSL в bash-shell для создания самоподписанного сертификата и получения отпечатка сертификата, который можно использовать для аутентификации устройства в Центр Интернета вещей.

Note

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

  1. Выполните следующую команду для генерации приватного ключа и создания файла приватного ключа (.key, закодированного PEM), заменив следующие заполнятели соответствующими значениями. Приватный ключ, генерируемый следующей командой, использует алгоритм RSA с 2048-битным шифрованием.

    {KeyFile}. Название твоего файла с приватным ключом.

    openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
  2. Выполните следующую команду, чтобы сгенерировать запрос на подписание сертификата PKCS #10 (CSR) и создать файл CSR (.csr), заменив следующие заполнятели соответствующими значениями. Обязательно указывайте идентификатор устройства IoT-устройства для вашего самоподписанного сертификата при запросе.

    {KeyFile}. Название твоего файла с приватным ключом.

    {CsrFile}. Название вашего CSR-файла.

    {DeviceID}. Название вашего IoT-устройства.

    openssl req -new -key {KeyFile} -out {CsrFile}
    
    Country Name (2 letter code) [XX]:.
    State or Province Name (full name) []:.
    Locality Name (eg, city) [Default City]:.
    Organization Name (eg, company) [Default Company Ltd]:.
    Organizational Unit Name (eg, section) []:.
    Common Name (eg, your name or your server hostname) []:{DeviceID}
    Email Address []:.
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:.
    An optional company name []:.
    
  3. Выполните следующую команду, чтобы проверить и подтвердить вашу CSR, заменив следующие заполнятели соответствующими значениями.

    {CsrFile}. Название вашего файла с сертификатом.

    openssl req -text -in {CsrFile} -verify -noout
    
  4. Выполните следующую команду для генерации самоподписанного сертификата и создания PEM-кодированного файла сертификата (.crt), заменив следующие заполнятели соответствующими значениями. Команда конвертирует и подписывает ваш CSR с помощью приватного ключа, создавая самоподписанный сертификат, который истекает через 365 дней.

    {KeyFile}. Название твоего файла с приватным ключом.

    {CsrFile}. Название вашего CSR-файла.

    {CrtFile}. Название вашего файла с сертификатом.

    openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
    
  5. Выполните следующую команду, чтобы получить отпечаток сертификата, заменив следующие заполнятели соответствующими значениями. Отпечаток сертификата — это вычисленное хеш-значение, уникальное для этого сертификата. Вам нужен отпечаток пальца, чтобы настроить ваше IoT-устройство в Центр Интернета вещей для тестирования.

    {CrtFile}. Название вашего файла с сертификатом.

    openssl x509 -in {CrtFile} -noout -fingerprint
    

Проверьте сертификат самостоятельно после загрузки

Когда вы загружаете сертификат корневой сертификат (CA) или подчинённый сертификат CA в ваш IoT-хаб, вы можете автоматически проверить сертификат. Если вы не выбрали автоматическую проверку сертификата во время загрузки, ваш сертификат отображается со статусом, установленным как Непроверенный. Для ручной проверки сертификата необходимо выполнить следующие шаги.

  1. Выберите сертификат, чтобы просмотреть диалог «Детали сертификата ».

  2. Выберите Generate Verification Code в диалоговом диалоге.

    Скриншот с диалогом с деталями сертификата.

  3. Скопируйте код проверки в буфер обмена. Вы должны использовать этот код подтверждения в качестве предмета сертификата в последующих шагах. Например, если код проверки — 75B86466DA34D2B04C0C4C9557A119687ADAE7D4732BDDB3, добавьте его как предмет вашего сертификата, как показано на следующем шаге.

  4. Существует три способа создания сертификата верификации:

    • Если вы используете скрипт PowerShell, предоставленный Microsoft, запустите New-CACertsVerificationCert "<verification code>" и создайте сертификат с именем VerifyCert4.cer, заменяя <verification code> его на ранее сгенерированный код проверки. Дополнительные сведения см. в разделе "Управление тестовыми сертификатами ЦС" для примеров и учебников в репозитории GitHub для Центр Интернета вещей Azure Device SDK для C.

    • Если вы используете скрипт Bash, предоставленный Microsoft, запустите ./certGen.sh create_verification_certificate "<verification code>" его и создайте сертификат с названием verification-code.cert.pem, заменяя <verification code> его на ранее сгенерированный код проверки. Для получения дополнительной информации см. раздел Managing test CA certificates для примеров и учебных материалов в репозитории GitHub для Центр Интернета вещей Azure Device SDK for C.

    • Если вы используете OpenSSL для генерации сертификатов, сначала нужно сгенерировать приватный ключ, а затем сгенерировать файл запроса на подписание сертификатов (CSR). В следующем примере заменим <verification code> на ранее сгенерированный код проверки:

    openssl genpkey -out pop.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
    openssl req -new -key pop.key -out pop.csr
    
    -----
    Country Name (2 letter code) [XX]:.
    State or Province Name (full name) []:.
    Locality Name (eg, city) [Default City]:.
    Organization Name (eg, company) [Default Company Ltd]:.
    Organizational Unit Name (eg, section) []:.
    Common Name (eg, your name or your server hostname) []:<verification code>
    Email Address []:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    

    Затем создайте сертификат, используя соответствующий конфигурационный файл либо для корневого CA, либо для подчинённого CA, а также CSR-файл. Следующий пример демонстрирует, как использовать OpenSSL для создания сертификата из корневого конфигурационного файла CA и CSR-файла.

    openssl ca -config rootca.conf -in pop.csr -out pop.crt -extensions client_ext
    

    Для получения дополнительной информации смотрите в разделе Руководство — Создание и загрузка сертификатов для тестирования.

  5. Выберите новый сертификат в режиме «Информация о сертификате ».

  6. После загрузки сертификата выберите «Верифицировать». Статус сертификата должен измениться на Проверенный.

Узнать больше

Для получения дополнительной информации о сертификатах X.509 и о том, как они используются в Центр Интернета вещей, см. следующие статьи: