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

Уведомление

Icon
Error

19 Страницы«<1011121314>»
Опции
К последнему сообщению К первому непрочитанному
Offline two_oceans  
#111 Оставлено : 15 марта 2019 г. 12:14:17(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Автор: Соня Базурова Перейти к цитате
Никак не получается сформировать корректный xml-пакет (отправка начисления). При проверке на портале https://smev3.gosuslugi....portal/checkxmlform.jsp, результат:
ЭЦП не подтверждена: #I_54a59db2-3845-4915-8770-dd95394aadb1 Ошибка проверки ЭП: Нарушена целостность ЭП

MS .Net версии 3.5.

Подписываю так:
Код:

      references[0] = "I_54a59db2-3845-4915-8770-dd95394aadb1";
      references[1] = "SIGNED_BY_CALLER";

.Net желательно версии 4.5 или выше для корректного выполнения приведения к каноническому виду, ранние версии не выполняют всех требований стандарта XmlDsigExcC14NTransform, поэтому некоторые файлы могут проходить проверку, а некоторые нет.

Сам подписанный файл пока не смотрел, уже по этим строкам есть что сказать: создали одну подпись и свалили в нее все референсы. Смысл в том, что у Вас референсы пересекаются (1-й содержит 0-й) и при подписи одного может меняться другой из-за указания enveloped трансформа. Поэтому обратите внимание, что они не совместимы в одной подписи с такими трансформами, а каждый референс должен добавляться к отдельной подписи.

Подписание очень чувствительно к порядку операций и к указываемых в reference идентификаторах подписываемых узлов. Правильный порядок следующий:
шаг 1) подписываете начисление, в данном случае идентификатор "I_54a59db2-3845-4915-8770-dd95394aadb1". В СМЭВ 2 это было обязательно, но в СМЭВ 3 я что-то не вижу подписи в схеме данных. В спойлере информация об этой подписи в смэв2.


шаг 2) подписываете тег под MessagePrimaryContent, в данном случае ImportChargesRequest с идентификатором "G_fce0c544-b08d-44bc-83d8-738f10e9d069" Этот тег содержит в себе все начисления, поэтому если сделать шаг 2 ранее чем шаг 1, то при шаге 1 содержимое изменится и подпись не пройдет проверку. Эта подпись помещается в PersonalSignature. Поэтому XmlDsigEnvelopedSignatureTransform не нужен. По схеме эта подпись не обязательная для теста можно пропустить шаг.

шаг 3) Обязательный. Подписываете SenderProvidedRequestData с идентификатором "SIGNED_BY_CALLER" и помещаете подпись в CallerInformationSystemSignature. Тут на первый взгляд все сделано верно, надо только выкинуть референс на начисление "I_54a59db2-3845-4915-8770-dd95394aadb1" и XmlDsigEnvelopedSignatureTransform. Либо можно попробовать референс "I_54a59db2-3845-4915-8770-dd95394aadb1" оставить, но XmlDsigEnvelopedSignatureTransform убрать из обоих референсов.

К слову, если использовать все три трансформа, Enveloped должен добавляться самым первым (уменьшает объем данных, но при уменьшении может испортить каноническую форму и смэвовскую форму), потом C14N (может как уменьшить, так и увеличить объем данных, убирает переводы строк и табуляцию в самом теге, но портит с высокой степенью вероятности смэвовскую форму), потом смэвовский трансформ (переставляет объявление пространства имен тега в начало, исправляет возможную проблему с переводами строк и табуляциями путем их удаления, однако если атрибуты были разделены переводами строк и табуляциями, то без выполнения трансформа C14N перед смевовским получится нечитаемая каша). В порядке
Код:
исходные данные -> Enveloped -> C14N -> смэвовский -> данные для хэша
они друг другу не мешают.

По тексту документа, кажется должно быть chg:Payee, tns:MessagePrimaryContent и обязателен тег
Код:
<chg:ChangeStatus meaning="1"/>
Ещё нюанс - с тегом TestMessage ответ будет от тестового эмулятора, а эмулятор отвечает штатно только на заданный в примере идентификатор платежа или начисления.

