2013-04-29 61 views
0

我使用下面的代碼安裝PFX文件(密碼和證書路徑傳遞到方法):問題從C#代碼安裝X509Certificate2

X509Certificate2 cert = password != string.Empty ? new X509Certificate2(certPath, password) : new X509Certificate2(certPath); 
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadWrite); 
store.Add(cert); 
store.Close(); 

在某些情況下這個工作,但在其他環境中,它失敗每次。不會引發異常,但是當我加載mmc.exe並添加證書管理單元時,證書似乎沒有正確安裝。它顯示在正確的商店下,但是當我右鍵單擊證書並進入「所有任務」>「管理私鑰」時,它會加載一個對話框,顯示「未找到對象」。在事件查看器中沒有任何記錄,並且逐步執行它看起來正確執行的代碼。

FindPrivateKey.exe也無法找到密鑰。

什麼可能導致此證書無法在某些似乎與其工作環境相同的機器上運行?

從證書管理單元中刪除密鑰並重新導入它可以正常工作,但是我需要它從C#代碼中可靠地工作。


編輯 - 我要補充一點,這是失敗的證書有密碼,這意味着的第一行代碼實際上是:

X509Certificate2 cert = new X509Certificate2(certPath, password); 
+0

什麼機器之間的區別,它重複失敗? – Jodrell 2013-04-29 10:38:57

+0

我無法確定它所運行的機器和它所發生故障的機器之間的差異。它可以在100%的時間內工作或失敗。 (我已經編輯了標題爲我的話間歇被誤導)。 – psych 2013-04-29 10:44:42

+0

必須有一定的差異,希望有人之前已經發現了它。 – Jodrell 2013-04-29 10:52:26

回答

3

您是否嘗試過加入X509KeyStorageFlags?

new X509Certificate2(certPath, password, X509KeyStorageFlags.PersistKeySet); 

編輯:對於這個問題的實際答案可以在此KB文章中找到:http://support.microsoft.com/kb/950090

當證書使用x509證書或X509Certificate2類安裝,X509證書/ X509Certificate2默認情況下會創建一個臨時容器來導入私鑰。私鑰在不再有對私鑰的引用時被刪除。