Статус: Новичок
Группы: Участники
Зарегистрирован: 22.04.2011(UTC) Сообщений: 2 Откуда: Тверь
|
Доброго дня. Возникла необходимость переделать реализованную ранее и хорошо работающую ЭЦП, основанную на подписании документа xml на более общую модель. Сама подпись отрабатывает без ошибок: using (var gost = new Gost3411CryptoServiceProvider()) { var sign = new GostSignatureFormatter(certificate.PrivateKey); var buff = Encoding.UTF8.GetBytes(data); var hash = gost.ComputeHash(buff);
result = sign.CreateSignature(hash); }
а вот при попытке проверить соответствующую подпись принимающей стороной
using (var gost = new Gost3411CryptoServiceProvider()) { var sign = new GostSignatureDeformatter(certificate.PublicKey.Key); //<- Тут вываливается исключение
var buff = Encoding.UTF8.GetBytes(data); var hash = gost.ComputeHash(buff);
sign.VerifySignature(hash, signature); }
вываливается исключение "Параметр должен поддерживать алгоритм GOST R 34.10".
Еще раз повторю, при работе с поддерживающим ЭЦП документом xml все отрабатывает на ура, без ошибок. Ключи, сертификаты, контейнеры, машина, ось не меняются, вся материально-техническая база константна, alarm генерирует xml исключительно с черными информационными сообщениями, не находя ни одной ошибки.
Если попытаться сделать примерно так: var sign = new GostSignatureDeformatter(certificate.PublicKey.Key as Gost3410); появляется другое исключение: "Значение не может быть неопределенным.\r\nИмя параметра: key", а при отладке и быстром просмотре самого выражения с этим as Gost3410 появляется сообщение Тип "CryptoPro.Sharpei.Gost3410" существует как в "CryptoPro.Sharpei.Base.dll", так и в "CryptoPro.Sharpei.Base.dll".
Пожалуйста, подскажите, где я не прав. Мой код мало чем отличается от того, что должен работать (http://www.cryptopro.ru/forum2/Default.aspx?g=posts&t=758)
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Уберите из путей и текущей директории все файлы КриптоПро Sharpei. Очень похоже, что прогружаются два CryptoPro.Sharpei.Base.dll - один из GAC второй откуда то еще. Если таких файлов нет, то все таки вышлите osinfo.xml от alarm на support@cryptopro.ru, ошибки там обнаруживаются только базовые. |
С уважением, Александр. |
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.12.2010(UTC) Сообщений: 25 Откуда: Новосибирск
|
У меня точно такое же сообщение вываливалось в следующей ситуации: перенесли исправно работающий проект на .NET Framework 4.0, а ссылки на файлы Sharpei по недосмотру не поменяли (то есть, они остались те же, что и для предыдущей версии .NET). При создании подписи для XML стала вываливаться эта ошибка, а при проверке все проходило гладко. После исправления проекта все заработало. Предполагаю, что при переходе к новой версии .NET некоторые алгоритмы поменялись (и в них стала происходить ошибка при таком неправильном построении), а некоторые - нет (и в них все продолжало работать), и это несколько сбивает с толку.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
В этом вопросе есть существенная разница как осуществляется подпись. В первом случае, классы проверки (GostSignatureDeformatter) и подписи (GostSignatureFormatter) прогружаются всегда явно, поэтому конфликт воникает при попытке Sharpei прогрузить "свои" сборки. В Вашем же случае, при проверке подписи XML явные ссылки от вашего проекта на Sharpei (то есть загрузка сборок) вообще не нужны и Sharpei грузит свои сборки без проблем. А вот при подписи они скорее всего требуются. Поэтому при проверке Sharpei через Microsoft грузил "новую сборку", а вот при подписи возникал конфликт. |
С уважением, Александр. |
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 07.10.2014(UTC) Сообщений: 2  Откуда: Казань
|
Добрый день. Столнулась с такой же проблемой. Все советы, что здесь описаны я использовала, но проблема осталась. На почту я писала, но ответа не последовало. Подскажите, пожалуйста, возможные варианты источника ошибки. var inputXml = new XmlDocument(); inputXml.Load(inputFile); SignedXml sgnDoc = new SignedXml(inputXml); sgnDoc.SigningKey = selectedCertificate.PrivateKey; Reference reference = new Reference(); reference.Uri = ""; reference.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete; XmlDsigEnvelopedSignatureTransform anv = new XmlDsigEnvelopedSignatureTransform(); reference.AddTransform(anv); XmlDsigExcC14NTransform c14 = new XmlDsigExcC14NTransform(false); reference.AddTransform(c14); sgnDoc.AddReference(reference); KeyInfo keyInfo = new KeyInfo(); keyInfo.AddClause(new KeyInfoX509Data(selectedCertificate)); sgnDoc.KeyInfo = keyInfo; sgnDoc.SignedInfo.CanonicalizationMethod = c14.Algorithm; sgnDoc.SignedInfo.SignatureMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3410UrlObsolete; sgnDoc.ComputeSignature(); Отредактировано пользователем 9 октября 2014 г. 19:49:00(UTC)
| Причина: Не указана
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close