Отредактировано пользователем 15 марта 2019 г. 12:34:24(UTC)  | Причина: Не указана

Offline Соня Базурова  
#112 Оставлено : 15 марта 2019 г. 15:38:53(UTC)
Соня Базурова

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

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

Поблагодарили: 1 раз в 1 постах
Спасибо Bpar за пример Class1.cs в файле SMEV3sign.zip :) Получился код, подписывающий xml-пакеты, проходящие проверку на портале Смэв3.

При подписании используются ключи ГОСТ-2012 (обычно всегда в примерах ГОСТ-2001).


Пакет импорта начисления:


Спасибо two_oceans за подробный ответ. Рекомендации:
Цитата:

исходные данные -> Enveloped -> C14N -> смэвовский -> данные для хэша
chg:Payee
chg:ChangeStatus meaning="1"/

учтены :)

Цитата:

Ещё нюанс - с тегом TestMessage ответ будет от тестового эмулятора, а эмулятор отвечает штатно только на заданный в примере идентификатор платежа или начисления.


Т.е., тестовый контур (http://smev3-n0.test.gosuslugi.ru:7500/smev/v1.2/ws) отвечает только на пакеты с тегом TestMessage?

Пакет с начислением, отправленный на контур разработки (http://smev3-d.test.gosuslugi.ru:7500/smev/v1.2/ws) возвращает:

<Description>SMEV-401:Не найден вид сведений.</Description>
<ns3:RootElementLocalName>ImportChargesRequest</ns3:RootElementLocalName>
<ns3:RootElementNamespaceURI>urn://roskazna.ru/gisgmp/xsd/services/import-charges/2.1.0</ns3:RootElementNamespaceURI>

Отредактировано пользователем 24 марта 2019 г. 8:44:37(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Соня Базурова за этот пост.
AntonChik оставлено 16.03.2020(UTC)
Offline two_oceans  
#113 Оставлено : 24 мая 2019 г. 6:39:25(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Пропустил ответ, поясняю: с тегом TestMessage будет отвечать эмулятор, а без тега TestMessage должна ответить сама тестовая ГИС ГМП.
Offline Dmitriy_Zh  
#114 Оставлено : 25 сентября 2019 г. 16:45:59(UTC)
Dmitriy_Zh

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

Группы: Участники
Зарегистрирован: 25.09.2019(UTC)
Сообщений: 14

Добрый день! Есть у кого-нить примеры конвертов версии 1.2 и 1.3 ?
Offline Dmitriy_Zh  
#115 Оставлено : 26 сентября 2019 г. 13:38:11(UTC)
Dmitriy_Zh

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

Группы: Участники
Зарегистрирован: 25.09.2019(UTC)
Сообщений: 14

Всем привет! Пытаюсь подписать пример: SendRequestRequestNoAttach
проверка документа через метод signedXml.CheckSignature() проходит успешно. На сайте смэва получаю ошибку: ЭП-ОВ не подтверждена: #SIGNED_BY_CONSUMER Ошибка проверки ЭП: Нарушена целостность ЭП
Помогите пожалуйста разобраться, в чем может быть дело. Все сообщения в ветке прочитал, решение не нашел. Хэши исходного и полученного документа совпадают

Код подписи:



Полученный документ:

Offline two_oceans  
#116 Оставлено : 27 сентября 2019 г. 7:06:14(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Лучше если прикрепите файл xml вложением или в спойлере сделаете еще вставку кодом (тип подсветки кода - Plain), форум искажает содержимое xml, не обрамленное в тег кода, и проверять становится бесполезно.

Что удалось понять: алгоритм подписи у Вас указан гост-2012, а алгоритм хэша гост-94 (то есть остался от подписи гост-2001), такое сочетание не поддерживается СМЭВ, хотя технически не запрещено стандартом xmldsig и может проходить проверку где-то еще. Для работы в СМЭВ нужно ориентироваться на алгоритм ключа в сертификате и либо поменять алгоритм подписи на гост-2001 либо поменять алгоритм хэша на гост-2012. Обратите внимание, что хэш гост-94 для подписания действует до 31 декабря 2019 года (как и схема подписи гост-2001, в которую он входит), после этого срока будет использоваться только для проверки.

В сертификате открытый ключ гост-2012, значит все-таки нужно поменять хэш на гост-2012 чтобы вся схема стала согласованной (у Вас закомментировано для DigestMethod Algorithm значение гост-2012).

UPD: Тоже сейчас перестраиваю свою программу на смэв3, так что результат трансформа смэв у меня похоже сломан (неправильные текстовые узлы) и хэш не совпадает. Проверка SignatureValue также показывает ошибку.

Получил в полуручном режиме текст после трансформов (заменил ручную сломанные значения текстовых узлов в выданном моей программой), хэш действительно указан верный по алгоритму гост-2001 /jXl70XwnttJB5sSokwh8SaVHwo2gjgILSu0qBaLUAo=. Для справки, по алгоритму гост-2012 256 хеш от этих же данных получился:
46B47D8A0F24E198AC2A1B0CA6660863B22A6FCC8ABFE975323160D6427D795D
RrR9ig8k4ZisKhsMpmYIY7Iqb8yKv+l1MjFg1kJ9eV0=
Остается выяснить что не так с SignatureValue.

Отредактировано пользователем 27 сентября 2019 г. 8:11:19(UTC)  | Причина: Не указана

Offline Dmitriy_Zh  
#117 Оставлено : 27 сентября 2019 г. 8:45:47(UTC)
Dmitriy_Zh

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

Группы: Участники
Зарегистрирован: 25.09.2019(UTC)
Сообщений: 14

Поменял алгоритм. Хэш совпал: RrR9ig8k4ZisKhsMpmYIY7Iqb8yKv+l1MjFg1kJ9eV0=
Получил XML:




Может быть как-то неправильно вставляю данные подписи в файл?
И может быть дело в том, что сертификат тестовый от крипто про.
Не получается именно решить проблему с подписью. Что самое интересное, проверка SignedXml проходит успешно.
А сторонними средствами проверки ЭЦП - нет. Данные после трансформации доставал и пробовал проверить данные + подпись.
Во всех системах пишет, что данные не соответствуют подписи.
Собственные идеи на этот счет закончились :(
Offline two_oceans  
#118 Оставлено : 27 сентября 2019 г. 12:04:27(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Идеи... 1)
Код:
AssignNameSpacePrefixToElementTree(signatureXml, "ds"); //добавляем ds в элемент подписи
Это однозначно поменяет SignedInfo уже после подписания (и после проверки - проверка ничего не выявит) и SignatureValue станет недействительное. Попробуйте без этой строки.

2) По требованиям СМЭВ 3 сама подпись (тег Signature и его потомки) должна быть сформирована без каких либо символов whitespace между тегами, то есть без пробелов, переводов строки и табуляций между > одного тега и < следующего. Смэвовский трансформ уничтожает почти все whitespace так что на DigestValue влияние минимальное, но на signedInfo и SignatureValue может влиять whitespace, так как там смэвовский трансформ не задействован, это исправляется данным требованием.

3) вроде бы Envelope и Body не нужны в случае СМЭВ 3. На практике еще не проверял (не допилил), но в форму контроля на технологическом портале СМЭВ 3 успешно принимается текст запроса/ответа без них (корневой тег документа SendRequestRequest GetResponseResponse).
4) enveloped трансформ в случае СМЭВ срабатывает вхолостую, можете убрать, на результат не влияет.

Отредактировано пользователем 27 сентября 2019 г. 12:05:16(UTC)  | Причина: Не указана

Offline Dmitriy_Zh  
#119 Оставлено : 27 сентября 2019 г. 13:19:31(UTC)
Dmitriy_Zh

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

Группы: Участники
Зарегистрирован: 25.09.2019(UTC)
Сообщений: 14

Автор: two_oceans Перейти к цитате
Идеи... 1)
Код:
AssignNameSpacePrefixToElementTree(signatureXml, "ds"); //добавляем ds в элемент подписи
Это однозначно поменяет SignedInfo уже после подписания (и после проверки - проверка ничего не выявит) и SignatureValue станет недействительное. Попробуйте без этой строки.

