В моем приложении WPF (.NET 4.6) мне необходимо использовать файл сертификата P12 для подписания строки с использованием алгоритма SHA-512 (для включения в заголовок веб-запроса). Я делаю так:
using (var rsa = myX509Certificate2.GetRSAPrivateKey()) {
myBytes = rsa.SignData(
Encoding.UTF8.GetBytes(stringToSign),
HashAlgorithmName.SHA512,
RSASignaturePadding.Pkcs1
);
}
Это работает в тестировании и почти для всех моих клиентов, но случайный клиент получает следующее исключение:
System.Security.Cryptography.CryptographicException: Invalid algorithm specified.
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.Utils.SignValue(SafeKeyHandle hKey, Int32 keyNumber, Int32 calgKey, Int32 calgHash, Byte[] hash, Int32 cbHash, ObjectHandleOnStack retSignature)
at System.Security.Cryptography.Utils.SignValue(SafeKeyHandle hKey, Int32 keyNumber, Int32 calgKey, Int32 calgHash, Byte[] hash)
at System.Security.Cryptography.RSACryptoServiceProvider.SignHash(Byte[] rgbHash, Int32 calgHash)
at System.Security.Cryptography.RSACryptoServiceProvider.SignHash(Byte[] hash, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding)
at System.Security.Cryptography.RSA.SignData(Byte[] data, Int32 offset, Int32 count, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding)
at System.Security.Cryptography.RSA.SignData(Byte[] data, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding)
Это произошло совсем недавно с клиентом в Windows 7 SP1.
Я изо всех сил пытаюсь найти ответ через существующие вопросы SO или от Google в целом. Из того, что я могу сказать, это может быть связано с тем, что неподдерживаемый поставщик служб криптографии Windows используется скрытно, но я не уверен, так как не могу сам повторить ошибку.
Есть идеи, как решить эту проблему, либо с помощью кода, либо с помощью затронутых клиентов установить какие-либо конкретные обновления Windows?