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_SIDS或PKCS12_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
标志值可以设置为以下任意组合。
值 | 含义 |
---|---|
|
将导出私钥和证书。 |
|
如果遇到没有关联的私钥的证书,该函数将返回 FALSE,最后一个错误设置为 CRYPT_E_NOT_FOUND 或 NTE_NO_KEY。 |
|
如果遇到具有不可导出私钥的证书,该函数将返回 FALSE,最后一个错误设置为NTE_BAD_KEY、NTE_BAD_KEY_STATE或NTE_PERM。 |
|
导出证书上的所有扩展属性。
Windows Server 2003 和 Windows XP: 不支持此值。 |
|
PFX BLOB 包含一个嵌入的密码,该密码将保护到 由 pvPara 参数指向的 Active Directory (AD) 保护描述符。 如果 szPassword 参数不 为 NULL 或空,则指定的密码将受到保护。 但是,如果 szPassword 参数为 NULL 或空字符串,则会创建并保护一个随机 40 (40) 字符密码。
PFXImportCertStore 使用指定的保护描述符来解密嵌入的密码(无论是由用户指定还是随机生成),然后使用密码解密 PFX BLOB。 Windows 8和Windows Server 2012:开始支持此标志。 |
|
使用传递为 pvPara 的PKCS12_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 |