2) По требованиям СМЭВ 3 сама подпись (тег Signature и его потомки) должна быть сформирована без каких либо символов whitespace между тегами, то есть без пробелов, переводов строки и табуляций между > одного тега и < следующего. Смэвовский трансформ уничтожает почти все whitespace так что на DigestValue влияние минимальное, но на signedInfo и SignatureValue может влиять whitespace, так как там смэвовский трансформ не задействован, это исправляется данным требованием.

3) вроде бы Envelope и Body не нужны в случае СМЭВ 3. На практике еще не проверял (не допилил), но в форму контроля на технологическом портале СМЭВ 3 успешно принимается текст запроса/ответа без них (корневой тег документа SendRequestRequest GetResponseResponse).
4) enveloped трансформ в случае СМЭВ срабатывает вхолостую, можете убрать, на результат не влияет.


По п1: не очень понял, каким образом тогда добавлять необходимые namespace ns? есть какое-нибудь решение? Пробовал без этого неймспейса, форма проверки XML выдаёт ошибку
По п2: переносы строк добавил исключительно для читабельности, никаких пробелов и перенос строк там нет
По п3: это просто часть самого примера, уберу
По п4: уберу

Вопрос решился удалением кода П1. Спасибо большое

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

Offline HF_HF  
#120 Оставлено : 30 сентября 2019 г. 16:05:55(UTC)
HF_HF

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

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

