2015-01-06 34 views
0

我是2WaySSL的新手。將私鑰添加到X509Certificate2 - C#

我想要做的事:

1. Retrieve a Client certificate which is stored in a certificate store, 
I'm managing to do that by such code: 



certificates = store.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, false); 

當安裝證書請求,由服務器驗證失敗, 因爲我的證書對象不包含私鑰。

我試圖找到一種將私鑰與證書相關聯的方式(在C#中), 一旦我將從存儲它的位置檢索密鑰。

類似:

certificate.PrivateKey = key; 

但是我發現無論是啓動的主要對象,或沒有得到一些例外,將其分配給該證書的沒有簡單的方法,即使關鍵是空的,我得到一個拒絕訪問異常。

任何幫助,尤其是後面的代碼示例,將不勝感激。

回答

0

您有2個選項,方便

  • 用私有密鑰(通常是一個PFX文件)證書存儲進口證明。然後store.Certificates.Find將用私鑰檢索證書。
  • 加載PFX文件爲X509Certificate2 istance其構造new X509Certificate2(pfx_filename, password_to_pfx)
+0

感謝您迴應之一。 關於PFX文件, 如果它包含密碼, 這是不是表示任何能夠訪問該文件的人都獲取密碼? 不應將密碼存儲在別處,而不要存儲在證書文件中? –

+0

pfx文件中的私鑰使用此密碼進行保護。密碼本身不是文件的一部分。但是,如果使用pfx文件,則可以將文件複製到其他地方(如果有人可以訪問文件系統)並嘗試通過暴力猜測密碼。我更喜歡使用證書存儲。當安全性是主要優先級時,我使用HSM來存儲私鑰(或智能卡),但證書仍在證書存儲中。 – pepo

+0

我一定錯過了一些東西。 我打開證書管理單元(使用mmc),訪問相關證書存儲並查看證書。 找到序列號後,在詳細信息選項卡中,我使用以下代碼: certificates = store.Certificates.Find(X509FindType.FindBySerialNumber,serialNumber,false); 現在我有權訪問證書及其私鑰,使用: 證書[0] .PrivateKey.ToXmlString(false) 想法? –

相關問題