我从部署机器中得到了这个异常,这在我的开发机器中没有发生。这是一个 .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 密钥容器,如果应用程序级别没有权限访问密钥容器,它会抛出异常。那是在寻找指定的文件系统吗?
如果是,如何解决?