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

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

Синтаксис

BOOL CryptVerifyCertificateSignatureEx(
  [in]                HCRYPTPROV_LEGACY hCryptProv,
  [in]                DWORD             dwCertEncodingType,
  [in]                DWORD             dwSubjectType,
  [in]                void              *pvSubject,
  [in]                DWORD             dwIssuerType,
  [in]                void              *pvIssuer,
  [in]                DWORD             dwFlags,
  [in, out, optional] void              *pvExtra
);

Параметры

[in] hCryptProv

Этот параметр не используется и должен иметь значение NULL.

Windows Server 2003 и Windows XP: Дескриптор поставщика служб шифрования , используемый для проверки подписи. Тип данных этого параметра — HCRYPTPROV.

Значение NULL передается, если нет веской причины для передачи определенного поставщика шифрования. Передача значения NULL приводит к получению поставщика RSA или DSS по умолчанию.

[in] dwCertEncodingType

Тип кодирования сертификата, который использовался для шифрования субъекта. Эта функция игнорирует идентификатор типа кодирования сообщений , содержащийся в высоком значении WORD .

Этот параметр может быть следующим определенным в настоящее время типом кодирования сертификата.

Значение Значение
X509_ASN_ENCODING
1 (0x1)
Задает кодировку сертификата X.509.

[in] dwSubjectType

Тип субъекта. Этот параметр может быть одним из следующих типов субъектов.

Значение Значение
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB
1 (0x1)
pvSubject — это указатель на структуру CRYPT_DATA_BLOB .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT
2 (0x2)
pvSubject — это указатель на структуру CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
3 (0x3)
pvSubject — это указатель на структуру CCRL_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE
4 (0x4)
pvSubject — это указатель на структуру OCSP_BASIC_SIGNED_RESPONSE_INFO .

Windows Server 2003 и Windows XP: Этот тип субъекта не поддерживается.

[in] pvSubject

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

[in] dwIssuerType

Тип издателя. Этот параметр может иметь один из следующих типов издателей.

Значение Значение
CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY
1 (0x1)
pvIssuer — это указатель на CERT_PUBLIC_KEY_INFO структуру.
CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
2 (0x2)
pvIssuer — это указатель на CCERT_CONTEXT структуру.
CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN
3 (0x3)
pvIssuer является указателем на CCERT_CHAIN_CONTEXT структуру.
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL
4 (0x4)
Значение pvIssuer должно иметь значение NULL.
 
Примечание Если dwIssuerType имеет CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL , а алгоритм сигнатуры является алгоритмом хэширования, сигнатура должна содержать только незашифрованные хэш-октеты. В этом случае нешифрованной сигнатуры можно указать только CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL . Если указан какой-либо другой dwIssuerType , проверка завершается ошибкой, и GetLastError возвращает E_INVALIDARG.
 

[in] pvIssuer

Указатель на структуру типа, обозначенную значением dwIssuerType. Структура содержит доступ к открытому ключу, необходимому для проверки подписи.

[in] dwFlags

Флаги, изменяющие поведение функции. Это может быть ноль или побитовое значение ИЛИ из следующих значений.

Значение Значение
CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG
0x00000001
Если этот флаг задан, а CryptVerifyCertificateSignatureEx обнаруживает алгоритм MD2 или MD4, функция возвращает значение FALSE и задает для GetLastErrorзначение NTE_BAD_ALGID. Подпись по-прежнему проверяется, но это сочетание ошибок позволяет вызывающему объекту, зная, что использовался алгоритм MD2 или MD4, чтобы решить, следует ли доверять или отклонить подпись.

Windows 8 и Windows Server 2012: Начнется поддержка этого флага.

CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG
0x00000002
Задает свойства строгой сигнатуры после успешной проверки для субъекта, на который указывает параметр pvSubject .

В контексте сертификата задается следующее свойство:

  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
В контексте списка отзыва сертификатов задаются следующие свойства:
  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
  • CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID
Примечание Этот флаг применим, только если CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL указан в параметре dwSubjectType .
 
Windows 8 и Windows Server 2012: Начнется поддержка этого флага.
CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG
0x00000004
Возвращает указатель на структуру CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO в параметре pvExtra . Структура содержит длину открытого ключа в битах и имена используемых алгоритмов подписывания и хэширования.

Чтобы освободить структуру, необходимо вызвать CryptMemFree . Если не удается выделить память для структуры CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO , эта функция возвращает успешно, но задает для параметра pvExtraзначение NULL.

Примечание Этот флаг применим, только если CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE указан в параметре dwSubjectType .
 
Windows 8 и Windows Server 2012: Начнется поддержка этого флага.

[in, out, optional] pvExtra

Указатель на CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO структуру, если параметру dwFlags присвоено значение CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG.

Чтобы освободить структуру, необходимо вызвать CryptMemFree .

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

Возвращает ненулевое значение в случае успешного выполнения или ноль в противном случае.

Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError.

Примечание В эту функцию могут распространяться ошибки из вызываемых функций CryptCreateHash, CryptImportKey, CryptVerifySignature и CryptHashData .
 
При сбое эта функция приведет к возврату следующих кодов ошибок из GetLastError.
Код возврата Описание
ERROR_FILE_NOT_FOUND
Недопустимый тип кодирования сертификата. В настоящее время поддерживается только X509_ASN_ENCODING .
NTE_BAD_ALGID
Идентификатор объекта (OID) алгоритма подписи не сопоставляет с известным или поддерживаемым хэш-алгоритмом.
NTE_BAD_SIGNATURE
Подпись недействительна.
 

В случае сбоя функции GetLastError может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.

Комментарии

Буфер субъекта может содержать закодированный BLOB-объект или контекст для сертификата или списка отзыва сертификатов. В случае контекста сертификата, если параметры открытого ключа сертификата отсутствуют и эти параметры могут быть унаследованы от издателя сертификата, например от параметра открытого ключа DSS, свойство CERT_PUBKEY_ALG_PARA_PROP_ID контекста обновляется параметрами алгоритма открытого ключа издателя для допустимой подписи.

Требования

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

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

CryptVerifyCertificateSignature