我正在尝试为身份服务器设置一个证书,但它仍然无法访问“无法访问私钥错误”。 将其从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的工具!
答案 0 :(得分:0)
有几件事需要考虑。
1)您正在对本地计算机商店执行写访问。 X509KeyStorageFlags.MachineKeySet
尝试将私钥保存到本地计算机存储区。因此,您需要管理员权限才能在那里写入。您应该删除此标志以执行只读访问
2)
文档说在MMC中添加权限(管理证书上的私钥选项)应该允许这样做,但它似乎无法正常工作
它适用于已保存的私钥。
您真正应该做的是将证书和私钥导入本地计算机存储,然后将您的应用程序配置为引用已安装的证书。
3)如果您的应用程序在未成熟的帐户下运行且密钥不需要共享,那么您应该使用当前用户存储。