Encryption CryptAcquireCertificatePrivateKey-创建访问证书的永久密钥容器

Encryption CryptAcquireCertificatePrivateKey-创建访问证书的永久密钥容器,encryption,cryptography,cryptoapi,pfx,Encryption,Cryptography,Cryptoapi,Pfx,如何使用PFX自签名证书中的cryptoAPI创建持久密钥容器 我可以通过CryptAcquireCertificatePrivateKey调用访问PFX中的私钥,但如何将私钥和公钥对导入密钥容器?完成导入过程后,此密钥容器应永久存在于用户密钥存储中 期待您的建议 谢谢一种方法是导入证书,以及与的密钥对 另一种理解方式可能很有趣。您可以将获得的与CryptAcquireCertificatePrivateKey相关的密钥对保存在任何新的密钥容器中。然后,您可以只导入证书(不导入私钥),最后您应该

如何使用PFX自签名证书中的
cryptoAPI
创建持久密钥容器

我可以通过
CryptAcquireCertificatePrivateKey
调用访问PFX中的私钥,但如何将私钥和公钥对导入密钥容器?完成导入过程后,此密钥容器应永久存在于用户密钥存储中

期待您的建议


谢谢

一种方法是导入证书,以及与的密钥对

另一种理解方式可能很有趣。您可以将获得的与
CryptAcquireCertificatePrivateKey
相关的密钥对保存在任何新的密钥容器中。然后,您可以只导入证书(不导入私钥),最后您应该将带有私钥的容器设置为证书的属性(带有
证书密钥\u PROV\u INFO\u PROP\u ID


在实践中,一个use always函数,但我建议您编写一个测试程序,查看将与证书一起保存在证书存储中的属性,但这些属性不是证书的一部分。

@Oleg-谢谢。在设置了CRYPT_KEY_PROV_INFO之后,我成功地导出了PFX。但是,当我使用向导导入相同的PFX时,它会创建自己的密钥容器名称,而不是我以前在导出时设置的名称?知道发生这种情况的原因吗。@Raj:如果导入PFX,将创建新容器(通常使用新的GUID),并且将设置certificate属性,使其指向新容器。容器上的名称并不重要。它不是证书或其私钥的一部分。因此,密钥容器的名称将不会在PFX中导出。@Oleg,因此,如果我想在导入时保留原始密钥容器名称,那么(在我的情况下,密钥容器名称将是证书主题名称),在导入之前设置结构CRYPT_key_PROV_INFO将保留原始密钥容器名称吗?Thanks@Raj:对不起,迟了回答。我没有玩太多的
PFXImportCertStore
,所有这些都是几年前的事:-)。看看哪个确实有效,但是密钥容器的确切行为你最好自己测试一下。@Oleg:谢谢你的回答。我将对此进行测试,并更新答案。当做