Fonction CryptVerifyCertificateSignatureEx (wincrypt.h)

La fonction CryptVerifyCertificateSignatureEx vérifie la signature d’un certificat d’objet, une liste de révocation de certificat, une demande de certificat ou une demande keygen à l’aide de la clé publique de l’émetteur. La fonction ne nécessite pas d’accès à une clé privée.

Syntaxe

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

Paramètres

[in] hCryptProv

Ce paramètre n’est pas utilisé et doit être défini sur NULL.

Windows Server 2003 et Windows XP : Handle du fournisseur de services de chiffrement utilisé pour vérifier la signature. Le type de données de ce paramètre est HCRYPTPROV.

La valeur NULL est transmise, sauf s’il existe une raison forte de passer un fournisseur de chiffrement spécifique. La transmission de la valeur NULL entraîne l’acquisition du fournisseur RSA ou DSS par défaut.

[in] dwCertEncodingType

Type d’encodage de certificat utilisé pour chiffrer l’objet. L’identificateur de type d’encodage de message, contenu dans le mot élevé de cette valeur, est ignoré par cette fonction.

Ce paramètre peut être le type d’encodage de certificat actuellement défini ci-dessous.

Valeur Signification
X509_ASN_ENCODING
1 (0x1)
Spécifie l’encodage du certificat X.509.

[in] dwSubjectType

Type d’objet. Ce paramètre peut être l’un des types de sujets suivants.

Valeur Signification
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB
1 (0x1)
pvSubject est un pointeur vers une structure CRYPT_DATA_BLOB .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT
2 (0x2)
pvSubject est un pointeur vers une structure CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
3 (0x3)
pvSubject est un pointeur vers une structure CCRL_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE
4 (0x4)
pvSubject est un pointeur vers une structure OCSP_BASIC_SIGNED_RESPONSE_INFO .

Windows Server 2003 et Windows XP : Ce type de sujet n’est pas pris en charge.

[in] pvSubject

Pointeur vers une structure du type indiqué par dwSubjectType qui contient la signature à vérifier.

[in] dwIssuerType

Type d’émetteur. Ce paramètre peut être l’un des types d’émetteurs suivants.

Valeur Signification
CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY
1 (0x1)
pvIssuer est un pointeur vers une structure CERT_PUBLIC_KEY_INFO .
CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
2 (0x2)
pvIssuer est un pointeur vers une structure CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN
3 (0x3)
pvIssuer est un pointeur vers une structure CCERT_CHAIN_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL
4 (0x4)
pvIssuer doit avoir la valeur NULL.
 
Note Si dwIssuerType est CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL et que l’algorithme de signature est un algorithme de hachage, la signature doit contenir uniquement des octets de hachage non chiffrés. Seules CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL peuvent être spécifiées dans ce cas de signature non chiffré. Si un autre dwIssuerType est spécifié, la vérification échoue et GetLastError retourne E_INVALIDARG.
 

[in] pvIssuer

Pointeur vers une structure du type indiqué par la valeur de dwIssuerType. La structure contient l’accès à la clé publique nécessaire pour vérifier la signature.

[in] dwFlags

Indicateurs qui modifient le comportement de la fonction. Il peut s’agir de zéro ou d’un OR au niveau du bit des valeurs suivantes.

Valeur Signification
CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG
0x00000001
Si vous définissez cet indicateur et que CryptVerifyCertificateSignatureEx détecte un algorithme MD2 ou MD4, la fonction retourne FALSE et définit GetLastError sur NTE_BAD_ALGID. La signature est toujours vérifiée, mais cette combinaison d’erreurs permet à l’appelant, sachant maintenant qu’un algorithme MD2 ou MD4 a été utilisé, de décider s’il faut approuver ou rejeter la signature.

Windows 8 et Windows Server 2012 : La prise en charge de cet indicateur commence.

CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG
0x00000002
Définit des propriétés de signature forte, après vérification réussie, sur le sujet pointé par le paramètre pvSubject .

La propriété suivante est définie sur le contexte du certificat :

  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
Les propriétés suivantes sont définies dans le contexte de la liste de révocation de certificats :
  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
  • CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID
Note Cet indicateur s’applique uniquement si CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL est spécifié dans le paramètre dwSubjectType .
 
Windows 8 et Windows Server 2012 : La prise en charge de cet indicateur commence.
CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG
0x00000004
Retourne un pointeur vers une structure CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO dans le paramètre pvExtra . La structure contient la longueur, en bits, de la clé publique et les noms des algorithmes de signature et de hachage utilisés.

Vous devez appeler CryptMemFree pour libérer la structure. Si la mémoire ne peut pas être allouée pour la structure CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO , cette fonction retourne correctement, mais définit le paramètre pvExtra sur NULL.

Note Cet indicateur s’applique uniquement si CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE est spécifié dans le paramètre dwSubjectType .
 
Windows 8 et Windows Server 2012 : La prise en charge de cet indicateur commence.

[in, out, optional] pvExtra

Pointeur vers une structure CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO si le paramètre dwFlags est défini sur CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG.

Vous devez appeler CryptMemFree pour libérer la structure.

Valeur retournée

Retourne une valeur différente de zéro en cas de réussite ou de zéro dans le cas contraire.

Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Note Les erreurs des fonctions appelées CryptCreateHash, CryptImportKey, CryptVerifySignature et CryptHashData peuvent être propagées à cette fonction.
 
En cas d’échec, cette fonction entraîne le retour des codes d’erreur suivants à partir de GetLastError.
Code de retour Description
ERROR_FILE_NOT_FOUND
Type d’encodage de certificat non valide. Actuellement, seul X509_ASN_ENCODING est pris en charge.
NTE_BAD_ALGID
L’identificateur d’objet (OID) de l’algorithme de signature ne correspond pas à un algorithme de hachage connu ou pris en charge.
NTE_BAD_SIGNATURE
La signature n’était pas valide.
 

Si la fonction échoue, GetLastError peut renvoyer une erreur d’encodage/décodage asN.1 ( Abstract Syntax Notation One ). Pour plus d’informations sur ces erreurs, consultez Valeurs de retour d’encodage/décodage ASN.1.

Remarques

La mémoire tampon d’objet peut contenir un objet BLOB encodé ou un contexte pour un certificat ou une liste de révocation de certificats. Dans le cas d’un contexte de certificat, si les paramètres de clé publique du certificat sont manquants et si ces paramètres peuvent être hérités de l’émetteur du certificat, par exemple du paramètre de clé publique DSS, la propriété CERT_PUBKEY_ALG_PARA_PROP_ID du contexte est mise à jour avec les paramètres de l’algorithme de clé publique de l’émetteur pour une signature valide.

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête wincrypt.h
Bibliothèque Crypt32.lib
DLL Crypt32.dll

Voir aussi

CryptVerifyCertificateSignature