Функция CertSelectCertificateChains (wincrypt.h)
Функция CertSelectCertificateChains извлекает цепочки сертификатов на основе указанных критериев выбора.
Синтаксис
BOOL CertSelectCertificateChains(
[in, optional] LPCGUID pSelectionContext,
[in] DWORD dwFlags,
[in, optional] PCCERT_SELECT_CHAIN_PARA pChainParameters,
[in] DWORD cCriteria,
[in, optional] PCCERT_SELECT_CRITERIA rgpCriteria,
[in] HCERTSTORE hStore,
[out] PDWORD pcSelection,
[out] PCCERT_CHAIN_CONTEXT **pprgpSelection
);
Параметры
[in, optional] pSelectionContext
Указатель на GUID сценария выбора сертификата, используемого для этого вызова.
[in] dwFlags
Флаги для управления процессом выбора сертификата. Этот параметр может быть сочетанием нуля или нескольких следующих флагов:
[in, optional] pChainParameters
Указатель на структуру CERT_SELECT_CHAIN_PARA для указания параметров построения цепочки. Если значение РАВНО NULL, будут использоваться параметры по умолчанию.
Элемент pChainPara структуры CERT_SELECT_CHAIN_PARA указывает на CERT_CHAIN_PARA структуру, которую можно использовать для включения строгого подписывания.
[in] cCriteria
Количество элементов в массиве, на который указывает массив rgpCriteria .
[in, optional] rgpCriteria
Указатель на массив CERT_SELECT_CRITERIA структур, определяющих критерии выбора. Если для этого параметра задано значение NULL, значение параметра cCriteria должно быть равно нулю.
[in] hStore
Дескриптор хранилища, из которого выбираются сертификаты.
[out] pcSelection
Указатель на значение DWORD для получения количества элементов в массиве, на который указывает параметр pprgpSelection .
[out] pprgpSelection
Указатель на указатель на расположение для получения массива CERT_CHAIN_CONTEXT структуры. Функция CertSelectCertificateChains возвращает только цепочки сертификатов, которые соответствуют всем критериям выбора. Записи в массиве упорядочены по качеству, т. е. цепочка с наивысшим качеством является первой записью.
Хранилище для массива выделяется функцией CertSelectCertificateChains . Чтобы освободить выделенную память, необходимо сначала освободить каждый отдельный контекст цепочки в массиве, вызвав функцию CertFreeCertificateChain . Затем необходимо освободить память, вызвав функцию CertFreeCertificateChainList .
Возвращаемое значение
Если функция выполняется успешно, функция возвращает значение TRUE.
Если функция завершается сбоем, она возвращает ноль (FALSE). Для получения дополнительных сведений об ошибке вызовите функцию GetLastError .
Комментарии
Критерии выбора можно указать с помощью параметра dwFlags , с помощью параметра rgpCriteria или с помощью обоих параметров. Если критерии выбора не указаны, функция выполняется успешно и возвращает цепочки сертификатов для всех сертификатов в хранилище, указанном параметром hStore .
Выбранные цепочки сертификатов упорядочены на основе следующей логики предпочтений:
- Отдавайте предпочтение сертификатам, которые являются смарт-карта, а не сертификатам, которые не основаны на смарт-карта.
- Предпочитать сертификаты с более длительным сроком действия (дата окончания срока действия позже).
- Если несколько сертификатов имеют одинаковую дату окончания срока действия, отдавайте предпочтение сертификатам, которые были выданы совсем недавно.
- Если есть галстук, отдавайте предпочтение более коротким цепям.
- CERT_SELECT_BY_ISSUER_NAME
- CERT_SELECT_BY_ISSUER_ATTR
- CERT_SELECT_BY_POLICY_OID
- Создайте структуру CERT_STRONG_SIGN_PARA , укажите необходимые параметры строгого подписывания и задайте указатель на структуру в элементе pStrongSignParaструктуры CERT_CHAIN_PARA .
- Задайте указатель на структуру CERT_CHAIN_PARA в элементе pChainParaструктуры CERT_SELECT_CHAIN_PARA .
- Задайте указатель на структуру CERT_SELECT_CHAIN_PARA в параметре pChainParameters этой функции (CertSelectCertificateChains).
При включении проверки строгой подписи любая цепочка сертификатов, возвращающая ошибку CERT_TRUST_IS_NOT_SIGNATURE_VALID в поле dwErrorStatusструктуры CERT_TRUST_STATUS , будет пропущена. (Параметр pprgpSelection указывает на структуру CERT_CHAIN_CONTEXT , которая, в свою очередь, указывает на структуру CERT_TRUST_STATUS .) Значение CERT_TRUST_HAS_WEAK_SIGNATURE также устанавливается для слабой сигнатуры.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 7 [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 R2 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |
См. также раздел