Функция 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 может возвращать один из следующих кодов ошибок.
Значение | Описание |
---|---|
|
Не найдена библиотека DLL или экспортируемая функция для проверки использования субъекта. |
|
Вызываемая функция не смогла выполнить проверка использования для субъекта. |
|
Сервер находился в автономном режиме; Поэтому вызываемая функция не может завершить проверка использования. |
|
Тема не найдена в CTL. |
|
Не найден доверенный подписыватель для проверки подписи сообщения или списка доверия. |
Член 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 |