System.Security.Cryptography.CryptographicException: система не может найти указанный файл
Я получил это исключение из машины развертывания, чего не было в моей машине разработки. Это веб-сайт.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, и если уровень приложения не имеет прав доступа к контейнеру ключей, он выдает исключение. Что ищет указанная файловая система?
Если да, то как это исправить?
1 ответ
У нас была похожая проблема в офисе. Недавнее обновление групповой политики удалило разрешения из %ProgramData%\Microsoft\Crypto\RSA\MachineKeys
папка. Наше приложение создавало самозаверяющий сертификат с помощью BouncyCastle. Пользователи, которые установили приложение до обновления политики, смогли продолжить работу приложения. Пользователи, установившие приложение после обновления, не смогли запустить приложение. Использование Process Monitor помогло нам определить, что происходит (с помощью Windows Explorer мы могли видеть созданный файл, но приложение не имело list folder contents
).
Это обновление групповой политики было сделано для того, чтобы приложения-вымогатели шифрования жесткого диска не могли создавать ключи, необходимые для шифрования ваших дисков. Мы будем работать над постоянным решением этой проблемы, которое соответствует политике нашего отдела безопасности.