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


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

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

Синтаксис

BOOL CertVerifyCertificateChainPolicy(
  [in]      LPCSTR                    pszPolicyOID,
  [in]      PCCERT_CHAIN_CONTEXT      pChainContext,
  [in]      PCERT_CHAIN_POLICY_PARA   pPolicyPara,
  [in, out] PCERT_CHAIN_POLICY_STATUS pPolicyStatus
);

Параметры

[in] pszPolicyOID

Текущие предопределенные структуры политики цепочки перечислены в следующей таблице.

Ценность Значение
CERT_CHAIN_POLICY_BASE
(LPCSTR) 1
Реализует проверки политики базовой цепочки. dwFlags элемент структуры, на который указывает pPolicyPara, можно задать для изменения поведения проверки политики по умолчанию.
CERT_CHAIN_POLICY_AUTHENTICODE
(LPCSTR) 2
Реализует проверки политики цепочки Authenticode. Элемент pvExtraPolicyPara структуры, на который указывает pPolicyPara, можно задать для указания AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA структуры.

Элемент pvExtraPolicyStatus, на который указывает pPolicyStatus, можно задать для указания AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS структуры.
CERT_CHAIN_POLICY_AUTHENTICODE_TS
(LPCSTR) 3
Реализует проверки политики цепочки меток времени Authenticode. Элемент pvExtraPolicyPara структуры данных, на который указывает pPolicyPara, можно задать для указания AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA структуры.

Элемент pvExtraPolicyStatus структуры данных, на который указывает pPolicyStatus, не используется и должен иметь значение NULL.
CERT_CHAIN_POLICY_SSL
(LPCSTR) 4
Реализует проверки политики проверки политики SSL-клиента или сервера. Элемент pvExtraPolicyPara в структуре данных, на который указывает pPolicyPara, можно задать для указания структуры SSL_EXTRA_CERT_CHAIN_POLICY_PARA, инициализации с дополнительными критериями политики.

Примечание. Чтобы различать сертификаты авторизации сервера и клиента, вызов функции CertGetCertificateChain, чтобы получить контекст цепочки, должен указать тип сертификата, задав ожидаемое использование. Задайте ожидаемое использование, задав элемент RequestedUsage структуры CERT_CHAIN_PARA, переданной в входной параметр pChainPara функции CertGetCertificateChain.
CERT_CHAIN_POLICY_BASIC_CONSTRAINTS
(LPCSTR) 5
Реализует базовую политику цепочки ограничений. Выполняет итерацию по всем сертификатам в цепочке для проверки szOID_BASIC_CONSTRAINTS или расширения szOID_BASIC_CONSTRAINTS2. Если расширение отсутствует, предполагается, что сертификат имеет допустимую политику. В противном случае для первого элемента сертификата проверяет, соответствует ли он ожидаемому CA_FLAG или END_ENTITY_FLAG, указанному в dwFlags элемент структуры CERT_CHAIN_POLICY_PARA, на который указывает параметр pPolicyPara. Если ни один или оба флага не заданы, то первый элемент может быть ЦС или END_ENTITY. Все остальные элементы должны быть центра сертификации (ЦС). Если PathLenConstraint присутствует в расширении, он проверяется.

Первые элементы оставшихся простых цепочек (т. е. сертификаты, используемые для подписи CTL), проверяются как END_ENTITY. Если эта проверка завершается ошибкой, dwError будет иметь значение TRUST_E_BASIC_CONSTRAINTS.
CERT_CHAIN_POLICY_NT_AUTH
(LPCSTR) 6
Реализует политику цепочки проверки подлинности Windows NT, которая состоит из трех различных проверок цепочки в следующем порядке:

— CERT_CHAIN_POLICY_BASE. Реализует проверки базовой политики цепочки. LoWORD dwFlags можно задать в pPolicyPara, чтобы изменить поведение проверки политики по умолчанию. Дополнительные сведения см. в CERT_CHAIN_POLICY_BASE.
— CERT_CHAIN_POLICY_BASIC_CONSTRAINTS. Реализует базовую политику цепочки ограничений. HiWORD dwFlags можно указать, должен ли первый элемент быть ЦС или END_ENTITY. Дополнительные сведения см. в CERT_CHAIN_POLICY_BASIC_CONSTRAINTS.
— проверяет, является ли второй элемент в цепочке цС, выданным конечным сертификатом, доверенным ЦС для проверки подлинности Windows NT. ЦС считается доверенным, если он существует в хранилище системного реестра NTAuth, найденном в расположении хранилища CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE хранилища. Если эта проверка завершается ошибкой, ЦС не является доверенным и dwError имеет значение CERT_E_UNTRUSTEDCA. Если CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG задан в подразделе Флаги политики HKEY_LOCAL_MACHINEProtectedRoots, определенного CERT_PROT_ROOT_FLAGS_REGPATH, и указанная выше проверка завершается ошибкой, цепочка проверяется на CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS, заданную в dwInfoStatus. Этот параметр устанавливается, если для всех пространств имен, включая имя участника-пользователя, было допустимое ограничение имени. Если в цепочке нет этого набора состояний сведений, dwError имеет значение CERT_E_UNTRUSTEDCA.
CERT_CHAIN_POLICY_MICROSOFT_ROOT
(LPCSTR) 7
Проверяет последний элемент первой простой цепочки для корневого открытого ключа Майкрософт. Если этот элемент не содержит корневой открытый ключ Майкрософт, dwError элемент структуры CERT_CHAIN_POLICY_STATUS, на который указывает параметр pPolicyStatus, имеет значение CERT_E_UNTRUSTEDROOT.

