Функция 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, которая состоит из трех отдельных проверок цепочки в следующем порядке:
  1. CERT_CHAIN_POLICY_BASE — реализует проверки базовой политики цепочки. LoWORD для dwFlags можно задать в pPolicyPara , чтобы изменить поведение проверки политики по умолчанию. Дополнительные сведения см. в разделе CERT_CHAIN_POLICY_BASE.
  2. CERT_CHAIN_POLICY_BASIC_CONSTRAINTS — реализует базовую политику цепочки ограничений. В параметре HIWORD dwFlags можно указать, должен ли первый элемент быть ЦС или END_ENTITY. Дополнительные сведения см. в разделе CERT_CHAIN_POLICY_BASIC_CONSTRAINTS.
  3. Проверяет, является ли второй элемент в цепочке, ЦС, выдавшего конечный сертификат, доверенным ЦС для проверки подлинности 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 и обновляется член dwErrorpPolicyStatus . Значение dwError 0 (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 индексы первого сертификата с ошибкой.

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

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

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

Требования

   
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header 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

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