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

Уведомление

Icon
Error

9 Страницы«<45678>»
Опции
К последнему сообщению К первому непрочитанному
Offline Boris@Serezhkin.com  
#51 Оставлено : 27 июля 2015 г. 0:30:00(UTC)
Boris@Serezhkin.com

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.08.2010(UTC)
Сообщений: 259
Откуда: Moscow

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Автор: strelok671 Перейти к цитате
Самое смешное, что Казначейство не в состоянии предоставить список сертифицированных TSA серверов с алгоритмами ГОСТ для боевого канала. Поэтому для боевого канала метки времени пришлось выкусывать. Так что сильно не напрягайтесь :)


Dancing А никто и не напрягается наверно. То есть если ГИСГМП-у
подсунуть подпись с меткой времени, обругают?
Надо попробовать. пока я шлю без нее.

Вот рассказал бы кто-либо как правильно использовать Microsoft.Xades ?
Русскими словами Или ссылку на русскоязычный вариант стандарта ?

Так как метка времени не подписываемое свойство, то я просто получал ее
и ручками формировал <Object>...



Offline strelok671  
#52 Оставлено : 28 июля 2015 г. 15:44:28(UTC)
strelok671

Статус: Участник

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 2 раз в 2 постах
Приветствую!
Тут не один раз уже спрашивали. В архиве пара классов для подписи и запроса timestamp.
Дополнительные классы, которые используются - только обертки к стандартным классам сертификатов, массива строк и пр.
Выкладывать здесь все зависимости - слишком много всего получится, но приложенных файлов ИМХО достаточно для общего понимания процесса и как основы для творческой переработки под свои нужды.
Offline Boris@Serezhkin.com  
#53 Оставлено : 30 июля 2015 г. 11:41:54(UTC)
Boris@Serezhkin.com

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.08.2010(UTC)
Сообщений: 259
Откуда: Moscow

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Автор: strelok671 Перейти к цитате
Приветствую!
Тут не один раз уже спрашивали...

Спасибо, посмотреть на чужое творчество всегда полезно.Drool
Однако возникли вопросы.
То что вы строите soap обертку на лету, а я использую шаблон - это личные предпочтения.
Далее я увидел:
xmlObj.XmlDoc.GetElementsByTagName(SOAP_DS_PREF + ":Signature")[0].PrependChild(
xmlObj.XmlDoc.ImportNode(
xmlDigitalSignature.GetElementsByTagName("SignedInfo")[0], true));
и вы используете SmevSignedXml signedXml = new SmevSignedXml(xmlObj.XmlDoc);
на основе стандартной SignedXml.
- У меня в результате подобного получалась структура подписи
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
...
и СМЭВ, совместно с гисгмп, ругался - SMEV-10003 Неверная ЭЦП
Я не смог на основе стандартной SignedXml получить <ds:SignedInfo...
Если использовать SignedXmlPrefix,
то там идет установка префикса после расчета подписи...
и тоже SMEV-10003

Решилось просто. Берем SmevSignRequest, из примеров КриптоПро,
и меняем SmevSignedXml signedXml = new SmevSignedXml(doc);
на XadesSignedXml signedXml = new XadesSignedXml(doc);
и видим что "SignedInfo" и все остальное имеет префикс.
соответственно меняем момент вставки подписи - .GetElementsByTagName("ds:SignedInfo")
Все. СМЭВ доволен.Boo hoo!
Осталось добавить timestamp, но это как нибудь потом...
Сейчас меня более интересует что я не могу проверить транспортную подпись СМЭВ.
И не могу проверить, мною же подписанные, N элементов FinalPayment в одном пакетеBrick wall
Offline strelok671  
#54 Оставлено : 30 июля 2015 г. 11:57:12(UTC)
strelok671

Статус: Участник

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 2 раз в 2 постах
2 Boris@Serezhkin.com: Если внимательно посмотреть, то там есть условная компиляция. 2 версия - это предыдущий вариант, 3 - новый. Для третьей версии там создается как раз XadesSignedXml.

Транспортная подпись осталась как была, на 2 версии.

И еще стоит обратить внимание, что я заранее создаю элементы, в которые вставляю хэш и подпись. Значения этих элементов изменяются БЕЗ ИСПОЛЬЗОВАНИЯ DOM модели. Тупым поиском открывающего и закрывающего тэгов и заменой содержимого между ними. Иначе подпись может не провериться, т.к. XML DOM зачастую меняет загруженный документ.
Offline Boris@Serezhkin.com  
#55 Оставлено : 30 июля 2015 г. 12:46:54(UTC)
Boris@Serezhkin.com

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.08.2010(UTC)
Сообщений: 259
Откуда: Moscow

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Автор: strelok671 Перейти к цитате
2 Boris@Serezhkin.com: Если внимательно посмотреть ...
Транспортная подпись осталась как была, на 2 версии.
Звиняйте, каюсь, недоглядел, в основном смотрел на Транспортную подпись.
Вы хотите сказать, что в <wsse:Security <SignedInfo может быть без префикса?
Я подписываю все одной процедурой и скорее всего СМЭВ ругался 10003 на подписи сущностей, а я грешил на транспортную...Think
Автор: strelok671 Перейти к цитате
И еще стоит обратить внимание, что я заранее создаю элементы, в которые вставляю хэш и подпись. Значения этих элементов изменяются БЕЗ ИСПОЛЬЗОВАНИЯ DOM модели. Тупым поиском открывающего и закрывающего тэгов и заменой содержимого между ними. Иначе подпись может не провериться, т.к. XML DOM зачастую меняет загруженный документ.
Ну тут на вкус и цвет...
Я как начал использовать DOM так только ее и пользую.
И всегда И везде - PreserveWhiteSpaces = False
и отправляю я через xmlWriter.
А файлики я просто смотрю Far-ом и поэтому:Shhh
Код:
    // форматированная запись XML, для просмотра через "notepad"
    static void WXML(string name, XmlNode xnode, int Codepage)
    { // write formated XmlDocument or XmlElement or XmlNode on disk 
      // При наличии стартовой XML декларации ее удаляем (во избежание повторного сохранения)
      if (xnode.FirstChild is XmlDeclaration) xnode.RemoveChild(xnode.FirstChild);
      using (XmlTextWriter xmltw =
        new XmlTextWriter(name, System.Text.Encoding.GetEncoding(Codepage)))
      {
        xmltw.Formatting = Formatting.Indented;
        xmltw.WriteStartDocument();
        xnode.WriteTo(xmltw);
        xmltw.Flush();
        xmltw.Close();
      }
    }

