【问题标题】:After computer restart, 'System.Security.Cryptography.CryptographicException' : Keyset does not exist计算机重新启动后,“System.Security.Cryptography.CryptographicException”:密钥集不存在
【发布时间】:2025-11-22 10:40:02
【问题描述】:

我正在使用以下代码对数据进行签名:

        RSACryptoServiceProvider csp;

        X509Store my = new X509Store(StoreName.My, StoreLocation.LocalMachine);

        my.Open(OpenFlags.ReadOnly);

        foreach (X509Certificate2 cert in my.Certificates)
        {
            if (cert.Subject.Contains(certSubject))
            {
                csp = (RSACryptoServiceProvider)cert.PrivateKey;
            }
        }
        csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA256"));

将证书安装到本地计算机后第一次工作正常,但是当我在计算机重新启动后尝试签名时会引发异常。可能是什么原因,请帮忙。

【问题讨论】:

  • 您的代码中是否设置了类似csp.PersistKeyInCsp = false 的内容?如果是这样,那就是该对象被处置的时候。
  • 否,电脑不重启也能正常工作,但重启后出现问题,系统重启时是否处理?
  • 在当前用户而不是本地机器上安装证书对我有用,但在本地机器上安装会出现同样的错误。

标签: c# x509certificate private-key system.security


【解决方案1】:

我有同样的问题。在我的帐户中运行的 IIS Express 能够在我在本地计算机上导入证书的那一天访问证书的私钥,但在重新启动后无法访问。我能够修复的方法是在 certlm 控制台中明确授予我的帐户的完全权限(即使您的帐户已经在本地管理员组中,该组对该私钥具有完全权限)。

【讨论】:

    最近更新 更多