System.Security.Cryptography.CryptographicException:系统找不到指定的文件

时间:2016-12-10 21:44:13

标签: c# .net rsa cryptographicexception

我从部署机器获得了这个例外,这在我的开发机器中没有发生。这是一个.net框架网站。

System.Security.Cryptography.CryptographicException: The system cannot find the file specified.

   at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
   at System.Security.Cryptography.Utils._CreateCSP(CspParameters param, Boolean randomKeyContainer, SafeProvHandle& hProv)
   at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
   at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
   at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
   at Org.BouncyCastle.Security.DotNetUtilities.CreateRSAProvider(RSAParameters rp)
   at Box.V2.JWTAuth.BoxJWTAuth..ctor(IBoxConfig boxConfig)

我的情况是网站中使用的SDK之一正在读取RSA private_keys.pem文件。并在github中查看SDK代码:

 var pwf = new PEMPasswordFinder(this.boxConfig.JWTPrivateKeyPassword);
        AsymmetricCipherKeyPair key;
        using (var reader = new StringReader(this.boxConfig.JWTPrivateKey))
        {
            key = (AsymmetricCipherKeyPair)new PemReader(reader, pwf).ReadObject();
        }
        var rsa = DotNetUtilities.ToRSA((RsaPrivateCrtKeyParameters)key.Private);

SDK在我的开发机器上运行良好,但不适用于部署机器。 我不知道指定文件找不到什么,我认为它不是private_key.pem文件。

所以我搜索一下试图找出Cryptogrphy的工作原理。 这是我发现的,指出任何错误。 看起来像cryptoAPI,创建一个RSA密钥容器,如果应用程序级别没有权限访问密钥容器,它会抛出异常。那是指定的文件系统?

如果是,请如何解决?

1 个答案:

答案 0 :(得分:1)

我们在办公室遇到过类似的问题。最近的组策略更新从%ProgramData%\Microsoft\Crypto\RSA\MachineKeys文件夹中删除了权限。我们的应用程序是使用BouncyCastle创建自签名证书。在策略更新之前安装了应用程序的用户能够继续运行该应用程序。更新后安装应用程序的用户无法运行该应用程序。使用Process Monitor帮助我们识别发生了什么(使用Windows资源管理器,我们可以看到创建的文件,但应用程序没有list folder contents)。

此组策略更新被推送,使硬盘加密勒索软件应用程序无法创建加密驱动器所需的密钥。我们将致力于解决此问题的永久解决方案,以满足我们安全部门的政策。