PFXImportCertStore, fonction (wincrypt.h)
La fonction PFXImportCertStore importe un objet BLOB PFX et retourne le handle d’un magasin qui contient des certificats et toutes les clés privées associées.
Syntaxe
HCERTSTORE PFXImportCertStore(
[in] CRYPT_DATA_BLOB *pPFX,
[in] LPCWSTR szPassword,
[in] DWORD dwFlags
);
Paramètres
[in] pPFX
Pointeur vers une structure CRYPT_DATA_BLOB qui contient un paquet PFX avec les certificats et clés exportés et chiffrés.
[in] szPassword
Mot de passe de chaîne utilisé pour déchiffrer et vérifier le paquet PFX. Si elle est définie sur une chaîne de longueur supérieure à zéro ou définie sur une chaîne vide ou sur NULL, cette valeur doit être exactement la même que la valeur utilisée pour chiffrer le paquet.
À compter de Windows 8 et Windows Server 2012, si le paquet PFX a été créé dans la fonction PFXExportCertStoreEx à l’aide de l’indicateur PKCS12_PROTECT_TO_DOMAIN_SIDS, la fonction PFXImportCertStore tente de déchiffrer le mot de passe à l’aide du principal Active Directory (AD) utilisé pour le chiffrer. Le principal AD est spécifié dans le paramètre pvPara. Si le paramètre
Lorsque vous avez terminé d’utiliser le mot de passe, effacez-le de la mémoire en appelant la fonction SecureZeroMemory. Pour plus d’informations sur la protection des mots de passe, consultez Gestion des mots de passe.
[in] dwFlags
Le paramètre dwFlags peut être l’une des valeurs suivantes :
Valeur | Signification |
---|---|
|
Les clés importées sont marquées comme exportables. Si cet indicateur n’est pas utilisé, les appels à la fonction CryptExportKey avec le handle de clé échouent. |
|
L’utilisateur doit être averti par le biais d’une boîte de dialogue ou d’une autre méthode lorsque certaines tentatives d’utilisation de cette clé sont effectuées. Le comportement précis est spécifié par le fournisseur de services de chiffrement (CSP) utilisé.
Avant Internet Explorer 4.0, les fournisseurs de services de chiffrement Microsoft ont ignoré cet indicateur. À compter d’Internet Explorer 4.0, les fournisseurs Microsoft prennent en charge cet indicateur. Si le contexte du fournisseur a été ouvert avec l’indicateur de CRYPT_SILENT défini, l’utilisation de cet indicateur provoque un échec et la dernière erreur est définie sur NTE_SILENT_CONTEXT. |
|
Les clés privées sont stockées sous l’ordinateur local et non sous l’utilisateur actuel. |
|
Les clés privées sont stockées sous l’utilisateur actuel et non sous l’ordinateur local, même si l’objet BLOB PFX spécifie qu’ils doivent accéder à l’ordinateur local. |
|
Indique que le fournisseur de stockage de clés CNG (KSP) est préféré. Si le fournisseur de solutions Cloud est spécifié dans le fichier PFX, le fournisseur de solutions Cloud est utilisé ; sinon, le fournisseur de services clés est préféré. Si le KSP CNG n’est pas disponible, la fonction PFXImportCertStore échoue.
Windows Server 2003 et Windows XP : Cette valeur n’est pas prise en charge. |
|
Indique que le KSP CNG est toujours utilisé. Lorsqu’elle est spécifiée, PFXImportCertStore tente d’utiliser le KSP CNG, quelles que soient les informations du fournisseur dans le fichier PFX. Si le KSP CNG n’est pas disponible, l’importation ne échoue pas.
Windows Server 2003 et Windows XP : Cette valeur n’est pas prise en charge. |
|
Autoriser le remplacement de la clé existante. Spécifiez cet indicateur lorsque vous rencontrez un scénario dans lequel vous devez importer un fichier PFX qui contient un nom de clé qui existe déjà. Par exemple, lorsque vous importez un fichier PFX, il est possible qu’un conteneur du même nom soit déjà présent, car il n’existe aucun espace de noms unique pour les conteneurs de clés. Si vous avez créé un « TestKey » sur votre ordinateur, puis que vous importez un fichier PFX avec également « TestKey » comme conteneur de clés, le paramètre PKCS12_ALLOW_OVERWRITE_KEY permet le remplacement de la clé.
Windows Server 2003 et Windows XP : Cette valeur n’est pas prise en charge. |
|
Ne conservez pas la clé. Spécifiez cet indicateur lorsque vous ne souhaitez pas conserver la clé. Par exemple, s’il n’est pas nécessaire de stocker la clé après vérification, au lieu de créer un conteneur, puis de le supprimer, vous pouvez spécifier cet indicateur pour supprimer la clé immédiatement.
Remarque Si l’indicateur PKCS12_NO_PERSIST_KEY n’est pas* défini, les clés sont conservées sur le disque. Si vous ne souhaitez pas conserver les clés au-delà de leur utilisation, vous devez les supprimer en appelant la fonction CryptAcquireContext avec l’indicateur de CRYPT_DELETEKEYSET défini dans le paramètre dwFlags.
Remarque d’autres considérations :
|
|
Importez toutes les propriétés étendues sur le certificat qui ont été enregistrées sur le certificat lors de son exportation.
Windows Server 2003 et Windows XP : Cette valeur n’est pas prise en charge. |
|
Décompressez, mais ne conservez pas les résultats. |
Valeur de retour
Si la fonction réussit, la fonction retourne un handle à un magasin de certificats qui contient les certificats importés, y compris les clés privées disponibles.
Si la fonction échoue, autrement dit, si le paramètre de mot de passe ne contient pas de correspondance exacte avec le mot de passe utilisé pour chiffrer le paquet exporté ou s’il existe d’autres problèmes lors du décodage du blob PFX, la fonction retourne NULL et un code d’erreur est trouvé en appelant la fonction GetLastError.
Remarques
La fonction PFXImportCertStore ouvre un magasin temporaire. Si la fonction réussit, vous devez fermer le handle du magasin en appelant la fonction CertCloseStore.
Lorsque vous importez un certificat à partir du paquet PFX, Le nom du conteneur CSP/KSP est déterminé à l’aide de l’AttributeId avec OID 1.3.6.1.1.311.17.1 de l’élément PKCS8ShroudedKeyBag SafeBag [bagId : 1 .2.840.113549.1.12.10.1.2] (voir PKCS #12 pour plus d’informations sur la structure ASN.1 de cette structure).
- AttributeId : 1.3.6.1.4.1.311.17.1
- valeur : nom du fournisseur de services clés ou du fournisseur de solutions cloud
Si l’AttributeId n’est pas présent et que l’indicateur PREFER_CNG est passé, MS_KEY_STORAGE_PROVIDER est sélectionné. Si l’AttributeId n’est pas présent et que l’indicateur PREFER_CNG n’est pas passé, le nom du fournisseur est déterminé en fonction de l’algorithme de clé publique (autrement dit, l’algorithme de clé publique est déterminé par AlgorithmIdentifier dans PKCS #8) :
- RSA : MS_ENHANCED_PROV_W
- DSA : MS_DEF_DSS_DH_PROV_W
De même, la spécification de clé est déterminée à l’aide de l’AttributeId avec OID 2.5.29.15 (szOID_KEY_USAGE) comme suit :
Si une clé CAPI est utilisée :
- Si KEY_ENCIPHERMENT ou DATA_ENCIPHERMENT est défini, la spécification de clé est définie sur AT_KEYEXCHANGE.
- Si DIGITAL_SIGNATURE ou CERT_SIGN ou CRL_SIGN est défini, la spécification clé est définie sur AT_SIGNATURE.
Si une clé CNG est utilisée :
- Si KEY_ENCIPHERMENT ou DATA_ENCIPHERMENT ou ENCIPHER_ONLY ou DECIPHER_ONLY est défini, l’utilisation de la clé ncrypt est définie sur ALLOW_DECRYPT.
- Si DIGITAL_SIGNATURE ou CERT_SIGN ou CRL_SIGN est défini, l’utilisation de la clé ncrypt est définie sur ALLOW_SIGN.
- Si KEY_AGREEMENT est définie, l’utilisation de la clé ncrypt est définie sur ALLOW_KEY_AGREEMENT.
Si l’AttributeId n’est pas présent, la valeur de clé CAPI est définie sur AT_KEYEXCHANGE pour RSA ou DH et l’algorithme est déterminé par AlgorithmIdentifier dans PKCS #8 ; sinon, l’algorithme est défini sur AT_SIGNATURE. Pour la valeur de clé CNG, l’utilisation de toutes les clés ncrypt est définie.
Note
Si un nom de fournisseur non valide est présent dans le paquet PFX, ou si le fournisseur de chiffrement de base ou amélioré n’est pas présent dans cette clé de Registre : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider, une recherche de fournisseur est effectuée par le type de fournisseur à l’aide de cette sous-clé de Registre : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider Types.
Microsoft prend uniquement en charge deux algorithmes de chiffrement/hachage pour l’importation d’un PFX :
- TripleDES-SHA1
- AES256-SHA256
Pour l’un des algorithmes ci-dessus, le chiffrement des certificats est facultatif.
Microsoft peut exporter un PFX à partir d’un magasin de certificats via la sélection All Tasks
>Yes, export the private key
. Vous pouvez sélectionner l’algorithme de chiffrement/hachage pour qu’il corresponde à l’un de ces deux choix.
Vous pouvez utiliser PowerShell pour exporter un PFX via les éléments suivants :
Export-PfxCertificate
[-CryptoAlgorithmOption <CryptoAlgorithmOptions>]
-CryptoAlgorithmOption
spécifie l’algorithme permettant de chiffrer des clés privées dans le fichier PFX. Si ce paramètre n’est pas spécifié, la valeur par défaut est TripleDES_SHA1
. Les valeurs acceptables pour ce paramètre sont les suivantes :
Valeur | Description |
---|---|
TripleDES_SHA1 |
Les clés privées seront chiffrées dans le fichier PFX à l’aide du chiffrement Triple DES. |
AES256_SHA256 |
Les clés privées seront chiffrées dans le fichier PFX à l’aide du chiffrement AES-256. |
OpenSSL prend en charge les deux algorithmes ci-dessus via les commandes suivantes :
openssl pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -in in.pem -export -out out.pfx -password file:password.txt -passin file:password.txt
openssl pkcs12 -keypbe AES-256-CBC -certpbe AES-256-CBC -macalg sha256 -in in.pem -export -out out.pfx -password file:password.txt -passin file:password.txt
Les commandes suivantes sont équivalentes aux deux précédentes, mais elles ne chiffrent pas les certificats :
openssl pkcs12 -keypbe PBE-SHA1-3DES -certpbe NONE -in in.pem -export -out out.pfx -password file:password.txt -passin file:password.txt
openssl pkcs12 -keypbe AES-256-CBC -certpbe NONE -macalg sha256 -in in.pem -export -out out.pfx -password file:password.txt -passin file:password.txt
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows XP [applications de bureau | Applications UWP] |
serveur minimum pris en charge | Windows Server 2003 [applications de bureau | Applications UWP] |
plateforme cible | Windows |
d’en-tête | wincrypt.h |
bibliothèque | Crypt32.lib |
DLL | Crypt32.dll |