Offline Павел Смирнов  
#56 Оставлено : 30 июля 2015 г. 13:27:22(UTC)
Павел Смирнов

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
PreserveWhiteSpace = false - один из распространённых источников ошибок при использовании подписей в XML. Пробельные символы являются значимыми для XMLDSig.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline strelok671  
#57 Оставлено : 30 июля 2015 г. 14:25:34(UTC)
strelok671

Статус: Участник

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 2 раз в 2 постах
Автор: Смирнов Перейти к цитате
PreserveWhiteSpace = false - один из распространённых источников ошибок при использовании подписей в XML. Пробельные символы являются значимыми для XMLDSig.

Плюсую.

Сам сравнительно недавно напоролся на такой вариант. Достаточно пропустить через DOM объект строку "<nodata/>". На выходе гарантированно получите "<nodata />". Из-за этого пробельчика подпись не проверится никогда.
Offline Boris@Serezhkin.com  
#58 Оставлено : 30 июля 2015 г. 15:18:12(UTC)
Boris@Serezhkin.com

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.08.2010(UTC)
Сообщений: 259
Откуда: Moscow

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Автор: Смирнов Перейти к цитате
PreserveWhiteSpace = false - один из распространённых источников ошибок при использовании подписей в XML. Пробельные символы являются значимыми для XMLDSig.
Ну не знаю, не знаю. Опять же на вкус и цвет...Drool

Давайте договоримся что есть XML файл и чем он отличается от внутреннего представления.
Для меня XML файл это набор форматированных строк с отступами.
Такой файл и глазом посмотреть, блокнотом, и на принтер послать
сплошное удовольствие.
А его внутреннее представление - иерархический набор узлов,
которым все форматирование по барабану.
Что и обеспечивает PreserveWhiteSpace = false.
И именно с внутренним представлением я и работаю: подписываю, проверяю, передаю.
А файл это то на что смотрю глазками.
И если мне придется принимать и проверять чужие xml, то я найду способ донести до поставщика разницу между внутренним и внешним представлением.

В архиве есть три папки это результаты простого примерчика
Строка из которой создается XML одна и та же.
Посмотрим в папку True, это PreserveWhiteSpace=true
Ну да, формально это можно назвать XML. Ну не красиво же!!!
В папке False.noFormat - уже лучше, такое и сервису стороннему передать не стыдно.
А стандартом для меня является False.Indent
Глазу приятно и передать xml.InnerXml не стыдно.Dancing
И по почте форматированный файл переслать....

white.rar (6kb) загружен 11 раз(а).
Да, все подписанные файлики проверяются в соответствии с true/false.
Offline Boris@Serezhkin.com  
#59 Оставлено : 30 июля 2015 г. 15:40:07(UTC)
Boris@Serezhkin.com

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.08.2010(UTC)
Сообщений: 259
Откуда: Moscow

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Автор: strelok671 Перейти к цитате
Автор: Смирнов Перейти к цитате
PreserveWhiteSpace = false - один из распространённых источников ошибок при использовании подписей в XML. Пробельные символы являются значимыми для XMLDSig.
Плюсую.
Сам сравнительно недавно напоролся на такой вариант. Достаточно пропустить через DOM объект строку "<nodata/>". На выходе гарантированно получите "<nodata />". Из-за этого пробельчика подпись не проверится никогда.

Это как же Вы сударь над XML измывались раз такое получили?Eh?

Добавил в примерчик в подписываемые данные "<nodata/>"
при сохранении как и ожидал на диске получил "<nodata />",
А далее все работает. Тормознул после подписи, убрал пробел перед "/" - проверяется.
Добавил кучку пробелов вперемежку с "\r\n"
и попутно десяток строк написал через строку - проверяется.

Все равно "калоканализация" приведет "<nodata />" к виду "<nodata></nodata>"

Offline Boris@Serezhkin.com  
#60 Оставлено : 30 июля 2015 г. 16:21:31(UTC)
Boris@Serezhkin.com

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.08.2010(UTC)
Сообщений: 259
Откуда: Moscow

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Автор: Смирнов Перейти к цитате
PreserveWhiteSpace = false - один из распространённых источников ошибок при использовании подписей в XML. Пробельные символы являются значимыми для XMLDSig.


Извините, я завелся. Это мелкий наезд!

Рассмотрим простейший пример от КриптоПро - SignNode.cs
Подпись узла:
// Форматируем документ с игнорированием пробельных символов.
doc.PreserveWhitespace = false;
Т.е. при подписи внешний вид документа не важен ? Полностью согласен.

Проверка узла:
// Сохраняем все пробельные символы, они важны при проверке
// подписи.
xmlDocument.PreserveWhitespace = true;
С какого бодуна "они важны при проверке" если при подписи они убираются?
Т.е. форматирование подписанного документа приведет неверной подписи?
А данные те же, а подпись та же.

Давайте будем последовательными....
Борис
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
9 Страницы«<45678>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.