我正在尝试在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用户完成的: 如何从.NET

设置X.509证书的私钥文件的读取权限
有帮助吗?

解决方案

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

其他提示

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

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

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

此处是MS聊天的链接,提供示例用于执行httpcfg操作的C#代码,从而消除了部署工具的需要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top