Identityserver无法加载自签名证书

时间:2016-12-07 16:24:39

标签: c# .net x509certificate2

我正在尝试为身份服务器设置一个证书,但它仍然无法访问“无法访问私钥错误”。 将其从identityserver中取出,以下代码会抛出访问被拒绝错误

static X509Certificate2 GetCertificateFromDisk()
{
    using (var stream = File.Open(@"patht-to-pfx", FileMode.Open))
    {
        var cert = new X509Certificate2(ReadStream(stream), "password", X509KeyStorageFlags.MachineKeySet);
        return cert;
    }
}

以管理员身份运行代码时,它运行正常,而不是在我自己的帐户下运行时。最终我想把它作为localsystem运行。

我甚至在本地计算机证书存储区的证书私钥权限下添加了“Everyone”, screenprint here ......我仍然得到例外。

这里有什么问题?对它疯狂

更新

来自CryptoGuy的重要提示在下面的答案中。 重要提示:打开文件不正确只有从商店获取证书时,Identityserver3仍然失败。使其工作的是使用Keith Sparkjoy's tool SerfCert重新生成证书。我以前的证书是使用PowerShell生成的。请记住,PowerShell证书存在私钥可访问性问题。感谢Keith的工具!

1 个答案:

答案 0 :(得分:0)

有几件事需要考虑。

1)您正在对本地计算机商店执行写访问。 X509KeyStorageFlags.MachineKeySet尝试将私钥保存到本地计算机存储区。因此,您需要管理员权限才能在那里写入。您应该删除此标志以执行只读访问

2)

  

文档说在MMC中添加权限(管理证书上的私钥选项)应该允许这样做,但它似乎无法正常工作

它适用于已保存的私钥。

您真正应该做的是将证书和私钥导入本地计算机存储,然后将您的应用程序配置为引用已安装的证书。

3)如果您的应用程序在未成熟的帐户下运行且密钥不需要共享,那么您应该使用当前用户存储。