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

Функция CertVerifyCTLUsage проверяет, является ли субъект доверенным для указанного использования, путем поиска подписанного и допустимого по времени списка доверия сертификатов (CTL) с идентификаторами использования, содержащими субъект. Субъект сертификата можно определить по контексту сертификата или любому уникальному идентификатору, например хэшу SHA1 сертификата субъекта.

Синтаксис

BOOL CertVerifyCTLUsage(
  [in]           DWORD                    dwEncodingType,
  [in]           DWORD                    dwSubjectType,
  [in]           void                     *pvSubject,
  [in]           PCTL_USAGE               pSubjectUsage,
  [in]           DWORD                    dwFlags,
  [in, optional] PCTL_VERIFY_USAGE_PARA   pVerifyUsagePara,
  [in, out]      PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus
);

Параметры

[in] dwEncodingType

Указывает используемый тип кодирования. В настоящее время используются только X509_ASN_ENCODING и PKCS_7_ASN_ENCODING; однако в будущем можно добавить дополнительные типы кодирования. Для любого из текущих типов кодирования используйте

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING.

[in] dwSubjectType

Если параметру dwSubjectType присвоено значение CTL_CERT_SUBJECT_TYPE, pvSubject указывает на структуру CERT_CONTEXT . Элемент SubjectAlgorithm структуры проверяется для определения представления личности субъекта. Изначально в качестве значений для SubjectAlgorithm поддерживаются только хэши SHA1 и MD5. Соответствующее хэш-свойство получается из структуры CERT_CONTEXT .

Если параметру dwSubjectType присвоено значение CTL_ANY_SUBJECT_TYPE, pvSubject указывает на структуру CTL_ANY_SUBJECT_INFO . Элемент SubjectAlgorithm этой структуры должен соответствовать типу алгоритма CTL, а элемент SubjectIdentifier должен соответствовать одной из записей CTL.

Если параметру dwSubjectType присвоено любое предыдущее значение, dwEncodingType не используется.

[in] pvSubject

Значение, используемое в сочетании с параметром dwSubjectType .

[in] pSubjectUsage

Указатель на CTL_USAGE структуру, используемую для указания предполагаемого использования субъекта.

[in] dwFlags

Если CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG не задано, можно заменить CTL, время которого больше не действует в одном из хранилищ, указанных в rghCtlStore в CTL_VERIFY_USAGE_PARA . При замене CERT_VERIFY_UPDATED_CTL_FLAG задается в элементе dwFlagsобъекта pVerifyUsageStatus. Если этот флаг установлен, обновление не будет выполнено, даже если будет получен допустимый по времени обновленный CTL для CTL, который находится в хранилище и время которого больше не является действительным.

Если задано CERT_VERIFY_TRUSTED_SIGNERS_FLAG, поиск подписывающего выполняется только в хранилищах, указанных параметром rghSignerStore в CTL_VERIFY_USAGE_PARA . В противном случае хранилища подписывателя предоставляют дополнительные источники для поиска сертификата подписывателя. Дополнительные сведения см. в подразделе "Примечания".

Если задано CERT_VERIFY_NO_TIME_CHECK_FLAG, списки CCL не проверяются на допустимость времени. В противном случае они есть.

Если задано CERT_VERIFY_ALLOW_MORE_USAGE_FLAG, CTL может содержать идентификаторы использования в дополнение к идентификаторам, указанным в pSubjectUsage. В противном случае найденный CTL не будет содержать дополнительных идентификаторов использования.

[in, optional] pVerifyUsagePara

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

[in, out] pVerifyUsageStatus

Указатель на структуру CTL_VERIFY_USAGE_STATUS . Член cbSize структуры должен иметь размер в байтах структуры, а все остальные поля должны быть равны нулю перед вызовом CertVerifyCTLUsage . Дополнительные сведения см. в разделе CTL_VERIFY_USAGE_STATUS.

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

Если субъект является доверенным для указанного использования, возвращается значение TRUE . В противном случае возвращается значение FALSE . GetLastError может возвращать один из следующих кодов ошибок.

Значение Описание
CRYPT_E_NO_VERIFY_USAGE_DLL
Не найдена библиотека DLL или экспортируемая функция для проверки использования субъекта.
CRYPT_E_NO_VERIFY_USAGE_CHECK
Вызываемая функция не смогла выполнить проверка использования для субъекта.
CRYPT_E_VERIFY_USAGE_OFFLINE
Сервер находился в автономном режиме; Поэтому вызываемая функция не может завершить проверка использования.
CRYPT_E_NOT_IN_CTL
Тема не найдена в CTL.
CRYPT_E_NO_TRUSTED_SIGNER
Не найден доверенный подписыватель для проверки подписи сообщения или списка доверия.
 

Член dwErrorCTL_VERIFY_USAGE_PARA , на который указывает pVerifyUsageStatus , имеет тот же код ошибки.

Комментарии

CertVerifyCTLUsage — это диспетчер функций, которые можно установить с помощью идентификатора объекта (OID). Сначала он пытается найти функцию OID, которая соответствует первому идентификатору объекта использования в структуре CLT_USAGE , на которую указывает pSubjectUsage. В случае сбоя используется функция CertDllVerifyCTLUsage по умолчанию.

Функция CertDllVerifyCTLUsage в Cryptnet.dll может быть установлена с помощью OID; Он имеет следующие свойства:

  • Если хранилища CTL указаны в rghCtlStore в pVerifyUsagePara, поиск CTL выполняется только в этих хранилищах. В противном случае выполняется поиск В системном хранилище доверия для поиска CTL.
  • Если задано CERT_VERIFY_TRUSTED_SIGNERS_FLAG, поиск сертификата, соответствующего издателю и серийному номеру подписывающей стороны, выполняется только в хранилищах, указанных в параметре rghSignerStore в pVerifyUsagePara . В противном случае выполняется поиск в хранилище сообщений CTL, хранилищах подписывающей стороны, указанных в rghSignerStore в pVerifyUsagePara, системном хранилище доверия, системном хранилище ЦС, корневом каталоге и сертификате издателя программного обеспечения (SPC). В любом случае открытый ключ в найденном сертификате используется для проверки подписи CTL.
  • Если для CTL задан элемент NextUpdate и CERT_VERIFY_NO_TIME_CHECK не задан, он проверяется на допустимость времени.
  • Если У CTL, полученного из хранилища, есть недопустимое время, предпринимается попытка получить допустимую по времени версию. Функция CertDllVerifyCTLUsage использует свойство NextUpdateLocation или расширение NextUpdateLocation CTL либо выполняет поиск атрибута NextUpdateLocation в сведениях подписывающего.

Требования

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

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

CTL_VERIFY_USAGE_PARA

CTL_VERIFY_USAGE_STATUS

CertFindCTLInStore

CertFindSubjectInCTL

Функции проверки с помощью списков CCL