Partager via


CryptRetrieveObjectByUrlA, fonction (wincrypt.h)

La fonction CryptRetrieveObjectByUrl récupère l’objet PKI (Public Key Infrastructure) à partir d’un emplacement spécifié par une URL.

Ces objets distants sont au format codé et sont récupérés dans un formulaire « context ».

Syntaxe

BOOL CryptRetrieveObjectByUrlA(
  [in]           LPCSTR                   pszUrl,
  [in]           LPCSTR                   pszObjectOid,
  [in]           DWORD                    dwRetrievalFlags,
  [in]           DWORD                    dwTimeout,
  [out]          LPVOID                   *ppvObject,
  [in]           HCRYPTASYNC              hAsyncRetrieve,
  [in, optional] PCRYPT_CREDENTIALS       pCredentials,
  [in, optional] LPVOID                   pvVerify,
  [in]           PCRYPT_RETRIEVE_AUX_INFO pAuxInfo
);

Paramètres

[in] pszUrl

Adresse d’un objet PKI à récupérer. Les schémas suivants sont pris en charge :

[in] pszObjectOid

Adresse d’une chaîne ANSI terminée par null qui identifie le type d’objet à récupérer. Il peut s’agir de l’une des valeurs suivantes.

Valeur Signification
NULL
BLOB
Récupérez une ou plusieurs blob de données. Les bits encodés sont retournés dans un tableau de objets blob. ppvObject est l’adresse d’un pointeur de structure CRYPT_BLOB_ARRAY qui reçoit le tableau BLOB. Lorsque cette structure n’est plus nécessaire, vous devez la libérer en passant l’adresse de cette structure à la fonction CryptMemFree.
CONTEXT_OID_CERTIFICATE
certificat
Récupérez un ou plusieurs certificats.

Si un objet unique est récupéré, ppvObject est l’adresse d’un pointeur de structure CERT_CONTEXT qui reçoit le contexte. Lorsque ce contexte n’est plus nécessaire, vous devez le libérer en passant le pointeur de structure CERT_CONTEXT à la fonction CertFreeCertificateContext.

Si plusieurs objets sont récupérés, ppvObject est l’adresse d’une variable HCERTSTORE qui reçoit le handle d’un magasin qui contient les certificats. Lorsque ce magasin n’est plus nécessaire, vous devez le fermer en passant ce handle à la fonction CertCloseStore.

CONTEXT_OID_CRL
LCR
Récupérez une ou plusieurs listes de révocation de certificats (CRL).

Si un objet unique est récupéré, ppvObject est l’adresse d’un pointeur de structure CRL_CONTEXT qui reçoit le contexte. Lorsque ce contexte n’est plus nécessaire, vous devez le libérer en passant le pointeur de structure CRL_CONTEXT à la fonction CertFreeCRLContext.

Si plusieurs objets sont récupérés, ppvObject est l’adresse d’une variable HCERTSTORE qui reçoit le handle d’un magasin qui contient les listes de révocation de certificats. Lorsque ce magasin n’est plus nécessaire, vous devez le fermer en passant ce handle à la fonction CertCloseStore.

CONTEXT_OID_CTL
Durée de vie
Récupérer une ou plusieurs listes d’approbation de certificats (CTL).

Si un objet unique est récupéré, ppvObject est l’adresse d’un pointeur de structure CTL_CONTEXT qui reçoit le contexte. Lorsque ce contexte n’est plus nécessaire, vous devez le libérer en passant le pointeur de structure CTL_CONTEXT à la fonction CertFreeCTLContext.

Si plusieurs objets sont récupérés, ppvObject est l’adresse d’une variable HCERTSTORE qui reçoit le handle d’un magasin qui contient les listes de contrôle d’accès partagé. Lorsque ce magasin n’est plus nécessaire, vous devez le fermer en passant ce handle à la fonction CertCloseStore.

CONTEXT_OID_PKCS7
PKCS7
ppvObject est l’adresse d’une variable HCERTSTORE qui reçoit le handle d’un magasin qui contient les objets du message. Lorsque ce magasin n’est plus nécessaire, vous devez le fermer en passant ce handle à la fonction CertCloseStore.
CONTEXT_OID_CAPI2_ANY
La fonction détermine l’élément approprié
ppvObject est l’adresse d’une variable HCERTSTORE qui reçoit le handle d’un magasin qui contient les objets. Lorsque ce magasin n’est plus nécessaire, vous devez le fermer en passant ce handle à la fonction CertCloseStore.
CONTEXT_OID_OCSP_RESP
Réponse OCSP
ppvObject est l’adresse d’un pointeur vers une structure CRYPT_BLOB_ARRAY.

