При переходе на новый алгоритм шифрования ГОСТ Р 34.10-2012 256 сервер начал выдавать ошибку spki.algorithm.parameters, при этом на локальной машине все работает. Ошибка возникает при обращении к методу
public static SymmetricAlgorithm DecryptKeyClass([] keyData, gost, symmetricAlgorithmUri). Внутри метода вызывается цепочка других методов в одном из которых вызывается метод DecodeGostKeyTransport где происходит следующее:
GostR3410_KeyTransport r3410KeyTransport = new GostR3410_KeyTransport();
r3410KeyTransport.Decode(buffer);
...
transport.transportParameters_ = cpAsnUtils.UnpackPublicKeyInfo2012(r3410KeyTransport.transportParameters.ephemeralPublicKey);
Поле ephemeralPublicKey является классом SubjectPublicKeyInfo и внутри метода UnpackPublicKeyInfo2012 идет обращение к свойству данного класса и попытке каста к определенному типу:
Asn1Choice parameters = spki.algorithm.parameters as Asn1Choice;
if (parameters == null)
throw new ArgumentException("spki.algorithm.parameters");
Почему на локальной машине все работает, следовательно параметры не null, а на сервере вылетает данный эксепшн с чем это может быть связано? Проверил криптопро контейнеры, переустанавливал сертификаты - ничего не поменялось.
Проблема была в версиях CryptoPro .NET SDK и CryptoPro .NET Server, после обновления с версии 1.0.6397 до 1.0.6893 все работает.
Продвижение своими сайтами как стратегия роста и независимости