Identityserver 无法加载自签名证书

Identityserver fails to load selfsigned certificate

我正在尝试为 identityserver 设置证书,但它一直失败并显示 "no access to private key error"。 从identityserver中取出来,下面的代码抛出access denied error

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

当 运行以管理员身份运行代码时,它工作正常,而不是 运行在我自己的帐户下运行它。最后我想 运行 它作为本地系统。

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

这里有什么问题?为之疯狂

更新

CryptoGuy 在下面的回答中给出了很好的提示。 重要说明:打开文件不正确,只有 Identityserver3 从商店获取证书时仍然失败。使它起作用的是使用 Keith Sparkjoy's tool SerfCert 重新生成证书。我以前的证书是使用 powershell 生成的。因此请记住,Powershell 证书在私钥可访问性方面存在问题。感谢 Keith 提供的工具!

需要考虑的事情很少。

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

2)

Documentation says that adding permissions in MMC (manage private key-option on a certificate) should allow this, but it doesn't seem to work

它适用于已保存的私钥。

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

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