[in] dwRetrievalFlags

Détermine s’il faut utiliser l’URL mise en cache ou une URL récupérée à partir de l’URL filaire. Le formulaire dans lequel les objets sont retournés est déterminé par la valeur de pszObjectOid.

Valeur Signification
CRYPT_AIA_RETRIEVAL
Valide le contenu récupéré par une URL filaire avant d’écrire l’URL dans le cache.

Le fournisseur par défaut ne prend pas en charge le protocole HTTPS pour les récupérations AIA.

CRYPT_ASYNC_RETRIEVAL
Cette valeur n’est pas prise en charge.
CRYPT_CACHE_ONLY_RETRIEVAL
Récupère les bits encodés du cache d’URL uniquement. N’utilisez pas le câble pour récupérer l’URL.
CRYPT_DONT_CACHE_RESULT
Ne stocke pas les bits encodés récupérés dans le cache d’URL. Si cet indicateur n’est pas défini, l’URL récupérée est mise en cache.
CRYPT_HTTP_POST_RETRIEVAL
Utilise la méthode POST au lieu de la méthode GET par défaut pour les récupérations HTTP.

Dans une URL POST, des données binaires et des chaînes d’en-tête supplémentaires sont ajoutées à l’URL de base au format suivant :

BaseURL/OptionalURLEscaped&Base64EncodedAdditionalData?OptionalAdditionalHTTPHeaders

L’exemple suivant montre les données binaires supplémentaires délimitées par la dernière barre oblique (/) et un en-tête Content-Type délimité par un point d’interrogation ( ?) ajouté à une URL de base.

http://ocsp.openvalidation.org/MEIwQDA%2BMDwwOjAJBgUrDgMCGgUABBQdKNEwjytjKBQADcgM61jfflNpyQQUv1NDgnjQnsOA5RtnygUA37lIg6UCAQI%3D?Content-Type: application/ocsp-request

Lorsque cet indicateur est défini, la fonction CryptRetrieveObjectByUrl analyse l’URL à l’aide du dernier point oblique (/) et des délimiteurs de point d’interrogation ( ?). La chaîne, qui est délimitée par une barre oblique (/), contient une URL non échapée (autrement dit, une URL de texte brut sans caractères d’échappement ni séquences d’échappement) et des données en base64 décodées sous forme binaire avant d’être passées au WinHttpSendRequest fonction en tant que paramètre lpOptional. La chaîne délimitée par un point d’interrogation ( ?) est transmise à la fonction WinHttpSendRequest en tant que paramètre pwszHeaders.

CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL
Effectue une recherche DNS A-Record uniquement sur la chaîne hôte fournie, ce qui empêche la génération de fausses requêtes DNS lors de la résolution des noms d’hôtes. Cet indicateur doit être utilisé lors du passage d’un nom d’hôte par opposition à un nom de domaine.
CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE
Récupère l’index d’entrée et le nom d’attribut pour chaque objet LDAP. Le début de chaque objet BLOB retourné contient la chaîne ANSI suivante :

« index d’entréeendécimale \0 nom d’attribut\0 »

Lorsque cet indicateur est défini, pszObjectOid doit être NULL afin qu’un objet BLOB soit retourné. Cet indicateur s’applique uniquement au schéma ldap.

CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL
Échoue si l’étendue de recherche LDAP n’est pas définie sur la base dans l’URL. Utiliser uniquement avec LDAP.
CRYPT_LDAP_SIGN_RETRIEVAL
Signe numériquement tout le trafic LDAP vers et depuis un serveur à l’aide du protocole d’authentification Kerberos. Cette fonctionnalité fournit l’intégrité requise par certaines applications.
CRYPT_NO_AUTH_RETRIEVAL
Empêche la gestion automatique de l’authentification.
CRYPT_NOT_MODIFIED_RETRIEVAL
Active une récupération d’URL HTTP conditionnelle. Lorsque cet indicateur est défini, pour une récupération conditionnelle qui retourne HTTP_STATUS_NOT_MODIFIED, CryptRetrieveObjectByUrl retourne TRUE et ppvObject est défini sur NULL. Si pAuxInfo n’est pas NULL, dwHttpStatusCode est défini sur HTTP_STATUS_NOT_MODIFIED. Sinon, ppvObject est mis à jour pour une récupération réussie.
CRYPT_OFFLINE_CHECK_RETRIEVAL
Effectue le suivi des défaillances hors connexion et des retards avant d’atteindre le fil lors des récupérations suivantes. Cette valeur est destinée à la récupération par câble uniquement.
CRYPT_PROXY_CACHE_RETRIEVAL
Active la récupération du cache proxy d’un objet. Si un cache proxy n’a pas été contourné explicitement, fProxyCacheRetrieval est défini sur TRUE dans pAuxInfo. Cette valeur s’applique uniquement aux récupérations d’URL HTTP.
CRYPT_RETRIEVE_MULTIPLE_OBJECTS
Récupère plusieurs objets s’ils sont disponibles. Tous les objets doivent être d’un type d’objet homogène, tel que déterminé par la valeur de pszObjectOid, sauf si la valeur d’identificateur d’objet (OID) est CONTEXT_OID_CAPI2_ANY.
CRYPT_STICKY_CACHE_RETRIEVAL
Étiquette l’URL comme étant exemptée d’être vidée du cache. Pour plus d’informations, consultez STICKY_CACHE_ENTRY dans INTERNET_CACHE_ENTRY_INFO.
CRYPT_VERIFY_CONTEXT_SIGNATURE
Acquiert la vérification de signature sur le contexte créé. Dans ce cas, pszObjectOid ne doit pas être NULL et pvVerify pointe vers le contexte du certificat du signataire.
CRYPT_VERIFY_DATA_HASH
Cet indicateur n’est pas implémenté. Ne l’utilisez pas.
CRYPT_WIRE_ONLY_RETRIEVAL
Récupère les bits encodés à partir du fil uniquement. N’utilise pas le cache d’URL.

