我正在尝试在 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