Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline roman_knv  
#1 Оставлено : 26 декабря 2016 г. 12:45:18(UTC)
roman_knv

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.12.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: Москва

Добрый день.
Столкнулись с такой проблемой.
При вычислении подписи XML документа возникает Exception:

System.Reflection.TargetInvocationException: Адресат вызова создал исключение. --->System.Security.Cryptography.CryptographicException: Нет доступа к карте. Введен неправильный PIN-код.
в CryptoPro.Sharpei.COMCryptography.SignValue(SafeProvHandleCP hProv, Int32 keyNumber, Byte[] rgbHash, Int32 dwFlags)
в CryptoPro.Sharpei.Gost3410CryptoServiceProvider.SignHash(Byte[] hash)
в CryptoPro.Sharpei.Gost3410CryptoServiceProvider.CreateSignature(Byte[] hash)
в CryptoPro.Sharpei.GostSignatureFormatter.CreateSignature(Byte[] rgbHash)
в System.Security.Cryptography.AsymmetricSignatureFormatter.CreateSignature(HashAlgorithm hash)
в System.Security.Cryptography.Xml.SignedXml.ComputeSignature()
в CryptoPro.Sharpei.Xml.CPSignedXmlDetour.ComputeSignature()


Причем проблема возникает только для некоторых xml документов и при попытке второй раз подписать тот же самый xml документ подпись нормально вычисляется и документ подписывается.

Метод, осуществляющий подпись XML документа:

private void SignCreature(XmlDocument document, X509Certificate2 certificate)
{

XmlElement element = (XmlElement)document.GetElementsByTagName("FinalPayment", "http://roskazna.ru/gisgmp/xsd/116/PaymentInfo")[0];
if (element == null) return; // Нечего подписывать

document = new XmlDocument();
document.LoadXml(element.OuterXml);

// Подписанный документа
System.Security.Cryptography.Xml.SignedXml signedXml = new System.Security.Cryptography.Xml.SignedXml(document)
{
// Берем код подписи документа
SigningKey = certificate.PrivateKey
};


System.Security.Cryptography.Xml.Reference reference = new System.Security.Cryptography.Xml.Reference
{
Uri = ""
};

reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
reference.AddTransform(new System.Security.Cryptography.Xml.XmlDsigEnvelopedSignatureTransform());

System.Security.Cryptography.Xml.XmlDsigExcC14NTransform xmlDsigExcC14NTransform = new System.Security.Cryptography.Xml.XmlDsigExcC14NTransform();

reference.AddTransform(xmlDsigExcC14NTransform);

signedXml.AddReference(reference);


System.Security.Cryptography.Xml.KeyInfoX509Data keyInfoX509Data = new System.Security.Cryptography.Xml.KeyInfoX509Data(certificate);
keyInfoX509Data.AddSubjectName(certificate.Subject);

var keyInfo = new System.Security.Cryptography.Xml.KeyInfo();
keyInfo.AddClause(keyInfoX509Data);
signedXml.KeyInfo = keyInfo;
signedXml.SignedInfo.CanonicalizationMethod = xmlDsigExcC14NTransform.Algorithm;
signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";

// Вычисляем подпись
signedXml.ComputeSignature(); // здесь Exception

element.InnerXml = element.InnerXml + signedXml.GetXml().OuterXml;
}

Отредактировано пользователем 19 января 2017 г. 17:07:07(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#2 Оставлено : 26 декабря 2016 г. 15:46:23(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,372
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 31 раз
Поблагодарили: 702 раз в 611 постах
А где хранится секретный ключ и вводится ли пин-код?
Знания в базе знаний, поддержка в техподдержке
Offline roman_knv  
#3 Оставлено : 26 декабря 2016 г. 17:46:53(UTC)
roman_knv

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.12.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: Москва

Автор: maxdm Перейти к цитате
А где хранится секретный ключ и вводится ли пин-код?

Секретный ключ хранится в контейнере, пин-код закрытого ключа вводится всегда и равен 12345678

Отредактировано пользователем 27 декабря 2016 г. 17:13:43(UTC)  | Причина: Не указана

Offline roman_knv  
#4 Оставлено : 28 декабря 2016 г. 17:39:08(UTC)
roman_knv

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.12.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: Москва

Здравствуйте еще раз.
По данной ошибке что нибудь прояснилось?
Offline roman_knv  
#5 Оставлено : 16 января 2017 г. 13:58:50(UTC)
roman_knv

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.12.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: Москва

Добрый день.
По данной проблеме стоит ожидать ответа в ближайшее время?
Проблема серьезная, а решения все еще нет.
Offline Павел Смирнов  
#6 Оставлено : 20 января 2017 г. 9:06:39(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Расскажите подробнее об условиях возникновения ошибки. На каком носителе ключ? Какого рода приложение осуществляет подпись? Десктопное, запущенное в интерактивной сессии? Сервис? В автоматическом режиме?
Техническую поддержку оказываем тут.
Наша база знаний.
Offline roman_knv  
#7 Оставлено : 3 марта 2017 г. 11:52:24(UTC)
roman_knv

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.12.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: Москва

Автор: Смирнов Перейти к цитате
Расскажите подробнее об условиях возникновения ошибки. На каком носителе ключ? Какого рода приложение осуществляет подпись? Десктопное, запущенное в интерактивной сессии? Сервис? В автоматическом режиме?


Ключ хранится в реестре. Пароль для получения ключа реестра вводится автоматически. Подпись осуществляет десктопное приложение.
Offline Максим Коллегин  
#8 Оставлено : 4 марта 2017 г. 11:59:38(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,372
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 31 раз
Поблагодарили: 702 раз в 611 постах
А можно подробнее, поясните "автоматически"?
Сменить пароль на пустой нет возможности?
Знания в базе знаний, поддержка в техподдержке
Offline roman_knv  
#9 Оставлено : 6 марта 2017 г. 17:18:29(UTC)
roman_knv

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.12.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: Москва

Автор: maxdm Перейти к цитате
А можно подробнее, поясните "автоматически"?
Сменить пароль на пустой нет возможности?


Работает приложение , осуществляющее подпись документов.
При запуске приложения происходит считывание пин-кода закрытого ключа и отпечатка сертификата из файла.(пин-код установлен по умолчанию 12345678)
Далее на основе этих данных происходит получения ключа из реестра один раз.
Полученный секретный ключ используется для подписи документов.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.