dwFlags элемент структуры CERT_CHAIN_POLICY_PARA, на который указывает параметр pPolicyStatus, может содержать флаг MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG, который приводит к тому, что эта функция будет проверять корень приложения Майкрософт "Центр корневых сертификатов Майкрософт 2011".

Элемент dwFlags структуры CERT_CHAIN_POLICY_PARA, на который указывает параметр pPolicyPara, может содержать флаг MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG, что приводит к тому, что эта функция также проверяет наличие корней тестов Майкрософт.

Примечание :
Эта политика идентификатор объекта (OID) не выполняет никаких проверок политики, она предназначена для использования в сочетании с другими политиками.
CERT_CHAIN_POLICY_EV
(LPCSTR) 8
Указывает, что выполняется расширенная проверка сертификатов.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение не поддерживается.
CERT_CHAIN_POLICY_SSL_F12
(LPCSTR) 9
Проверяет, имеют ли какие-либо сертификаты в цепочке слабые крипто или если соответствие корневого сертификата стороннего поставщика и укажите строку ошибки. Элемент pvExtraPolicyStatus структуры CERT_CHAIN_POLICY_STATUS, на который указывает параметр pPolicyStatus, должен указывать на SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS, который обновляется с результатами проверок соответствия слабой криптографии и корневой программы.

Перед вызовом cbSize член структуры CERT_CHAIN_POLICY_STATUS, на который указывает параметр pPolicyStatus, должен иметь значение больше или равно sizeof(SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS).

Элемент dwError в структуре CERT_CHAIN_POLICY_STATUS, на который указывает параметр pPolicyStatus, будет иметь значение TRUST_E_CERT_SIGNATURE для потенциально слабого шифрования и установить CERT_E_UNTRUSTEDROOT для корневых корней сторонних производителей, не входящие в соответствие с программой Microsoft Root.

Windows 10 версии 1607, Windows Server 2016, Windows 10 версии 1511 с KB3172985, Windows 10 RTM с KB3163912, Windows 8.1 и Windows Server 2012 R2 с KB3163912 и Windows 7 с пакетом обновления 1 (SP1) и Windows Server 2008 R2 с пакетом обновления 1 (SP1) с KB3161029

[in] pChainContext

Указатель на структуру CERT_CHAIN_CONTEXT, содержащую цепочку для проверки.

[in] pPolicyPara

Указатель на CERT_CHAIN_POLICY_PARA структуру, которая предоставляет критерии проверки политики для цепочки. dwFlags элемент этой структуры можно задать для изменения поведения проверки политики по умолчанию.

Кроме того, параметры, относящиеся к политике, также можно передать в элементе pvExtraPolicyPara.

[in, out] pPolicyStatus

Указатель на структуру CERT_CHAIN_POLICY_STATUS, в которой возвращаются сведения о состоянии в цепочке. Дополнительное состояние OID можно вернуть в pvExtraPolicyStatus элемент этой структуры.

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

Возвращаемое значение указывает, удалось ли функции проверить политику, она не указывает, завершилась ли проверка политики ошибкой или передачей.

Если цепочку можно проверить для указанной политики, возвращается TRUE, а dwError член pPolicyStatus обновляется. dwError0 (ERROR_SUCCESS или S_OK) указывает, что цепочка удовлетворяет указанной политике.

Если цепочка не может быть проверена, возвращаемое значение TRUE и необходимо проверить параметр pPolicyStatus для фактической ошибки.

Значение FALSE указывает, что функция не смогла проверить наличие политики.

Замечания

Элемент dwError структуры CERT_CHAIN_POLICY_STATUS, на который указывает pPolicyStatus, может применяться к одному элементу цепочки, к простой цепочке или ко всему контексту цепочки. Если dwError применяется ко всему контексту цепочки, то lChainIndex и lElementIndex члены структуры CERT_CHAIN_POLICY_STATUS–1. Если dwError применяется к полной простой цепочке, lElementIndex имеет значение –1 и lChainIndex имеет индекс первой цепочки с ошибкой. Если dwError применяется к одному элементу сертификата, lChainIndex и lElementIndex индексировать первый сертификат, имеющий ошибку.

Чтобы получить элемент сертификата, используйте следующий синтаксис:

pChainContext->rgpChain[lChainIndex]->rgpElement[lElementIndex];

Используйте функцию CertGetCertificateChain, чтобы включить и выполнить проверку отзыва сертификатов. Функция CertVerifyCertificateChainPolicy не проверяет, отозваны ли сертификаты в цепочке сертификатов.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2003 [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка wincrypt.h
библиотеки Crypt32.lib
DLL Crypt32.dll

См. также

AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA

AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS

AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA

CERT_CHAIN_CONTEXT

CERT_CHAIN_POLICY_PARA

CERT_CHAIN_POLICY_STATUS

CertGetCertificateChain

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