我有一个证书需要导入到证书/受信任的根证书颁发机构并且具有相应的私钥。
为了从代码中实际访问密钥,您需要将私钥权限设置为授予特定的 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
即可实现。在那里,我能够访问它。但是我无法在根目录下访问它。它只会显示:密钥集不存在。您有什么建议吗?附加信息:
如果我将应用程序池标识设置为本地系统(它对我的计算机具有完全权限),我可以成功访问私钥。因此,主要问题是如何设置应用程序池标识的权限,以便可以访问受信任根存储中证书的私钥。
为什么信任根存储而不是个人存储?我有一个预构建的程序集,访问特定存储中的证书,所以简单地将证书放入个人存储中对我来说行不通。这就是为什么必须在受信任的根证书的私钥上设置信任权限的原因。