2015-01-06 36 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) 想法? –

相关问题