PFXExportCertStoreEx 函式 (wincrypt.h)

PFXExportCertStoreEx 函式會匯出憑證,如果有的話,其相關聯的私鑰會從參考的證書存儲導出。 此函式會取代較舊的 PfxExportCertStore 函式。 它應該用於其增強的私鑰安全性。 此函式所建立的 PFX BLOB 會受到密碼保護。

語法

BOOL PFXExportCertStoreEx(
  [in]      HCERTSTORE      hStore,
  [in, out] CRYPT_DATA_BLOB *pPFX,
  [in]      LPCWSTR         szPassword,
  [in]      void            *pvPara,
  [in]      DWORD           dwFlags
);

參數

[in] hStore

包含要匯出之憑證的證書存儲句柄。

[in, out] pPFX

包含具有導出憑證和密鑰之 PFX 封包 之CRYPT_DATA_BLOB 結構的指標。 如果 pPFX-pbData> 為 NULL,函式會計算編碼 BLOB 所需的位元元組數目,並在pPFX-cbData> 中傳回此位元元組數。 使用 pPFX-pbData> 呼叫函式時,指向所需大小的已配置緩衝區時,函式會將編碼的位元組複製到緩衝區,並使用編碼位元組長度更新pPFX-cbData>

[in] szPassword

用來加密和驗證 PFX 封包的字串密碼。 當您完成使用密碼時,請呼叫 SecureZeroMemory 函式,從記憶體中清除密碼。 如需保護密碼的詳細資訊,請參閱 處理密碼

[in] pvPara

如果 dwFlags 參數不包含PKCS12_PROTECT_TO_DOMAIN_SIDSPKCS12_EXPORT_PBES2_PARAMS,則此參數必須為 NULL。 在 Windows 8 和 Windows Server 2012 之前,此參數必須是 NULL

從 Windows 8 和 Windows Server 2012 開始,如果 dwFlags 參數包含 PKCS12_PROTECT_TO_DOMAIN_SIDS,您可以將 pvPara 參數設定為指向 NCRYPT_DESCRIPTOR_HANDLE 值,以識別 PFX 密碼將在 PFX BLOB 內保護哪些 Active Directory 主體。 目前,密碼可以保護至 Active Directory 使用者、計算機或群組。 如需保護描述項的詳細資訊,請參閱 NCryptCreateProtectionDescriptor

從 Windows 10 1709 (Fall Creators update) 和 Windows Server 2019 開始,如果 dwFlags 參數包含 PKCS12_EXPORT_PBES2_PARAMS,您應該將 pvPara 設定為 PKCS12_EXPORT_PBES2_PARAMS 值,以選取要使用的密碼型加密演算法。

[in] dwFlags

旗標值可以設定為下列任何組合。

意義
EXPORT_PRIVATE_KEYS
0x0004
私鑰會匯出以及憑證。
REPORT_NO_PRIVATE_KEY
0x0001
如果遇到沒有相關聯私鑰的憑證,函式會傳回 FALSE,並將最後一個錯誤設定為 CRYPT_E_NOT_FOUND 或 NTE_NO_KEY。
REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY
0x0002
如果遇到具有不可匯出私鑰的憑證,函式會傳回 FALSE,並將最後一個錯誤設定為NTE_BAD_KEY、NTE_BAD_KEY_STATE或NTE_PERM。
PKCS12_INCLUDE_EXTENDED_PROPERTIES
0x0010
匯出憑證上的所有擴充屬性。

Windows Server 2003 和 Windows XP: 不支援這個值。

PKCS12_PROTECT_TO_DOMAIN_SIDS
0x0020
PFX BLOB 包含內嵌密碼,該密碼會受到 pvPara 參數所指向的 Active Directory (AD) 保護描述元保護。 如果 szPassword 參數不是 NULL 或空白,則會保護指定的密碼。 不過,如果 szPassword 參數為 NULL 或空字串,則會建立並保護隨機的 40 (40) 字元密碼。

PFXImportCertStore 會使用指定的保護描述元來解密內嵌密碼,不論是由使用者指定還是隨機產生,然後使用密碼來解密 PFX BLOB。

Windows 8和 Windows Server 2012:開始支援此旗標。

PKCS12_EXPORT_PBES2_PARAMS
0x0080
使用傳遞為 pvPara之PKCS12_EXPORT_PBES2_PARAMS值所指定的傳遞複雜加密演演算法匯出。

Windows 10 1709 (Fall Creators update) 和 Windows Server 2019:開始支援此旗標。

傳回值

如果函式成功,則傳回 TRUE (非零) ,如果函式失敗,則傳回 FALSE (零) 。 如需擴充的錯誤資訊,請呼叫 GetLastError

備註

從 Windows 8 和 Windows Server 2012 開始,您可以將 PFX 密碼保護至 Active Directory 使用者、計算機或群組。 如果您選擇這麼做,但不要建立密碼,則會隨機選取暫時密碼。 密碼會使用 Active Directory 主體加密,然後內嵌在 PFX BLOB 中。 如需詳細資訊,請參閱 pvPara 參數和 PKCS12_PROTECT_TO_DOMAIN_SIDS 旗標。

從 Windows 10 1709 (Fall Creators update) 和 Windows Server 2019 開始,您可以使用下列登錄機碼來控制哈希函式在 PFXExportCertStoreEx 函式完成的密碼上反覆專案的數目。 此機碼中的值類型為 REG_DWORD

\ HKEY_LOCAL_MACHINE軟體\微軟\窗戶\CurrentVersion\PFX\PasswordIterationCount

規格需求

需求
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 wincrypt.h
程式庫 Crypt32.lib
Dll Crypt32.dll

另請參閱

PFXExportCertStore

PFXImportCertStore