Closed Bykiev closed 5 years ago
Здравствуйте. Тут проблема в работе GostCryptography
и CryptoPro.NET
в рамках одного процесса. Оба регистрируют SignatureDescription
-ы, которые используются для работы с подписью. По stack trace видно, что GostCryptography
оказался последним, кто это сделал, поэтому он в самом начале стека. Отправляемые/получаемые WCF-сообщения подписываются ГОСТ-сертификатом, CryptoPro.NET
встраивается в работу шифрования WCF и для поиска подходящего подписчика подсовывает свой экземпляр ключа - CPX509AsymmetricSecurityKey
. Из ключа извлекается идентификатор алгоритма, по которому происходит поиск структуры SignatureDescription
с информацией о том, кто может подписать сообщение. Этой структурой оказывается последняя зарегистрированная т.е. из GostCryptography
, которая ничего не знает про CPX509AsymmetricSecurityKey
и выдает исключение о неизвестном ключе.
В общем, я подумаю, что с этим можно сделать. :)
@AlexMAS, спасибо большое! Надеюсь, удастся решить этот вопрос.
@Bykiev Здравствуйте. Я добавил обработку, которая должна решить вашу проблему. Исправления сейчас находятся в ветке cryptopronet-integration
. Поскольку у меня нет окружения, в котором я мог бы проверить ваш случай, хотел бы попросить вас сделать это.
Для этого нужно склонировать репозиторий и/или переключиться на ветку cryptopronet-integration
:
git clone -b cryptopronet-integration https://github.com/AlexMAS/GostCryptography.git
Открыть проект, собрать его и подключить полученную dll
к своему проекту.
Если все хорошо, я опубликую новую версию в NuGet, если будут сложности с проверкой или вообще, пишите. :)
@AlexMAS, здравствуйте. Спасибо, сейчас проверю!
@AlexMAS, проверил, работает. Спасибо! P.s. в проект не был включен файл GostExternalAsymmetricAlgorithm.cs
@Bykiev Спасибо. Файл включил в проект :) исправиления опубликовал в NuGet - v2.0.4. Если проблема решена, предлагаю закрыть задачу. :)
@AlexMAS, вы собрали ее под .NET 4.5.2, на 4.0 теперь не будет работать?
Здравствуйте, при использовании вашей библиотеки в проекте, где используется WCF-сервис, требующий CryptoPro.NET, возникает ошибка: Parameter must support GOST R 34.10 algorithm.
Последовательность работы такая: с помощью вашей библиотеки подписывается XML-файл по ГОСТ 34.10-2012 (длина ключа 256 бит), после чего осуществляется обращение к WCF-сервису. Сообщение успешно подписывается вашей библиотекой, но при обращении к WCF-сервису возникает ошибка. При использовании WCF в отдельном проекте проблема не наблюдается. Если важно, то WCF и подпись - это разные проекты, используется in-process side-by-side execution (основной проект на .NET 3.5, эти проекты на .NET 4.0).
CryptoPro CSP: 4.0.9842 CryptoPro.NET - 1.0.6893