2011-04-18 189 views

回答

2

一种方法是导入证书和密钥对尊重PFXImportCertStore

另一种可能对理解有趣的方式。您可以将您在CryptAcquireCertificatePrivateKey方面获得的密钥对保存在任何新的密钥容器中。然后,您只能导入证书(不带私钥),最后应该使用私钥将容器设置为证书的属性(CertSetCertificateContextPropertyCERT_KEY_PROV_INFO_PROP_ID)。

在实践中,人们总是使用PFXImportCertStore功能,但我建议你写一个测试程序,你CertEnumCertificateContextProperties,看看这将连同在证书库中保存的特性,但它们是一证书的一部分。

+0

@ Oleg-谢谢。在设置CRYPT_KEY_PROV_INFO后,我成功地导出了PFX。但是当我使用向导导入相同的PFX时,它会创建一个自己的密钥容器名称,而不是我以前在导出时设置的密钥容器名称?任何想法为什么发生这种情况。 – Raj 2011-05-11 11:40:42

+1

@Raj:如果您导入PFX,将创建新的容器(通常会使用新的GUID),并且证书属性将设置为使其指向新的容器。容器上的名称并不重要。它不是证书或其私钥的一部分。所以密钥容器的名称将不会在PFX中导出。 – Oleg 2011-05-11 11:47:27

+0

@Oleg,所以如果我想保留原始密钥容器名称,当我要导入,编程(在我的情况下,密钥容器名称将证书主题名称),将导入前设置结构CRYPT_KEY_PROV_INFO将保留原始关键容器名称?谢谢 – Raj 2011-05-11 13:02:58