2011-04-12 226 views
3

我試圖在C#測試控制檯應用程序中使用X509Certificate2類在本地計算機(Win Server 2003)上安裝證書。當我安裝證書用下面的代碼,一切都很好:從.pfx文件安裝證書時遇到問題

var serviceRuntimeMachineCertificateStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
serviceRuntimeMachineCertificateStore.Open(OpenFlags.ReadWrite); 
cert = new X509Certificate2(certificatePath); 
serviceRuntimeMachineCertificateStore.Add(cert); 
serviceRuntimeMachineCertificateStore.Close(); 

問題是,證書的私鑰不持久,當沒有安裝X509KeyStorageFlags.PersistKeySet。所以,我試圖實例化這樣的證書(私鑰沒有密碼,所以我傳遞一個空字符串):

var serviceRuntimeMachineCertificateStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
serviceRuntimeMachineCertificateStore.Open(OpenFlags.ReadWrite); 
cert = new X509Certificate2(certificatePath, "", X509KeyStorageFlags.PersistKeySet); 
serviceRuntimeMachineCertificateStore.Add(cert); 
serviceRuntimeMachineCertificateStore.Close(); 

但試圖實例化證書拋出一個System.Security.Cryptography.CryptographicException「失敗加載證書:指定的網絡密碼不正確「,即使私鑰沒有密碼。

如果我在Microsoft管理控制檯中導入證書而未指定密碼,則效果很好。

有沒有人知道如何以編程方式做到這一點?

回答

0

在任何情況下,我已經有類似的問題,也有類似的問題:我設法安裝證書並以另一種方式持久保存私鑰。我發現了WinHttpCertCfg命令行工具,您可以從這裏獲得:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winhttp/http/winhttpcertcfg_exe__a_certificate_configuration_tool.asp

然後我以編程方式調用此命令行工具來安裝證書。這個網站給了我如何使用它的提示:weblogs.asp.net/hernandl/archive/2005/02/09/…

乾杯,克里斯

0

你是從工作進程還是其他模擬進程執行它?可能只是您的流程使用的身份是在未加載身份用戶的配置文件的情況下初始化的,似乎導致無法訪問用戶的CERTIFICATION商店。

加載帶有私鑰的一個X509證書從ASP.Net/IIS理線之內時,並打開配置文件加載的工人加工的伎倆

3

如果您嘗試在Windows XP或Windows 2003的空口令創建X509Certificate2實例,「無法加載證書:指定的網絡密碼不正確。「異常將被拋出。

如果可以,請嘗試創建一個密碼不爲空的證書。那麼一切都應該沒問題。

+0

我在Windows XP SP3上遇到了同樣的問題,可以修復它被我們不帶密碼的X509Certificate2構造函數版本 – NineBerry 2013-12-12 15:29:14

0

希望這會幫助別人(以及對uGeeen的回答擴大:

User "S C"指出了在Windows XP和Windows Server證書的密碼以下要求2003年

0 < password.Length < 32 

我看到矛盾的報告關於是否允許32,我可以確認我使用的是32字符的密碼(一個MD5哈希),並將其截斷爲30個字符,修正了問題