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

Уведомление

Icon
Error

9 Страницы«<56789>
Опции
К последнему сообщению К первому непрочитанному
Offline Boris@Serezhkin.com  
#61 Оставлено : 1 августа 2015 г. 7:43:54(UTC)
Boris@Serezhkin.com

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Давайте вернемся к основной теме.

Сформировал XADES подпись, посмотрел на нее и тут мне глаз резануло:
Цитата:
<ds:Signature Id="sgnId_1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
...
</ds:KeyInfo>
<ds:Object>
<xades:QualifyingProperties Target="#sgnId_1" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
<xades:SignedProperties Id="pId_1">
...
<xades:Cert>
<xades:CertDigest>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>SHHc1Um5J2oeS7P7v9PX+o5AvCE=</ds:DigestValue>
</xades:CertDigest>
<xades:IssuerSerial>
<ds:X509IssuerName>CN=Тестовый УЦ РТК ...</ds:X509IssuerName>
<ds:X509SerialNumber>199F461500000000013F</ds:X509SerialNumber>
</xades:IssuerSerial>
</xades:Cert>
...
</ds:Signature>

Внутри <xades:Cert> разве должен быть префикс ds?
Посмотрел на текст Microsoft.Xades - действительно добавляются элементы с жестко заданным префиксом ds:
Это ошибка или так и надо?

Также в тексте смутило использование префикса xades
и поиск элементов с префиксом xsd
Например в модуле Cert.cs
xmlNodeList = xmlElement.SelectNodes("xsd:CertDigest", xmlNamespaceManager);

Очень хочется параметризовать это безобразие и иметь возможность снаружи задавать префиксы. Что-то вроде:
...PrefixXmldsig="ds"; ...PrefixXades="xds";
Вот только как это лучше и правильнее реализовать?
Добавить статический класс и перелопатить весь текст.
Муторно конечно, но попробую.
Offline Boris@Serezhkin.com  
#62 Оставлено : 1 августа 2015 г. 18:36:10(UTC)
Boris@Serezhkin.com

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Ну вот сбылась мечта идиота...Dancing
В Microsoft.Xades добавил класс Prefix, а в нем три префикса:
prefixXmldsig = "ds";
prefixXades = "xades";
prefixXSD = "xsd";
Пробежался по всем текстам.
Теперь префиксы можно задавать "на ходу"
даже prefixXmldsig = "UraBorke";
Подпись с таким префиксом и формируется и стандартной SignedXml проверяется.

Вопрос 1: Кто бы мне объяснил глубокий смысл наличия префикса "xsd" и множеству выборов узлов с ним?
Кстати насколько я понимаю стандарт не требует
prefixXmldsig = "ds" и префикс может быть любым.

Далее TimeStamp - сформировал, запросил, получил, вырезал, вставил.
Проверку пока не делал, ибо не знаю точно что и как.Eh?
Проверил с помощью tsputil.exe, и мне ответили:
Цитата:
Policy ID: 1.2.643.2.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1
Serial Number: 0664 F5F9 BC00 0000 0000 084D FE
Accuracy (microseconds): -1
Ordering: 0
HasNonce: 0
TSA:
Stamp time: 01.08.2015 16:43:57
Hash algorithm: 1.2.643.2.2.9, ALG_ID: 0x801E
Hash size: 32
Hash: 981E 5F3C A30C 8414 8783 0F84 FB43 3E13 AC11 0156 9B9C 1358 4AC4 8323 4CD6 56C0
Certificate of signer of time-stamp: CN=Тестовая служба TSP на testca.cryptopro.ru, O="ООО ""КРИПТО-ПРО""", L=Москва, S=Москва, C=RU
Verification of time-stamp: succeed.
Verification of certificate of signer of time-stamp: FAILED, 0x800B0109 Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия.
Certificates from time-stamp (1):
CN=Тестовая служба TSP на testca.cryptopro.ru, O="ООО ""КРИПТО-ПРО""", L=Москва, S=Москва, C=RU

Смущает Policy ID, это так и надо?
Радует "Verification of time-stamp: succeed"
Вопрос 2: Если succeed, то все нормально?

