Функция CertFindChainInStore (wincrypt.h)

Функция CertFindChainInStore находит первый или следующий сертификат в хранилище , удовлетворяющем указанным условиям. Затем он создает и проверяет контекст цепочки сертификатов для этого сертификата. Найденный сертификат, для которого создается цепочка, выбирается в соответствии с критериями, установленными параметрами dwFindFlags, dwFindType и pvFindPara . Эту функцию можно использовать в цикле для поиска всех сертификатов в хранилище сертификатов, соответствующих указанным условиям поиска, и для создания контекста цепочки сертификатов для каждого найденного сертификата.

Синтаксис

PCCERT_CHAIN_CONTEXT CertFindChainInStore(
  [in] HCERTSTORE           hCertStore,
  [in] DWORD                dwCertEncodingType,
  [in] DWORD                dwFindFlags,
  [in] DWORD                dwFindType,
  [in] const void           *pvFindPara,
  [in] PCCERT_CHAIN_CONTEXT pPrevChainContext
);

Параметры

[in] hCertStore

Дескриптор хранилища для поиска сертификата, на основе которого строится цепочка. Этот дескриптор передается в качестве дополнительного хранилища в функцию CertGetCertificateChain при построении цепочки.

[in] dwCertEncodingType

Тип кодирования сертификата, который использовался для кодирования хранилища. Эта функция игнорирует идентификатор типа кодирования сообщений , содержащийся в высоком значении WORD .

Этот параметр может быть следующим определенным в настоящее время типом кодирования сертификата.

Значение Значение
X509_ASN_ENCODING
1 (0x1)
Задает кодировку сертификата X.509.

[in] dwFindFlags

Содержит дополнительные параметры для поиска. Возможные значения этого параметра зависят от значения параметра dwFindType .

Этот параметр может содержать ноль или сочетание одного или нескольких из следующих значений, если dwFindType содержит CERT_CHAIN_FIND_BY_ISSUER.

Значение Значение
CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG
Сравнивает открытый ключ в сертификате с открытым ключомпоставщика служб шифрования. Это сравнение является последним проверка, выполненным в цепочке при ее построении.

Так как элемент hCryptProv издателя содержит закрытый ключ, его может потребоваться проверить несколько раз в ходе этого процесса. Чтобы упростить эту проверку, член dwAcquirePrivateKeyFlags можно задать в структуре CERT_CHAIN_FIND_BY_ISSUER_PARA , чтобы включить кэширование этого hCryptProv.

CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG
По умолчанию проверяется только первая простая цепочка на соответствие имени издателя. Если этот флаг задан, значение по умолчанию переопределяется, а последующие простые цепочки также проверяются на соответствие имени издателя.
CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG
Повышает производительность этой функции, заставляя ее выполнять поиск только в кэшированных системных хранилищах (Root, My, Ca, Trust) для поиска сертификатов издателя. Если этот флаг не установлен, функция выполняет поиск кэшированных системных хранилищ и хранилища, представленных параметром hCertStore .
CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG
Выполняется поиск только в кэше URL-адресов. Поиск в Интернете не выполняется.
CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG
Открывает только хранилища сертификатов локального компьютера. Хранилища сертификатов текущего пользователя не открываются.
CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG
Не выполняется проверка, чтобы определить, имеет ли сертификат связанный закрытый ключ.

[in] dwFindType

Определяет, какие критерии следует использовать для поиска сертификата в хранилище.

Этот параметр может быть следующим заданным в настоящее время значением.

CERT_CHAIN_FIND_BY_ISSUER

Находит сертификат на основе имени издателя. Параметр pvFindPara является указателем на структуру CERT_CHAIN_FIND_BY_ISSUER_PARA , содержащую элементы, изменяющие поиск.

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

Эта функция сравнивает имена BLOB-объектов , переданных в структуре pvFindPara , с любым центром сертификации (ЦС) в цепочке, а не только центром сертификации в корневом сертификате.

Эта функция не выполняет никаких проверок отзыва.

Если pPrevChainContext не имеет значение NULL, эта функция будет возвращать цепочку для другого сертификата при каждом вызове функции. Если имеется только один подходящий сертификат, но есть два совпадающих центра сертификации, один из которых отозван, эта функция может вернуть отозванную цепочку. Если приложение затем проверяет отзыв с помощью вызовов функции CertVerifyRevocation и находит цепочку неподходящей, дополнительный вызов функции CertFindChainInStore не вернет цепочку, содержащую тот же сертификат из допустимого центра сертификации. Вместо этого он вернет совершенно другую цепочку с другим сертификатом или значением NULL, если такая цепочка не найдена.

[in] pvFindPara

Указатель, содержащий дополнительные условия поиска. Тип и формат данных, на которые указывает этот параметр, зависят от значения параметра dwFindType .

[in] pPrevChainContext

Указатель на структуру CERT_CHAIN_CONTEXT , возвращенную при предыдущем вызове этой функции. Поиск начинается с этого сертификата. Для первого вызова этой функции этот параметр должен иметь значение NULL. В последующих вызовах это указатель, возвращаемый предыдущим вызовом функции. Если этот параметр не равен NULL, эта функция освободит эту структуру.

Возвращаемое значение

Если первый или следующий контекст цепочки не построен, возвращается значение NULL . В противном случае возвращается указатель на структуру CERT_CHAIN_CONTEXT только для чтения. Структура CERT_CHAIN_CONTEXT освобождается при передаче в качестве параметра pPrevChainContext при последующем вызове этой функции. В противном случае структура CERT_CHAIN_CONTEXT должна быть освобождена явным образом путем вызова функции CertFreeCertificateChain .

Комментарии

Параметр pPrevChainContext должен иметь значение NULL при первом вызове для создания контекста цепочки. Для создания контекста следующей цепочки в pPrevChainContext устанавливается структура CERT_CHAIN_CONTEXT , возвращенная предыдущим вызовом. Если pPrevChainContext не равно NULL, структура всегда освобождается этой функцией с помощью функции CertFreeCertificateChain , даже если возникает ошибка.

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

CERT_CHAIN_CONTEXT

CERT_CHAIN_FIND_BY_ISSUER_PARA

CertFreeCertificateChain

CertGetCertificateChain

Функции проверки цепочки сертификатов