Сказал «Спасибо»: 5 раз
Поблагодарили: 1 раз в 1 постах
Всем привет.
Сейчас пишу wcf сервис для отправки файлов через СМЭВ 3 путем выкладывания через FTP и используя сервис 30271 ПФР
Схема взаимодействия 10.10.I-1.0.3 скоро закончу проект, осталось логирование в БД дописать.

Проблемы которые были при формирование классов используя WSDL СМЭВ 3
http://esb.smev.vpn:10180/serviceSmev3Prod/Smev3Prod?wsdl

Исправил следующие проблемы:
Коммуникационный объект System.ServiceModel.ChannelFactory`1[SMEV3Services.SMEV3.Smev3ProdPortType] нельзя использовать для связи, так как он находится в состоянии Faulted.

Обнаружено несколько элементов MessageEncodingBindingElement в BindingParameters контекста BindingContext. Это обычно связано с наличием нескольких элементов MessageEncodingBindingElements в CustomBinding. Удалите все элементы, кроме одного.

Невозможно создать временный класс (результат=1).
error CS0030: Cannot convert type 'SMEV3Services.SMEV3.AttachmentContentType' to 'SMEV3Services.SMEV3.AttachmentContentList'
error CS0030: Cannot convert type 'SMEV3Services.SMEV3.AttachmentContentType' to 'SMEV3Services.SMEV3.AttachmentContentList'
error CS0029: Cannot implicitly convert type 'SMEV3Services.SMEV3.AttachmentContentList' to 'SMEV3Services.SMEV3.AttachmentContentType'
error CS0029: Cannot implicitly convert type 'SMEV3Services.SMEV3.AttachmentContentList' to 'SMEV3Services.SMEV3.AttachmentContentType'


Сервер не предоставил значащий ответ.
Это может быть вызвано несоответствием контракта, преждевременным завершением сеанса или внутренней ошибкой сервера.

Указанный тип не был распознан: имя="SmevFault", пространство имен="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/basic/1.1",
в <TargetMessageIsNotFound xmlns='urn://x-artefacts-smev-gov-ru/services/message-exchange/types/faults/1.1'>.

Вот пример кода на C# по крайне мере можно будет скопировать к себе в проект код который я допилил из-за того что СМЭВ 3 написан на java и C# криво формирует классы.
Есть кому интересно?
https://gitlab.com/Projects_v.a.andiev/smev3

Отредактировано пользователем 4 октября 2019 г. 15:46:26(UTC)  | Причина: Не указана

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