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


Вводные сведения о сертификатах

В этой статье описывается использование сертификатов в приложениях универсальной платформы Windows (UWP). Цифровые сертификаты применяются в шифровании с открытым ключом для привязки открытого ключа к пользователю, компьютеру или организации. Чаще всего удостоверения привязки используются для проверки подлинности одного объекта по отношению к другому. Например, часто сертификаты используются для проверки подлинности веб-сервера по отношению к пользователю и пользователя по отношению к веб-серверу. Можно создавать запросы сертификатов и устанавливать или импортировать выданные сертификаты. Сертификат также можно регистрировать в иерархии сертификатов.

Общие хранилища сертификатов

Приложения UWP используют новую изоляционистскую модель приложений, представленную в Windows 8. В этой модели приложения работают внутри низкоуровневого структурного элемента операционной системы, называемого контейнером приложения, который закрывает приложению доступ к ресурсам или файлам за своими пределами, если на это нет явного разрешения. В следующих разделах описаны последствия использования этой модели в инфраструктуре открытых ключей (PKI).

Хранение сертификатов для контейнера приложения

Сертификаты, предназначенные для использования в конкретном контейнере приложения, хранятся в отдельных для каждого пользователя и контейнера местах. Приложение, выполняющееся внутри контейнера, имеет доступ на запись только к своему хранилищу сертификатов. Если приложение добавляет сертификаты в какое-либо из своих хранилищ, другие приложения не могут читать эти сертификаты. Когда приложение удаляется, вместе с ним удаляются и его собственные сертификаты. Приложение имеет также доступ на чтение ко всем хранилищам сертификатов локального компьютера, кроме хранилищ MY и REQUEST.

Кэш

У каждого контейнера приложения есть изолированный кэш, в котором могут сохраняться сертификаты поставщиков, необходимые для проверки, списки отзыва сертификатов (CRL) и ответы OCSP.

Общие сертификаты и ключи

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

Устранить эту проблему и разрешить группам субъектов доступ к группам ресурсов можно с помощью модели изоляции для контейнера приложения, поддерживающей концепцию возможностей. Возможность — это атрибут, который обеспечивает процессу контейнера приложения доступ к конкретному ресурсу. Например, возможность sharedUserCertificates предоставляет контейнеру приложения доступ на чтение к сертификатам и ключам, находящимся в пользовательском хранилище MY и хранилище доверенных корневых сертификатов смарт-карты. При этом она не предоставляет доступа на чтение к хранилищу REQUEST пользователя.

Возможность sharedUserCertificates объявляется в манифесте, как показано в следующем примере.

<Capabilities>
    <Capability Name="sharedUserCertificates" />
</Capabilities>

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

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

Версии 1, 2 и 3 сертификата X.509

Некоторые из этих полей и расширений можно задавать непосредственно при использовании класса CertificateRequestProperties для создания запроса сертификата, но для большинства полей и расширений это выполнить невозможно. Такие поля и расширения могут быть заполнены центром, выдающим сертификат, или могут быть оставлены пустыми. Дополнительные сведения об этих полях см. в следующих разделах:

Поля, версия 1

Поле Описание
Версия Указывает номер версии закодированного сертификата. Текущие возможные значения этого поля: 0, 1 или 2.
Серийный номер Содержит положительное уникальное целое число, присвоенное сертификату центром сертификации (ЦС).
Алгоритм подписи Содержит идентификатор объекта (ИО), указывающий алгоритм, применявшийся ЦС для подписания сертификата. Например, 1.2.840.113549.1.1.5 указывает на использование хэш-алгоритма SHA-1 вместе с алгоритмом шифрования RSA, разработанного RSA Laboratories.
Издатель Содержит различающееся имя (РИ) X.500 ЦС, создавшего и подписавшего сертификат.
Срок действия Указывает промежуток времени, в течение которого действует сертификат. Для дат до конца 2049 года используется формат всемирного координированного времени (времени по Гринвичу) (ггммддччммссз). Для дат с 1 января 2050 года используется универсальный формат времени (ггггммддччммссз).
Тема Содержит различающееся имя X.500 объекта, связанного с открытым ключом, содержащимся в сертификате.
Открытый ключ Содержит открытый ключ и данные связанного алгоритма.

Поля, версия 2

Сертификат X.509 версии 2 содержит основные поля, определенные в версии 1, а также следующие поля.

Поле Описание
Уникальный идентификатор поставщика Содержит уникальное значение, которое может быть использовано для того, чтобы имя ЦС по стандарту X.500 однозначно идентифицировало этот ЦС при последующем многократном использовании различными объектами.
Уникальный идентификатор субъекта Содержит уникальное значение, которое может быть использовано для того, чтобы имя субъекта по стандарту X.500 однозначно идентифицировало этот субъект при последующем многократном использовании различными объектами.

Расширения, версия 3

Сертификат X.509 версии 3 содержит основные поля, определенные в версии 1 и в версии 2, а также следующие расширения сертификата.

Поле Описание
Идентификатор ключа центра сертификации Идентифицирует открытый ключ центра сертификатов (ЦС), соответствующий закрытому ключу ЦС, который используется для подписания данного сертификата.
Базовые ограничения Определяет, может ли объект использоваться в качестве ЦС, и, если может, номера подчиненных ЦС, которые могут присутствовать в нисходящей цепочке сертификатов.
Политики сертификата Определяет политики, регулирующие выдачу сертификата, и возможные цели его использования.
Точки распространения списков отзыва сертификатов (CRL) Содержит URI основного списка отзыва сертификата (CRL).
Расширенное использование ключа Указывает механизм использования открытого ключа, содержащегося в данном сертификате.
Дополнительное имя поставщика Определяет одну (или более одной) дополнительную форму имени для поставщика запроса сертификата.
Использование ключа Определяет ограничения для операций, которые могут выполняться с использованием открытого ключа, содержащегося в данном сертификате.
Ограничения имени Определяет пространство имен, в котором должны быть размещены все имена субъектов в иерархии сертификата. Это расширение используется только в сертификате ЦС.
Ограничения политики Ограничивает проверку пути при помощи запрещения сопоставлений политики или требования, чтобы каждый сертификат в данной иерархии содержал допустимый идентификатор политики. Это расширение используется только в сертификате ЦС.
Сопоставления политики Указывает, какие политики в подчиненном ЦС соответствуют политикам в выдающем ЦС.
Период использования закрытого ключа Указывает срок действия закрытого ключа, отличающийся от срока действия сертификата, с которым связан этот закрытый ключ.
Альтернативное имя субъекта Определяет одну (или более одной) дополнительную форму имени для субъекта запроса сертификата. Примеры дополнительных форм могут включать адреса электронной почты, DNS-имена, IP-адреса и URI.
Атрибуты каталога субъекта Сообщает атрибуты идентификации, например национальную принадлежность субъекта сертификата. Значением расширения является последовательность пар значений кодов объекта (OID)
Идентификатор ключа субъекта Служит для разделения нескольких открытых ключей, держателем которых является субъект сертификата. Значением расширения обычно является хэш SHA-1 ключа.