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


Декодирование структуры CERT_INFO

При использовании сертификата первым шагом в декодирования большого двоичного объекта сертификата является вызов CertCreateCertificateContext, передав ему указатель на закодированный сертификат (BLOB). При вызове этой функции создается дубликат закодированного сертификата, структура типа CERT_CONTEXT и структура типа CERT_INFO. Как показано на следующем рисунке, контекст сертификата включает исходный BLOB-объект сертификата, структуру C типа CERT_CONTEXT и структуру C типа CERT_INFO. Один из членов структуры CERT_CONTEXT указывает на структуру CERT_INFO , а другой — на закодированный BLOB-объект сертификата.

контекст сертификата

Закодированный объект (элемент данных) всегда предоставляется в качестве входных данных для функции CryptDecodeObject , а выходные данные представляют собой структуру C, которая может иметь закодированные члены в зависимости от того, насколько далеко вы находитесь в процессе.

Существует еще один член, который требует некоторого декодирования, и это член расширения . Хотя он не закодирован на уровне CERT_INFO , он содержит некоторые закодированные сведения. Чтобы декодировать эти сведения, перейдите к следующему рисунку.

декодирование сведений

В структуре CERT_INFO элемент rgExtension является указателем на массив CERT_EXTENSION структур. Каждая структура CERT_EXTENSION имеет элемент Value , который находится в закодированном виде и должен быть декодирован. Элемент Value передается в функцию CryptDecodeObject , а выходные данные функции зависят от значения элемента pszObjId . Обратите внимание, что на рисунке создаются две разные структуры: CERT_BASIC_CONSTRAINTS_INFO типа и CERT_AUTHORITY_KEY_ID_INFO типа в зависимости от значения pszObjId.