[in] dwTimeout

Spécifie le nombre maximal de millisecondes à attendre pour la récupération. Si la valeur zéro est spécifiée, cette fonction n’expire pas. Ce paramètre n’est pas utilisé si le schéma d’URL est file:///.

[out] ppvObject

Adresse d’un pointeur vers l’objet retourné. Le type de retour peut être l’un des types pris en charge indiqués dans pszObjectOid.

[in] hAsyncRetrieve

Ce paramètre est réservé et doit être défini sur NULL.

[in, optional] pCredentials

Ce paramètre n’est pas utilisé.

[in, optional] pvVerify

Pointeur vers un objet de vérification. Cet objet est une fonction du paramètre dwRetrievalFlags. Il peut être NULL pour indiquer que l’appelant n’est pas intéressé par l’obtention du contexte de certificat ou de l’index du signataire si dwRetrievalFlags est CRYPT_VERIFY_CONTEXT_SIGNATURE.

[in] pAuxInfo

Pointeur facultatif vers une structure CRYPT_RETRIEVE_AUX_INFO. Si ce n’est pas NULL et si le cbSize membre de la structure est défini, ce paramètre retourne l’heure de la dernière récupération de câble réussie.

Valeur de retour

Si la fonction réussit, la valeur de retour est différente de zéro (TRUE).

Si la fonction échoue, la valeur de retour est égale à zéro (FALSE).

Remarques

Le gestionnaire de récupération d’objets distant expose deux modèles de fournisseur. Il s’agit du modèle de fournisseur de schémas qui autorise les fournisseurs de protocole installables tels que définis par le schéma d’URL, c’est-à-dire ldap, http, ftp ou fichier. Le point d’entrée du fournisseur de schémas est identique à la fonction CryptRetrieveObjectByUrl ; toutefois, le *ppvObject retourné est toujours un tableau compté de bits encodés (un par objet récupéré).

Le deuxième modèle de fournisseur est le modèle de fournisseur de contexte qui permet aux créateurs installables des handles de contexte (objets) en fonction des bits encodés récupérés. Celles-ci sont distribuées en fonction de l’identificateur d’objet (OID) spécifié dans l’appel à CryptRetrieveObjectByUrl.

Des objets PKI individuels tels que des certificats, des listes d’approbations, des listes de révocation, des messages PKCS #7 et plusieurs objets homogènes peuvent être récupérés. À compter de Windows Vista avec Service Pack 1 (SP1) et Windows Server 2008, la sécurité des récupérations « http : » et « ldap : » ont été renforcées. Cette fonction prend en charge les schémas d’URL « http : » et « ldap : » ainsi que les schémas nouvellement définis.

Windows XP : « ftp : » n’est pas pris en charge pour la récupération du réseau.

Remarque Par défaut, « file : » n’est pas pris en charge pour la récupération du réseau.
 

Note

L’en-tête wincrypt.h définit CryptRetrieveObjectByUrl comme alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Exigences

Exigence Valeur
client minimum pris en charge Windows XP [applications de bureau uniquement]
serveur minimum pris en charge Windows Server 2003 [applications de bureau uniquement]
plateforme cible Windows
d’en-tête wincrypt.h
bibliothèque Cryptnet.lib
DLL Cryptnet.dll

Voir aussi

CryptGetObjectUrl