Я получил это исключение от машины развертывания, чего не произошло на моей машине разработки. Это веб-сайт .net framework.
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. И глядя на этот код SDK в github:
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.
Поэтому я ищу вокруг, пытаясь выяснить, как работает криптография. Вот что я нашел, укажите что-нибудь, если это не так. Похоже на cryptoAPI, создайте контейнер ключей RSA, и если уровень приложения не имеет прав доступа к контейнеру ключей, он выдает исключение. То есть указанную файловую систему ищете?
Если да, то как это исправить?