Función CryptVerifyCertificateSignatureEx (wincrypt.h)

La función CryptVerifyCertificateSignatureEx comprueba la firma de un certificado de firmante, una lista de revocación de certificados, una solicitud de certificado o una solicitud keygen mediante la clave pública del emisor. La función no requiere acceso a una clave privada.

Sintaxis

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
);

Parámetros

[in] hCryptProv

Este parámetro no se usa y debe establecerse en NULL.

Windows Server 2003 y Windows XP: Identificador del proveedor de servicios criptográficos que se usa para comprobar la firma. El tipo de datos de este parámetro es HCRYPTPROV.

Null se pasa a menos que haya un motivo seguro para pasar un proveedor criptográfico específico. Pasar NULL hace que se adquiera el proveedor RSA o DSS predeterminado.

[in] dwCertEncodingType

Tipo de codificación de certificado que se usó para cifrar el asunto. Esta función omite el identificador de tipo de codificación de mensaje , contenido en el alto WORD de este valor.

Este parámetro puede ser el siguiente tipo de codificación de certificado definido actualmente.

Valor Significado
X509_ASN_ENCODING
1 (0x1)
Especifica la codificación de certificados X.509.

[in] dwSubjectType

Tipo de asunto. Este parámetro puede ser uno de los siguientes tipos de asunto.

Valor Significado
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB
1 (0x1)
pvSubject es un puntero a una estructura CRYPT_DATA_BLOB .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT
2 (0x2)
pvSubject es un puntero a una estructura CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
3 (0x3)
pvSubject es un puntero a una estructura CCRL_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE
4 (0x4)
pvSubject es un puntero a una estructura OCSP_BASIC_SIGNED_RESPONSE_INFO .

Windows Server 2003 y Windows XP: Este tipo de asunto no se admite.

[in] pvSubject

Puntero a una estructura del tipo indicado por dwSubjectType que contiene la firma que se va a comprobar.

[in] dwIssuerType

Tipo de emisor. Este parámetro puede ser uno de los siguientes tipos de emisor.

Valor Significado
CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY
1 (0x1)
pvIssuer es un puntero a una estructura de CERT_PUBLIC_KEY_INFO .
CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
2 (0x2)
pvIssuer es un puntero a una estructura de CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN
3 (0x3)
pvIssuer es un puntero a una estructura CCERT_CHAIN_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL
4 (0x4)
pvIssuer debe ser NULL.
 
Nota Si dwIssuerType es CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL y el algoritmo de firma es un algoritmo hash, se espera que la firma contenga solo octetos hash sin cifrar. Solo se pueden especificar CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL en este caso de firma sin cifrar. Si se especifica cualquier otro dwIssuerType , se produce un error en la comprobación y GetLastError devuelve E_INVALIDARG.
 

[in] pvIssuer

Puntero a una estructura del tipo indicado por el valor de dwIssuerType. La estructura contiene acceso a la clave pública necesaria para comprobar la firma.

[in] dwFlags

Marcas que modifican el comportamiento de la función. Puede ser cero o un OR bit a bit de los siguientes valores.

Valor Significado
CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG
0x00000001
Si establece esta marca y CryptVerifyCertificateSignatureEx detecta un algoritmo MD2 o MD4, la función devuelve FALSE y establece GetLastErroren NTE_BAD_ALGID. La firma todavía se comprueba, pero esta combinación de errores permite al autor de la llamada, sabiendo ahora que se usó un algoritmo MD2 o MD4, para decidir si confiar o rechazar la firma.

Windows 8 y Windows Server 2012: Comienza la compatibilidad con esta marca.

CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG
0x00000002
Establece propiedades de firma seguras, después de una comprobación correcta, en el asunto al que apunta el parámetro pvSubject .

La propiedad siguiente se establece en el contexto del certificado:

  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
Las siguientes propiedades se establecen en el contexto crL:
  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
  • CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID
Nota Esta marca solo es aplicable si se especifica CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL en el parámetro dwSubjectType .
 
Windows 8 y Windows Server 2012: Comienza la compatibilidad con esta marca.
CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG
0x00000004
Devuelve un puntero a una estructura de CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO en el parámetro pvExtra . La estructura contiene la longitud, en bits, de la clave pública y los nombres de los algoritmos de firma y hash usados.

Debe llamar a CryptMemFree para liberar la estructura. Si no se puede asignar memoria para la estructura de CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO , esta función devuelve correctamente, pero establece el parámetro pvExtra en NULL.

Nota Esta marca solo es aplicable si CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE se especifica en el parámetro dwSubjectType .
 
Windows 8 y Windows Server 2012: Comienza la compatibilidad con esta marca.

[in, out, optional] pvExtra

Puntero a una estructura de CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO si el parámetro dwFlags está establecido en CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG.

Debe llamar a CryptMemFree para liberar la estructura.

Valor devuelto

Devuelve un valor distinto de cero si es correcto o cero de lo contrario.

Para obtener información de error extendida, llame a GetLastError.

Nota Los errores de las funciones llamadas CryptCreateHash, CryptImportKey, CryptVerifySignature y CryptHashData se pueden propagar a esta función.
 
Si se produce un error, esta función hará que se devuelvan los siguientes códigos de error desde GetLastError.
Código devuelto Descripción
ERROR_FILE_NOT_FOUND
Tipo de codificación de certificado no válido. Actualmente solo se admite X509_ASN_ENCODING .
NTE_BAD_ALGID
El identificador de objeto (OID) del algoritmo de firma no se asigna a un algoritmo hash conocido o compatible.
NTE_BAD_SIGNATURE
La firma no era válida.
 

Si se produce un error en la función, GetLastError puede devolver un error de codificación y descodificación de sintaxis abstracta uno (ASN.1). Para obtener información sobre estos errores, vea Valores devueltos de codificación y descodificación de ASN.1.

Comentarios

El búfer de asunto puede contener un BLOB codificado o un contexto para un certificado o CRL. En el caso de un contexto de certificado, si faltan los parámetros de clave pública del certificado y si estos parámetros se pueden heredar del emisor del certificado, por ejemplo, del parámetro de clave pública de DSS, la propiedad CERT_PUBKEY_ALG_PARA_PROP_ID del contexto se actualiza con los parámetros del algoritmo de clave pública del emisor para una firma válida.

Requisitos

   
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

CryptVerifyCertificateSignature