Дополнительно: Если посмотреть на внутренности System.Xml.dll и поискать "ds",
то найдется и не одно вхождение. С моей точки зрения это бардак

Отредактировано пользователем 1 августа 2015 г. 18:45:11(UTC)  | Причина: Добавил про SignedXml

Offline Boris@Serezhkin.com  
#63 Оставлено : 1 августа 2015 г. 23:52:41(UTC)
Boris@Serezhkin.com

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Так как префиксация нэймспэйсов в подписи заработала,
то я решил проверить СМЭВ на вшивость.Think
Если транспортную подпись сделать XADES, без TimeStamp,
то SMEV-10003 подпись не верна.Eh?
А если просто XMLDSIG с вычурным префиксом, то прекрасно проходит.
Я аж зауважал писателей СМЭВ.Applause

Это СМЭВ принимает r_ex5.XML (7kb) загружен 24 раз(а).

Зачем мне все это надо? И сам не знаю.
Хочется логики и стройности в ПО.

Offline Boris@Serezhkin.com  
#64 Оставлено : 2 августа 2015 г. 0:58:15(UTC)
Boris@Serezhkin.com

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Решил поделиться с теми кому интересно.Drool
Microsoft.Xades.Prefix.cs
Используется примерно так:
xmlNamespaceManager.AddNamespace(Prefix.PrefixXSD, XadesSignedXml.XadesNamespaceUri);
и
NodeList = XmlElement.SelectNodes(Prefix.xsd("QualifyingProperties"), xmlNamespaceManager);

Остается только сожалеть что нет реализации поиска узла по локальному имени.
Сколько бы проблем снялось...
Это я очень мягко выразилсяSpeak to the hand
Для особо любопытных могу отдать и перелопаченный текст Microsoft.XadesSilenced
Все. Московское время 00:58 спать пора.Whistle
Offline Павел Смирнов  
#65 Оставлено : 4 августа 2015 г. 9:55:31(UTC)
Павел Смирнов

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
В наших примерах всюду поправим на PreserveWhitespace = true, спасибо за наводку.

Как я понимаю, в соседней ветке вы уже выяснили, что именно в этом была беда. Поясню чуть глубже. Если ваша реализация и при создании, и при проверке подписи будет вырезать незначащие пробельные символы, то вы проблемы не заметите. Если же вы попробуете отдать вашу подпись на проверку в другую реализацию, которая перед вычислением подписи не порезала эти символы, то подпись не сойдётся. Аналогично, ваша подпись не проверится той реализацией.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Boris@Serezhkin.com  
#66 Оставлено : 4 августа 2015 г. 10:17:14(UTC)
Boris@Serezhkin.com

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Автор: Смирнов Перейти к цитате
В наших примерах всюду поправим на PreserveWhitespace = true, спасибо за наводку.
Как я понимаю, в соседней ветке вы уже выяснили, что именно в этом была беда.
Ну да, ну да. Теперь я после проверки пришедшего добавляю в первый узел атрибуты проверено="дата" и пробелы="ага". так и храню. А девочкам отдаю форматированный БОДИ.
Автор: Смирнов Перейти к цитате
Поясню чуть глубже. Если ваша реализация и при создании, и при проверке подписи будет вырезать незначащие пробельные символы, то вы проблемы не заметите. Если же вы попробуете отдать вашу подпись на проверку в другую реализацию, которая перед вычислением подписи не порезала эти символы, то подпись не сойдётся. Аналогично, ваша подпись не проверится той реализацией.

Рэзал и буду Рэзать.
При передаче для авто обработки отдаю OuterXml, бэз пробелов, или по почте раром
А вот если в письме CtrlC CtrlV, то indent=ON и примечание "пробелов нет"Drool
Offline Boris@Serezhkin.com  
#67 Оставлено : 4 августа 2015 г. 16:20:00(UTC)
Boris@Serezhkin.com

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Извините немного не в тему.
для strelok671
Сервис ГИСГМП 1.16 стал выдавать длину ответа = -1
Я случайно заметил, а у вас вроде через byte[-1] читается.
У меня через StreamReader в строку. ответ нормальный.
Что-то у сервиса случилось....

ps: минут пять отвечал, потом перестал...

