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


Кодирование и декодирование контекста сертификата

CryptoAPI поддерживает кодирование и декодирование сертификатов. CryptoAPI включает в себя обширную гибкую систему функций и структур C, которые позволяют кодировать и декодировать различными способами. CryptoAPI поддерживает стандартную структуру сертификата X.509 и стандартную кодировку ASN.1 для обеспечения взаимодействия с другими системами.

Общие сведения о закодированных данных см. в разделе Закодированные и декодированные данные.

Контексты сертификатов

Контекст сертификата, CERT_CONTEXT, — это структура C, содержащая закодированный член, дескриптор хранилища сертификатов, указатель на исходный закодированный большой двоичный объект сертификата и указатель на структуру CERT_INFO C.

Структура CERT_INFO является основой сертификата. Он содержит в непосредственной форме и в закодированном виде все основные сведения в сертификате. На следующем рисунке показана структура CERT_INFO со всеми ее закодированными элементами.

Структура cert-info

Члены IssuerUniqueID и SubjectUniqueID являются частью реализации сертификата X.509 версии 2, но используются редко. Расширения сертификатов в версии 3 заменяют функциональные возможности этих элементов.

Если требуются сведения, содержащиеся в закодированных (затеняемых) членах Issuer и Subject , эти элементы должны быть декодированы. Используйте CryptDecodeObject для декодирования этих элементов. На следующем рисунке показан процесс декодирования одного из этих элементов.

декодирование с помощью cryptdecodeobject

В показанном примере функция CryptDecodeObject создает структуру CERT_NAME_INFO , массив CERT_RDN структур, соответствующий массив CERT_RDN_ATTR структур и строку, содержащую имя. Элементы структуры CERT_RDN_ATTR определяют содержимое строки. Например, если элемент pszObjId — 2.5.4.3, строка содержит общее имя. Если это 2.5.4.10, строка будет содержать название организации. Список этих идентификаторов объектов (OID) см. в разделе CERT_RDN_ATTR.

Элемент dwValueType содержит сведения о типе строки. Если это CERT_RDN_PRINTABLE_STRING, то элемент значения содержит строку символов с нулевой символьной строкой ширины байтов. Если это CERT_RDN_UNICODE_STRING, строка является строкой символов двойной ширины (размером с слово).

Подробные сведения о кодировании и декодировании сертификатов см. в разделах Кодирование структуры CERT_INFO и Декодирование структуры CERT_INFO.