我有一个证书必须导入证书/受信任的根证书颁发机构 并有相应的私钥。
要从代码中实际访问 key ,您需要设置私钥权限以授予对特定 IIS 应用程序池的完全访问权限。我完全理解,但问题是这只能在个人证书上设置,而不能在受信任的根证书上设置。
我已经尝试将相同的证书添加到个人商店,但以下代码不会中断:
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 cert in store.Certificates)
{
if (cert.HasPrivateKey)
{
// access private key here
}
}
store.Close();
如果我更改
StoreName.Root
在个人商店中设置证书权限有效至 StoreName.My
.我可以在那里访问它。但是我无法在 root 中访问它。它只是说:Keyset does not exist
有什么建议?
附加信息
如果我将我的应用程序池标识设置为 本地系统 (对我的机器有全部权限)我可以 成功 访问私钥。所以主要问题是我如何设置我的应用程序池身份的权限以访问受信任根存储中证书的私钥。
Why trusted root store and not personal?
I have a pre-built assembly that accesses this certificate in this particular store, so simply placing the certificate in Personal store won't do the trick for me. That's why setting trust permissions on private keys of trusted root certificates is imperative.
最佳答案
我还没有在受信任的根证书颁发机构中尝试过,但我发现与其他证书存储最简单的方法是将证书拖放到个人存储中,然后设置权限,然后拖放回原始证书存储。在您的情况下,受信任的根证书颁发机构。
使用证书 MMC 的步骤:
关于windows-7 - 本地机器 "Trusted roots"证书的私钥信任权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10580326/