我有一个必须导入证书/受信任的根证书颁发机构的证书,并且有一个相应的私钥。
要从代码中实际访问密钥,您需要设置私钥权限以授予对特定 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访问它。它只是说:
键集不存在
有什么建议么?
附加信息
如果我将我的应用程序池身份设置为本地系统(对我的机器拥有全部权限),我可以成功访问私钥。所以主要问题是如何设置我的应用程序池身份的权限以访问受信任的根存储中证书的私钥。
为什么信任根存储而不是个人存储?
我有一个预先构建的程序集,可以在这个特定的商店中访问这个证书,所以简单地将证书放在个人商店中不会对我有用。这就是为什么必须在受信任的根证书的私钥上设置信任权限的原因。