从Windows Server证书库加载服务器端证书*和*私钥?

时间:2015-05-08 08:43:01

标签: certificate x509certificate certificate-store

我正在尝试获取此外部REST Web服务,该服务需要服务器端证书和私钥(我从发布者那里获得了该服务的*.pem个文件。)

对于我的测试,我用Google搜索并找到了将这两个部分合并到*.pfx文件中的方法 - 从磁盘上的二进制文件加载X509Certificate2实例就可以了。

现在我试图将它放到我的生产Windows Server 2008上的Cert Store中。

我可以在我的C#代码中从证书商店获取X509Certificate2 - 没问题:

X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);

X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySerialNumber, "serial-number-here", false);

if (certs.Count > 0)
{
    X509Certificate2 cert = certs[0];

    // set the certificate on the RestClient to call my REST service
    _restClient.ClientCertificates.Add(cert);
}

store.Close();

但是当我这样做的时候,网络服务对我来说是谷歌,声称它需要一个“SSL证书”......

另外:当我从磁盘加载X509Certificate2时,我必须提供一个密码 - 这里不需要提供任何密码 - 从cert商店加载时...奇怪....

似乎即使我导入了包含服务器端证书和私钥的*.pfx,我也无法从证书存储中找回...

知道如何才能让它发挥作用吗?我是否需要在第二步中从证书存储区加载私钥?怎么样?

这些证书对我来说仍然是一个像伏都教一样大的神秘......谁能开导我?

1 个答案:

答案 0 :(得分:4)

要检查的第一件事是查看证书存储区是否具有私钥。

  1. 打开证书管理snappin并找到您的证书,双击它并确保它有红色突出显示的部分,如下图所示: enter image description here
  2. 接下来,如果私钥在商店中,那么访问证书的帐户可能没有私钥的权限。有两种方法可以检查:

    1. 在证书管理snappin中,右键单击证书>所有任务>管理私钥。 (您应该可以在这里检查和编辑权限)
    2. 在您的代码中,您可以访问PrivateKey属性(即Do var privateKey = cert.PrivateKey并查看是否将其恢复)。