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) 如果您的应用程序在非特权帐户下运行并且不需要共享密钥,那么您应该使用当前用户存储。
我正在尝试为 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) 如果您的应用程序在非特权帐户下运行并且不需要共享密钥,那么您应该使用当前用户存储。