Отредактировано пользователем 4 августа 2015 г. 16:37:16(UTC)  | Причина: ps

Offline strelok671  
#68 Оставлено : 14 августа 2015 г. 15:39:23(UTC)
strelok671

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 2 раз в 2 постах
Автор: Boris@Serezhkin.com Перейти к цитате
Извините немного не в тему.
для strelok671
Сервис ГИСГМП 1.16 стал выдавать длину ответа = -1
Я случайно заметил, а у вас вроде через byte[-1] читается.
У меня через StreamReader в строку. ответ нормальный.
Что-то у сервиса случилось....

ps: минут пять отвечал, потом перестал...


А это, кстати, часто попадается. Многие сервисы вообще не заморачиваются с header переменными ответа. Я встречал сервисы, где вообще не было Content-Length. В результате приходидось читать из стрима до тех пор, пока не получал таймаут на операцию чтения, и после этого проверял ответ на целостность.
Поскольку диктовать правила конторам типа Казначейства и прочим федеральным министерствам - дело тухлое, приходится подстаиваться под их рукожопных программеров.

А по поводу PreserveWhitespace и преобразований в dom парсере: представьте, что подпись поставили на документ с внутренним тегом <data/>. Если подпись ставили не на MS .NET, а в какой-нибудь linux java, где такого преобразования не предусмотрено, вы подпись не проверите. За те годы, что я занимаюсь всяческой криптографией (а это уже лет 15, если не 20) у меня выработалось железное правило: после подписи документ не меняется до момента проверки этой подписи. Подпись проверил - дальше загружай документ куда хочешь, до этого документ - просто набор байт.

И кстати, насчет алиасов пространств имен: алиас может быть любым, поэтому при разборе xml-документов с namespace-ами я всегда задаю свой список для namespacemanager, что позволяет указывать алиасы не из документа, а из моего списка.

И да, при вложенных документах пространства имен могут содержать элементы из любых других пространств, если такое предусмотрено схемой документов. Пространство имен - это просто область ответсвенности определенного разработчика схем документов. В СМЭВе это буквально на каждом шагу.
Offline alex33  
#69 Оставлено : 19 августа 2015 г. 16:00:24(UTC)
alex33

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

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

Сказал(а) «Спасибо»: 1 раз
Приветствую.
Полистывал я тут схему XADES (http://uri.etsi.org/01903/v1.3.2/XAdES.xsd)
и оказалось, что тип у ds:X509SerialNumber (QualifyingProperties/SignedProperties/SignedSignatureProperties/SigningCertificate/Cert/IssuerSerial) - integer.
А сертификат, например сгенерированный тестовым центром КриптоПро имеет серийный номер 120005f4916d36d064e8e0682e00000005f491, что как бы не очень integer.
Соответственно, валидирование подписи по xsd-схеме дает ожидаемый банан.
Вопрос: Забить? Или X509Certificate2.SerialNumber нужно каким-то магическим образом конвертиорвать в integer (т.е. в [0-9]+)?
Offline Boris@Serezhkin.com  
#70 Оставлено : 21 августа 2015 г. 8:33:42(UTC)
Boris@Serezhkin.com

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах
Автор: strelok671 Перейти к цитате
А по поводу PreserveWhitespace и преобразований в dom парсере: представьте, что подпись поставили на документ с внутренним тегом <data/>. Если подпись ставили не на MS .NET, а в какой-нибудь linux java, где такого преобразования не предусмотрено, вы подпись не проверите.
Не, позволю себе не согласиться. Трансформатор "с14" перед подписью, проверкой переведет <data/> и <data /> в форму <data></data>. Другое дело "LF"(\n) все заморочки из за него.
Автор: strelok671 Перейти к цитате
И кстати, насчет алиасов пространств имен: алиас может быть любым, поэтому при разборе xml-документов с namespace-ами я всегда задаю свой список для namespacemanager, что позволяет указывать алиасы не из документа, а из моего списка.
Какая интересная мысльDrool
Я в эту сторону даже не думал. Замечательно.
Получается что ежели в документе есть <votvam:money>, то при соответственном расширении namespace-ов я могу поискать как <figvam:money>, так и <votvam:money>Dancing
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
9 Страницы«<56789>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.