Certificate 是否从Windows server证书存储加载服务器端证书*和*私钥?

Certificate 是否从Windows server证书存储加载服务器端证书*和*私钥?,certificate,x509certificate,certificate-store,Certificate,X509certificate,Certificate Store,我正在尝试获取这个外部REST Web服务,它需要一个服务器端证书和一个私钥(这两个密钥我都是作为该服务的*.pem文件从发布者那里获得的) 为了进行测试,我在谷歌上搜索并找到了一种方法,可以将这两部分组合成一个*.pfx文件,然后从磁盘上的二进制文件加载一个X509Certificate2实例就可以了 现在,我正试图将其放入我的Windows Server 2008产品上的Cert Store中 我可以从我的C#code中的cert store获得X509Certificate2-没问题: X

我正在尝试获取这个外部REST Web服务,它需要一个服务器端证书和一个私钥(这两个密钥我都是作为该服务的
*.pem
文件从发布者那里获得的)

为了进行测试,我在谷歌上搜索并找到了一种方法,可以将这两部分组合成一个
*.pfx
文件,然后从磁盘上的二进制文件加载一个
X509Certificate2
实例就可以了

现在,我正试图将其放入我的Windows Server 2008产品上的Cert Store中

我可以从我的C#code中的cert store获得
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();
但当我这么做的时候,web服务就会向我吐口水,声称它需要一个“SSL证书”

另外:当我从磁盘加载
X509Certificate2
时,从
*.pfx
文件中,我必须提供密码-从证书存储加载时,此处无需提供任何信息。。。。奇怪

似乎即使我导入了同时包含服务器端证书和我们的私钥的
*.pfx
,但不知何故,我无法从证书存储中同时获取这两个证书

你知道我该怎么做吗?我是否需要在第二步中从证书存储加载私钥?怎么做


这些证书对我来说仍然是一个很大的巫毒般的谜。。。。。有人能告诉我吗?

首先要检查的是证书存储是否有私钥

  • 打开证书管理snappin并找到您的证书,双击它并确保它具有如下图所示的红色突出显示部分:
  • 接下来,如果私钥在存储中,那么访问证书的帐户可能没有私钥的权限。有两种方法可以检查这一点:

  • 在证书管理snappin中,右键单击证书>所有任务>管理私钥。(您应该能够在此处检查和编辑权限)
  • 在您的代码中,您可以访问PrivateKey属性(即Do var PrivateKey=cert.PrivateKey,并查看是否将其取回)

  • 您没有写web服务是如何实现的

  • 如果它部署在IIS上
  • 如果它是自托管的
  • 从应用商店获取证书的代码是正确的。问题是您在哪里导入了pfx-CurrentUser或LocalMachine存储。您在代码示例中使用的是CurrentUser store。如果将证书导入到LocalMachine存储,将找不到该证书。另外,请在X509Store的构造函数中指定存储名称-StoreName.My(在MMC或certmgr.msc中,它表示个人)(可能是默认值,但谁知道所有默认值:)

    但当我这么做的时候,web服务就会向我吐,并声称这是真的 需要“SSL证书”

    您需要确保在证书的扩展密钥使用中具有
    客户端身份验证

    另外:当我从磁盘加载X509Certificate2时 *.pfx文件,我必须提供密码-从证书存储加载时,此处无需提供任何信息。。。。奇怪

    这就是它的工作原理。当您拥有pfx时,其中的私钥将使用密码进行保护/加密(密码可以是空字符串)。当您将pfx导入证书存储时,私钥将使用其他密钥进行安全/加密(不完全确定它是什么密钥)。但是,您可以通过在将pfx导入存储时指定强保护来为私钥添加另一级别的保护(我不建议将其与ASP.NET、web服务或任何没有桌面的设备一起使用)。但是,当您的个人证书用于签署电子邮件时,启用它可能会很好。当应用程序试图使用私钥时,Windows将弹出一个窗口

    @DanL关于私钥和他的密码的权利可能是正确的

    1) -设置私钥和密钥的权限

    2) -访问X509Certificate2中的私钥

    你写得很好。我只想添加到1)您正试图从ASP.NET应用程序或IIS上的其他web服务连接到REST服务,那么您需要为其添加权限的帐户名为IIS APPPOOL\name\u of the_APPPOOL\u您的应用程序运行在