2011-04-18 78 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