PrivateKey信任本地计算机"受信任的根"证书的权限

Rob*_*nik 7 iis-7 certificate windows-7 windows-server-2008-r2 private-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();
Run Code Online (Sandbox Code Playgroud)

如果我更改StoreName.Root为,在个人存储中设置证书的权限StoreName.My.我可以在那里访问它.但是我无法在root中访问它.它只是说:

键集不存在

有什么建议?

附加信息

如果我将我的应用程序池标识设置为本地系统(它对我的计算机具有完全权限),我可以成功访问私钥.因此,主要问题是如何设置应用程序池标识的权限以访问受信任的根存储中的证书的私钥.

为什么信任root商店而非个人?
我有一个预先构建的程序集,可以在这个特定的商店中访问此证书,因此只需将证书放在个人存储中就行不通.这就是为什么在受信任的根证书的私钥上设置信任权限是必要的.

tha*_*mes 7

我没有尝试使用受信任的根证书颁发机构,但我发现与其他证书商店最简单的方法是将证书拖放到个人存储中,然后设置权限,然后拖放回到原始证书商店.在您的情况下,受信任的根证书颁发机构.

使用证书MMC的步骤:

  1. 将证书导入到您想要的商店并将密钥标记为可导出.(您可能可以绕过此并直接导入个人存储,但我还没有尝试过.)
  2. 将导入的证书拖放到个人存储中.
  3. 右键单击个人存储中的证书,然后在上下文菜单中单击"所有任务",然后在子菜单中单击"管理私钥".根据步骤1中引用的应用池设置适当的权限.
  4. 设置权限后,将证书拖放回原始存储(在您的情况下为受信任的根证书颁发机构).