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

指向 CRYPT_DATA_BLOB 结构的指针,用于包含带有导出证书和密钥的 PFX 数据包。 如果 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 更新) 和 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
使用传递为 pvParaPKCS12_EXPORT_PBES2_PARAMS值指定的基于 passowrd 的加密算法进行导出。

Windows 10 1709 (Fall Creators 更新) 和 Windows Server 2019:开始支持此标志。

返回值

如果函数成功,则返回 TRUE (非零) ;如果函数失败,则返回 FALSE (零) 。 有关扩展的错误信息,请调用 GetLastError

注解

从Windows 8和Windows Server 2012开始,可以保护 Active Directory 用户、计算机或组的 PFX 密码。 如果选择这样做,但不创建密码,则会随机选择临时密码。 密码使用 Active Directory 主体进行加密,然后嵌入 PFX BLOB 中。 有关详细信息,请参阅 pvPara 参数和 PKCS12_PROTECT_TO_DOMAIN_SIDS 标志。

从 Windows 10 1709 (Fall Creators 更新) 和 Windows Server 2019 开始,可以使用以下注册表项控制通过 PFXExportCertStoreEx 函数完成的密码的哈希函数迭代次数。 此键中的值的类型为 REG_DWORD

\ HKEY_LOCAL_MACHINE软件\微软\窗户\CurrentVersion\PFX\PasswordIterationCount

要求

要求
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 wincrypt.h
Library Crypt32.lib
DLL Crypt32.dll

另请参阅

PFXExportCertStore

PFXImportCertStore