Введение в сертификаты
В этой статье рассматривается использование сертификатов в приложениях универсальная платформа Windows (UWP). Цифровые сертификаты используются в шифровании открытого ключа для привязки открытого ключа к лицу, компьютеру или организации. Привязанные удостоверения чаще всего используются для проверки подлинности одной сущности в другую. Например, сертификаты часто используются для проверки подлинности веб-сервера пользователю и пользователю на веб-сервере. Вы можете создавать запросы на сертификаты и устанавливать или импортировать выданные сертификаты. Вы также можете зарегистрировать сертификат в иерархии сертификатов.
Общие хранилища сертификатов
Приложения UWP используют новую модель приложения изоляциониста, представленную в Windows 8. В этой модели приложения выполняются в низкоуровневой конструкции операционной системы, называемой контейнером приложений, которая запрещает приложению доступ к ресурсам или файлам за пределами себя, если это не разрешено явным образом. В следующих разделах описываются последствия, связанные с инфраструктурой открытых ключей (PKI).
Хранилище сертификатов на контейнер приложения
Сертификаты, предназначенные для использования в определенном контейнере приложений, хранятся в расположениях контейнеров приложений на пользователя. Приложение, работающее в контейнере приложений, имеет доступ на запись только к собственному хранилищу сертификатов. Если приложение добавляет сертификаты в любое из своих хранилищ, эти сертификаты не могут быть прочитаны другими приложениями. Если приложение удаляется, все сертификаты, относящиеся к нему, также удаляются. Приложение также имеет доступ на чтение к хранилищам сертификатов локального компьютера, отличных от хранилища MY и REQUEST.
Cache
Каждый контейнер приложений имеет изолированный кэш, в котором он может хранить сертификаты издателя, необходимые для проверки, списков отзыва сертификатов (CRL) и ответов протокола OCSP.
Общие сертификаты и ключи
Когда смарт-карта вставляется в средство чтения, сертификаты и ключи, содержащиеся на карточке, распространяются в пользовательское хранилище MY, где они могут быть предоставлены любому приложению с полным доверием, запущенное пользователем. Однако по умолчанию контейнеры приложений не имеют доступа к хранилищу MY пользователя.
Для решения этой проблемы и включения групп субъектов для доступа к группам ресурсов модель изоляции контейнеров приложений поддерживает концепцию возможностей. Возможность позволяет процессу контейнера приложений получить доступ к определенному ресурсу. Функция sharedUserCertificates предоставляет контейнеру приложений доступ на чтение сертификатов и ключей, содержащихся в пользовательском хранилище MY и хранилище доверенных корней смарт-карт. Эта возможность не предоставляет доступ на чтение к хранилищу запросов пользователя.
Вы указываете возможность sharedUserCertificates в манифесте, как показано в следующем примере.
<Capabilities>
<Capability Name="sharedUserCertificates" />
</Capabilities>
Поля сертификата
Стандарт сертификата открытого ключа X.509 был изменен со временем. Каждая последовательная версия структуры данных сохранила поля, которые существовали в предыдущих версиях и добавили больше, как показано на следующем рисунке.
Некоторые из этих полей и расширений можно указать непосредственно при использовании класса CertificateRequestProperties для создания запроса сертификата. Большинство из них не может. Эти поля могут быть заполнены центром выдачи или их можно оставить пустым. Дополнительные сведения о полях см. в следующих разделах:
Поля версии 1
Поле | Description |
---|---|
Версия | Указывает номер версии закодированного сертификата. В настоящее время возможные значения этого поля : 0, 1 или 2. |
Серийный номер | Содержит положительное, уникальное целое число, назначенное центром сертификации (ЦС) сертификату. |
Алгоритм подписи | Содержит идентификатор объекта (OID), указывающий алгоритм, используемый ЦС для подписи сертификата. Например, 1.2.840.113549.1.1.5 указывает алгоритм хэширования SHA-1 в сочетании с алгоритмом шифрования RSA из лабораторий RSA. |
Издатель | Содержит различающееся имя X.500 (DN) ЦС, создавшего и подписавшего сертификат. |
Срок действия | Указывает интервал времени, в течение которого сертификат действителен. Даты до конца 2049 года используют формат "Среднее время" (yymmdddhhmmssz). Даты, начиная с 1 января 2050 г., используют обобщенный формат времени (ггггмддддхммссс). |
Тема | Содержит различающееся имя сущности X.500, связанной с открытым ключом, содержащимся в сертификате. |
Открытый ключ | Содержит сведения о открытом ключе и связанном алгоритме. |
Поля версии 2
Сертификат X.509 версии 2 содержит основные поля, определенные в версии 1, и добавляет следующие поля.
Поле | Description |
---|---|
Уникальный идентификатор издателя | Содержит уникальное значение, которое можно использовать для создания имени ЦС X.500 однозначно при повторном использовании разных сущностей с течением времени. |
Уникальный идентификатор субъекта | Содержит уникальное значение, которое можно использовать для создания имени субъекта сертификата X.500, однозначно используемого различными сущностями с течением времени. |
Расширения версии 3
Сертификат X.509 версии 3 содержит поля, определенные в версии 1 и версии 2, и добавляет расширения сертификатов.
Поле | Description |
---|---|
Идентификатор ключа центра сертификации | Определяет открытый ключ центра сертификации, соответствующий закрытому ключу ЦС, используемому для подписи сертификата. |
Базовые ограничения | Указывает, может ли сущность использоваться в качестве ЦС и, если да, количество подчиненных ЦС, которые могут существовать под ним в цепочке сертификатов. |
Политики сертификатов | Указывает политики, в которых был выдан сертификат, и цели, для которых он может использоваться. |
Точки распространения CRL | Содержит универсальный код ресурса (URI) базового списка отзыва сертификатов (CRL). |
Расширенное использование ключа | Указывает способ использования открытого ключа, содержащегося в сертификате. |
Альтернативное имя издателя | Указывает одну или несколько альтернативных форм имен для издателя запроса на сертификат. |
Использование ключа | Указывает ограничения на операции, которые могут выполняться открытым ключом, содержащимся в сертификате. |
Ограничения имен | Указывает пространство имен, в котором должны находиться все имена субъектов в иерархии сертификатов. Расширение используется только в сертификате ЦС. |
Ограничения политики | Ограничивает проверку пути, запрещая сопоставление политик или требуя, чтобы каждый сертификат в иерархии содержал допустимый идентификатор политики. Расширение используется только в сертификате ЦС. |
Сопоставления политик | Указывает политики в подчиненном ЦС, соответствующие политикам в выдаваемом ЦС. |
Период использования закрытого ключа | Указывает другой срок действия закрытого ключа, отличный от сертификата, с которым связан закрытый ключ. |
Альтернативное имя субъекта | Указывает одну или несколько альтернативных форм имен для субъекта запроса сертификата. Примеры альтернативных форм включают адреса электронной почты, DNS-имена, IP-адреса и URI. |
Атрибуты каталога субъекта | Передает атрибуты идентификации, такие как национальность субъекта сертификата. Значение расширения — это последовательность пар OID-value. |
Идентификатор ключа субъекта | Отличается от нескольких открытых ключей, удерживаемых субъектом сертификата. Значение расширения обычно является хэшом SHA-1 ключа. |