PFXImportCertStore-Funktion (wincrypt.h)
Die PFXImportCertStore-Funktion importiert ein PFX-BLOB und gibt das Handle eines Speichers zurück, der Zertifikate und alle zugeordneten privaten Schlüssel enthält.
Syntax
HCERTSTORE PFXImportCertStore(
[in] CRYPT_DATA_BLOB *pPFX,
[in] LPCWSTR szPassword,
[in] DWORD dwFlags
);
Parameter
[in] pPFX
Ein Zeiger auf eine CRYPT_DATA_BLOB Struktur, die ein PFX-Paket mit den exportierten und verschlüsselten Zertifikaten und Schlüsseln enthält.
[in] szPassword
Ein Zeichenfolgenkennwort, das zum Entschlüsseln und Überprüfen des PFX-Pakets verwendet wird. Unabhängig davon, ob auf eine Zeichenfolge mit der Länge größer als 0 (null) oder auf eine leere Zeichenfolge oder auf NULL festgelegt ist, muss dieser Wert genau dem Wert entsprechen, der zum Verschlüsseln des Pakets verwendet wurde.
Wenn das PFX-Paket ab Windows 8 und Windows Server 2012 in der PFXExportCertStoreEx-Funktion mithilfe des PKCS12_PROTECT_TO_DOMAIN_SIDS-Flags erstellt wurde, versucht die FUNKTION PFXImportCertStore, das Kennwort mithilfe des Active Directory-Prinzipals (AD) zu entschlüsseln, der zum Verschlüsseln verwendet wurde. Der AD-Prinzipal wird im pvPara-Parameter angegeben. Wenn der szPassword-Parameter in der PFXExportCertStoreEx-Funktion eine leere Zeichenfolge oder NULL war und der dwFlags-Parameter auf PKCS12_PROTECT_TO_DOMAIN_SIDS festgelegt wurde, generierte diese Funktion zufällig ein Kennwort und verschlüsselte es mit dem im pvPara-Parameter angegebenen AD-Prinzipal . In diesem Fall sollten Sie das Kennwort auf den Wert (leere Zeichenfolge oder NULL) festlegen, der beim Erstellen des PFX-Pakets verwendet wurde. Die PFXImportCertStore-Funktion verwendet den AD-Prinzipal, um das zufällige Kennwort zu entschlüsseln, und das zufällig generierte Kennwort wird zum Entschlüsseln des PFX-Zertifikats verwendet.
Wenn Sie die Verwendung des Kennworts abgeschlossen haben, löschen Sie es aus dem Arbeitsspeicher, indem Sie die SecureZeroMemory-Funktion aufrufen. Weitere Informationen zum Schützen von Kennwörtern finden Sie unter Behandeln von Kennwörtern.
[in] dwFlags
Der dwFlags-Parameter kann einer der folgenden Werte sein:
Wert | Bedeutung |
---|---|
|
Importierte Schlüssel werden als exportierbar markiert. Wenn dieses Flag nicht verwendet wird, schlagen Aufrufe der CryptExportKey-Funktion mit dem Schlüsselhandle fehl. |
|
Der Benutzer muss über ein Dialogfeld oder eine andere Methode benachrichtigt werden, wenn bestimmte Versuche unternommen werden, diesen Schlüssel zu verwenden. Das genaue Verhalten wird vom verwendeten Kryptografiedienstanbieter (CSP ) angegeben.
Vor Internet Explorer 4.0 haben Die Kryptografiedienstanbieter von Microsoft dieses Flag ignoriert. Ab Internet Explorer 4.0 unterstützen Microsoft-Anbieter dieses Flag. Wenn der Anbieterkontext mit festgelegtem CRYPT_SILENT-Flag geöffnet wurde, verursacht die Verwendung dieses Flags einen Fehler, und der letzte Fehler wird auf NTE_SILENT_CONTEXT festgelegt. |
|
Die privaten Schlüssel werden auf dem lokalen Computer und nicht unter dem aktuellen Benutzer gespeichert. |
|
Die privaten Schlüssel werden unter dem aktuellen Benutzer und nicht auf dem lokalen Computer gespeichert, auch wenn das PFX-BLOB angibt, dass sie auf den lokalen Computer übertragen werden sollen. |
|
Gibt an, dass der CNG-Schlüsselspeicheranbieter (KSP) bevorzugt wird. Wenn der CSP in der PFX-Datei angegeben ist, wird der CSP verwendet, andernfalls wird der KSP bevorzugt. Wenn der CNG-KSP nicht verfügbar ist, schlägt die PFXImportCertStore-Funktion fehl.
Windows Server 2003 und Windows XP: Dieser Wert wird nicht unterstützt. |
|
Gibt an, dass der CNG-KSP immer verwendet wird. Wenn angegeben, versucht PFXImportCertStore , den CNG-KSP unabhängig von den Anbieterinformationen in der PFX-Datei zu verwenden. Wenn der CNG-KSP nicht verfügbar ist, schlägt der Import nicht fehl.
Windows Server 2003 und Windows XP: Dieser Wert wird nicht unterstützt. |
|
Überschreiben des vorhandenen Schlüssels zulassen. Geben Sie dieses Flag an, wenn ein Szenario auftritt, in dem Sie eine PFX-Datei importieren müssen, die einen bereits vorhandenen Schlüsselnamen enthält. Wenn Sie beispielsweise eine PFX-Datei importieren, ist es möglich, dass bereits ein Container mit demselben Namen vorhanden ist, da kein eindeutiger Namespace für Schlüsselcontainer vorhanden ist. Wenn Sie einen "TestKey" auf Ihrem Computer erstellt haben und dann eine PFX-Datei importieren, die auch "TestKey" als Schlüsselcontainer enthält, ermöglicht die einstellung PKCS12_ALLOW_OVERWRITE_KEY das Überschreiben des Schlüssels.
Windows Server 2003 und Windows XP: Dieser Wert wird nicht unterstützt. |
|
Speichern Sie den Schlüssel nicht. Geben Sie dieses Flag an, wenn Sie den Schlüssel nicht beibehalten möchten. Wenn es beispielsweise nicht erforderlich ist, den Schlüssel nach der Überprüfung zu speichern, können Sie dieses Flag angeben, um den Schlüssel sofort zu verwerfen, anstatt einen Container zu erstellen und ihn dann zu löschen.
Hinweis Wenn das PKCS12_NO_PERSIST_KEY-Flag *nicht* festgelegt ist, werden Schlüssel auf dem Datenträger beibehalten. Wenn Sie die Schlüssel nicht über ihre Verwendung hinaus beibehalten möchten, müssen Sie sie löschen, indem Sie die CryptAcquireContext-Funktion mit dem imdwFlags-Parameter festgelegten CRYPT_DELETEKEYSET-Flag aufrufen.
Hinweis Weitere Überlegungen:
|
|
Importieren Sie alle erweiterten Eigenschaften für das Zertifikat, die beim Exportieren im Zertifikat gespeichert wurden.
Windows Server 2003 und Windows XP: Dieser Wert wird nicht unterstützt. |
|
Entpacken Sie die Ergebnisse, aber nicht beibehalten. |
Rückgabewert
Wenn die Funktion erfolgreich ist, gibt die Funktion ein Handle an einen Zertifikatspeicher zurück, der die importierten Zertifikate enthält, einschließlich verfügbarer privater Schlüssel.
Wenn die Funktion fehlschlägt, d. h., wenn der Parameter password keine genaue Übereinstimmung mit dem Kennwort enthält, das zum Verschlüsseln des exportierten Pakets verwendet wurde, oder wenn andere Probleme beim Decodieren des PFX-BLOBs aufgetreten sind, gibt die Funktion NULL zurück, und ein Fehlercode kann durch Aufrufen der GetLastError-Funktion gefunden werden.
Hinweise
Die PFXImportCertStore-Funktion öffnet einen temporären Speicher. Wenn die Funktion erfolgreich ist, sollten Sie das Handle für den Speicher schließen, indem Sie die CertCloseStore-Funktion aufrufen.
Wenn Sie ein Zertifikat aus dem PFX-Paket importieren, Der CSP/KSP-Containername wird mithilfe der AttributeId mit OID 1.3.6.1.4.1.311.17.1 des PKCS8ShroudedKeyBag SafeBag [bagId: 1.2.840.113549.1.1.12.10.1.2( Ausführliche Informationen zur ASN.1-Struktur finden Sie unter PKCS #12 ).
- AttributeId: 1.3.6.1.4.1.311.17.1
- Wert: Der KSP-Name oder CSP-Name
Wenn die AttributeId nicht vorhanden ist und das PREFER_CNG-Flag übergeben wird, wird MS_KEY_STORAGE_PROVIDER ausgewählt. Wenn die AttributeId nicht vorhanden ist und das flag PREFER_CNG nicht übergeben wird, wird der Anbietername basierend auf dem Public Key-Algorithmus bestimmt (d. a. der Algorithmus für öffentliche Schlüssel wird vom AlgorithmIdentifier in PKCS #8 bestimmt):
- RSA: MS_ENHANCED_PROV_W
- DSA: MS_DEF_DSS_DH_PROV_W
Entsprechend wird die Schlüsselspezifikation wie folgt mithilfe der AttributeId mit OID 2.5.29.15 (szOID_KEY_USAGE) bestimmt:
Wenn ein CAPI-Schlüssel verwendet wird:
- Wenn KEY_ENCIPHERMENT oder DATA_ENCIPHERMENT festgelegt ist, wird die Schlüsselspezifikation auf AT_KEYEXCHANGE festgelegt.
- Wenn DIGITAL_SIGNATURE, CERT_SIGN oder CRL_SIGN festgelegt ist, wird die Schlüsselspezifikation auf AT_SIGNATURE festgelegt.
Wenn ein CNG-Schlüssel verwendet wird:
- Wenn KEY_ENCIPHERMENT, DATA_ENCIPHERMENT, ENCIPHER_ONLY oder DECIPHER_ONLY festgelegt ist, wird die ncrypt-Schlüsselverwendung auf ALLOW_DECRYPT festgelegt.
- Wenn DIGITAL_SIGNATURE, CERT_SIGN oder CRL_SIGN festgelegt ist, wird die Verwendung des ncrypt-Schlüssels auf ALLOW_SIGN festgelegt.
- Wenn KEY_AGREEMENT festgelegt ist, wird die ncrypt-Schlüsselverwendung auf ALLOW_KEY_AGREEMENT festgelegt.
Wenn die AttributeId nicht vorhanden ist, wird der CAPI-Schlüsselwert für RSA oder DH auf AT_KEYEXCHANGE festgelegt, und der Algorithmus wird vom AlgorithmIdentifier in PKCS #8 bestimmt. Andernfalls wird der Algorithmus auf AT_SIGNATURE festgelegt. Für den CNG-Schlüsselwert wird die gesamte Verwendung des ncrypt-Schlüssels festgelegt.
Hinweis
Wenn im PFX-Paket ein ungültiger Anbietername vorhanden ist oder der Basis- oder erweiterte Kryptografieanbieter in diesem Registrierungsschlüssel nicht vorhanden ist: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider, wird eine Anbietersuche vom Anbietertyp mithilfe des folgenden Registrierungsunterschlüssels ausgeführt: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider Types.
Microsoft unterstützt nur zwei Verschlüsselungs-/Hashalgorithmen für den Import einer PFX:
- TripleDES-SHA1
- AES256-SHA256
Für einen der oben genannten Algorithmen ist die Verschlüsselung der Zertifikate optional.
Microsoft kann über die All Tasks
>Yes, export the private key
Auswahl einen PFX aus einem Zertifikatspeicher exportieren. Dort können Sie den Verschlüsselungs-/Hashalgorithmus auswählen, um einer dieser beiden Optionen zu entsprechen.
Sie können PowerShell verwenden, um eine PFX über Folgendes zu exportieren:
Export-PfxCertificate
[-CryptoAlgorithmOption <CryptoAlgorithmOptions>]
-CryptoAlgorithmOption
gibt den Algorithmus zum Verschlüsseln privater Schlüssel in der PFX-Datei an. Wenn dieser Parameter nicht angegeben ist, ist TripleDES_SHA1
der Standardwert . Zulässige Werte für diesen Parameter:
Wert | BESCHREIBUNG |
---|---|
TripleDES_SHA1 |
Private Schlüssel werden in der PFX-Datei mit Triple DES-Verschlüsselung verschlüsselt. |
AES256_SHA256 |
Private Schlüssel werden in der PFX-Datei mit AES-256-Verschlüsselung verschlüsselt. |
OpenSSL unterstützt die beiden oben genannten Algorithmen über die folgenden Befehle:
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
Die folgenden Befehle entsprechen den beiden vorherigen Befehlen, verschlüsseln die Zertifikate jedoch nicht:
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
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [Desktop-Apps | UWP-Apps] |
Zielplattform | Windows |
Kopfzeile | wincrypt.h |
Bibliothek | Crypt32.lib |
DLL | Crypt32.dll |