以编程方式使用私钥导入证书

时间:2009-05-01 16:31:21

标签: c# .net ssl ssl-certificate

我正在尝试在C#应用程序中使用HttpListener类,让迷你网络服务器通过SSL提供内容。为此,我需要使用httpcfg工具。我有一个带有公钥和私钥对的.pfx文件。如果我使用mmc手动将此密钥对导入本地机器商店,一切正常。但是,如果我使用X509Store类以编程方式导入此密钥对,则无法连接到我的迷你网络服务器。请注意,在这两种方法中,证书都会导入到LocalMachine中的MY商店。奇怪的是,一旦我以编程方式导入证书,我就可以在mmc中查看证书,当我查看它时,UI表明私钥也可用于此证书。

深入挖掘,我注意到当我手动导入密钥对时,我可以看到C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys中出现了一个新文件,但是当我以编程方式导入时,没有一个文件出现。在相关的说明中,当我删除手动导入的证书时,它不会从前面提到的目录中删除相应的私钥文件。

最终,我的问题是:当我以编程方式将证书添加到商店时,存储的私钥在哪里以及为什么HttpListener类(HttpApi)无法访问它?

请注意,这个问题略有关联,但我不认为权限是问题,因为这一切都是作为同一个Windows用户完成的: How to set read permission on the private key file of X.509 certificate from .NET

3 个答案:

答案 0 :(得分:28)

好的,我明白了。它与证书对象的密钥存储参数有关。对于遇到此问题的其他任何人,请确保使用X509Certificate2X509KeyStorageFlags.PersistKeySet标记构建要添加到商店的X509KeyStorageFlags.MachineKeySet个对象。这将强制私钥保留在HttpApi所需的机器密钥集位置(HttpListener包装此内容)。

答案 1 :(得分:0)

这是双向SSL吗?如果是,那么您是否通过机器上生成的SSL证书申请文件发送?此证书申请文件将用于创建SSL,它们一起形成公共私钥对。

您是否也尝试为用于运行Web应用程序的用户帐户分配证书权限?您可以使用Microsoft WSE 3.0工具执行此操作。

答案 2 :(得分:0)

不完全是你的问题的答案,但这里是其他人的参考:

Here是MS聊天的链接,它提供了样本C#代码来执行httpcfg所做的事情,因此无需部署该工具。

相关问题