|
1 / 1 / 0
Регистрация: 16.12.2015
Сообщений: 1
|
||||||||||||||||
.NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ16.12.2015, 11:46. Показов 173864. Ответов 999
Здравствуйте!
Передо мной стоит задача интеграции с системой ГИС ЖКХ (https://dom.gosuslugi.ru/) программой, написанной на языке C#, .NET Framework 4 Данный сервис предоставляет SOAP веб-сервисы для приема и передачи информации, соединение защищается сертификатом по алгоритму ГОСТ. Каждый элемент внутри тела SOAP сообщения подписывается сигнатурой XAdES-BES. На данный момент для осуществления защищённого соединения я использую «МагПро КриптоТуннель» (stunnel) со следующими настройками: Конфигурация stunnel (stunnel.conf)
verify=2
client=yes CAFile=CA-test2-cryptopro.pem engine=gost usb_eject=yes sslVersion=TLSv1 taskbar=yes DEBUG=7 [pseudo-https] protocol = http accept = 127.0.0.1:8754 connect = 54.76.42.99:60045 ciphers = GOST2001-GOST89-GOST89 TIMEOUTclose = 0 cert=test.pem key=test.key Для обмена SOAP сообщениями я использую стандартный сервис WCF с прокси-классами, сгенерированные из WSDL файлов. Для подписи SOAP сообщений сигнатурой использую ниже представленный класс: C#. Класс для подписи исходного SOAP сообщения
В результате после подписи элемента "exportNsiItemRequest" SOAP-сообщение выглядит следующим образом: XML. Подписанное SOAP сообщение
Проблема заключается в том, что ответ от сервера приходит следующий: ru.lanit.security.crypto.CryptoException : ЭП не прошла проверку: Invalid XML Signature Текст ответного сообщения следующий: XML. SOAP-ответ от сервера
Подскажите пожалуйста: 1) Как сделать валидную подпись, которая будет проходить проверку сервером, используя WCF ? 2) Как с помощью средств CryptoPro.NET отказаться от использования «МагПро КриптоТуннель» ?
1
|
||||||||||||||||
| 16.12.2015, 11:46 | |
|
Ответы с готовыми решениями:
999
Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (3) Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5) Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4) |
|
13 / 13 / 0
Регистрация: 25.01.2016
Сообщений: 38
|
|||||||||||
| 25.01.2016, 13:36 | |||||||||||
|
Тоже работаем над интеграцией с ГИС ЖКХ. Так же по тестовой организации c ОГРН 1095658018642 Нет объектов для экспорта. Написали в техподдержку. Обрабатывают уже две недели. Интеграцию делаем на C#. Создал прокси-класс через студию указав в качестве url сервиса file:///<путь>/hcs-organizations-registry-service-7.3.0.1.wsdl.
Через stunnel нормально работает. Сейчас пробую самому создавать канал по примеру: http://cpdn.cryptopro.ru/conte... 631ed2.htm. Сертификат установлен в Личное. Сертификат Тестовый УЦ ООО "КРИПТО-ПРО" установлен в доверенные корневые центры. При попытке вызвать методы сервиса - ошибка: System.ServiceModel.Security.SecurityNeg otiationException: Не удалось установить доверительные отношения для защищенного канала SSL/TLS с полномочиями "54.76.42.99:60045". ---> System.Net.WebException: Базовое соединение закрыто: Не удалось установить доверительные отношения для защищенного канала SSL/TLS. ---> System.Security.Authentication.Authentic ationException: Удаленный сертификат недействителен согласно результатам проверки подлинности. Если добавить
FMT001300: Некорректный XML (Дополнительные сведения об ошибке — Test.GISGKHServices.Fault). Через stunnel при этом всё нормально проходит. Для включения шифрования изменяю только Добавлено через 21 минуту Для шифрования изменяю только app.config Добавлено через 1 час 59 минут Если кому интересно, то нашел способ ходить по https без туннеля. Прокси класс сгенерировал с помощью wsdl.exe. Он создается как наследник класса SoapHttpClientProtocol. Ему просто добавляем наш сертификат через ClientCertificates.Add. И запрос нормально обрабатывается. Единственное пришлось доработать напильником класс, т.к. он не правильно кодировку обрабатывал и ответ от сервера приходил вопросиками, вместо русских букв. Просто перекрыл один метод класса:
Пока воевал с https техподдержка прислала ответ, что: Ошибка исправлена. Метод exportOrgRegistry возвращает корректные данные. Видать при обработке заявки что-то они куда-то недовносят, т.к. тестовый сайт данные по поставщику информации отображает и в поиске находит, а api не дает организацию. Теперь свою тестовую контору видим методом exportOrgRegistryRequest.
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 21.01.2016
Сообщений: 20
|
|
| 25.01.2016, 20:22 | |
|
Araney, не получается сгенерировать проксикласс с помощью wsdl.exe
использую wsdl и xsd с сайта ГИС Что то нужно дополнительно сделать? или какой ключ указать.. хочу сравнить эти классы с тем, что генериурет VS через веб сервисы Добавлено через 9 минут разобрался, надо было доуказать схемы Добавлено через 1 час 59 минут Кому то удалось корректно подписать xml?
0
|
|
|
13 / 13 / 0
Регистрация: 25.01.2016
Сообщений: 38
|
|||||||||||
| 26.01.2016, 14:08 | |||||||||||
|
Для настройки соединения https для класса, сгенерированного через студию подходит вариант с basicHttpBinding. Почему-то его сразу не использовал, а пробовал wsHttpBinding и customBinding.
И ещё надо или в программе вызвать:
Добавлено через 3 минуты По поводу подписи - вот человек разбирался https://www.cryptopro.ru/forum... sts&t=9870. Сам пока не смотрел - на неделе попробую разобраться. Добавлено через 7 часов 9 минут versh23, Как писал выше, классы получаемые через студию (Добавить ссылку на службу) и через утилиту wsdl отличаются. Через wsdl получается наследник System.Web.Services.Protocols.SoapHttpCl ientProtocol, через студию (и наверно утилиту svcutil) System.ServiceModel.ClientBase.
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 21.01.2016
Сообщений: 20
|
|
| 28.01.2016, 14:44 | |
|
я пока остановился на wcf, проще модифицировать.
Добавлено через 6 часов 27 минут стала беспокоить скорость работы сервиса.. У меня получается в среднем 1.4с на внесение 1 дома. А таких домов будет больше 100 тысяч. Выполняю в синхронном режиме. Как вариант сделать в асинхронном либо на тестовом стенде низкая производительность.. Как вы будете решать данную проблему? Поделитесь вообще вашими успехами - интересно
0
|
|
|
13 / 13 / 0
Регистрация: 25.01.2016
Сообщений: 38
|
|
| 02.02.2016, 10:41 | |
|
У кого-нибудь получилось через wcf подписывать сообщения?
0
|
|
|
0 / 0 / 0
Регистрация: 21.01.2016
Сообщений: 20
|
|
| 02.02.2016, 11:21 | |
|
Araney, а не через wcf ?
0
|
|
|
13 / 13 / 0
Регистрация: 25.01.2016
Сообщений: 38
|
|
| 02.02.2016, 15:46 | |
|
versh23, Как подписывать нашел по ссылке что выкладывал выше. Самому почти ничего и не надо делать. Вот его обновленный проект: https://github.com/springjazzy/Xades
Там уже даже создан класс - обертка, на вход которого подаешь xml без подписи и получаешь с подписью (GisSignatureHelper.GetSignedRequestXade s). На ГИС ЖКХ проходит.
0
|
|
|
0 / 0 / 0
Регистрация: 21.01.2016
Сообщений: 20
|
|
| 02.02.2016, 18:07 | |
|
Araney, подписать(подменить) xml можно через инспекторов https://msdn.microsoft.com/en-... .110).aspx
а меня ругается, что закрытый ключ не поддерживается. Скачал отсюда https://www.cryptopro.ru/products/net/downloads КриптоПро .NET и NETSDK-x64-rus.msi, поставил со всеми галками. Проект собирается на 4.0 и все равно не работает.. не было такого?
0
|
|
|
13 / 13 / 0
Регистрация: 25.01.2016
Сообщений: 38
|
|
| 03.02.2016, 06:44 | |
|
versh23, В самой форме ругается, когда ставишь галку включать закрытый ключ. На преобразование типов. Но я сделал свою. Сейчас выложу.
0
|
|
|
13 / 13 / 0
Регистрация: 25.01.2016
Сообщений: 38
|
|
| 03.02.2016, 10:19 | |
|
Вот проект - простая форма, подписывающая сообщение, которое например через SoapUI можно потестить. Спасибо разработчику https://github.com/springjazzy
1
|
|
|
0 / 0 / 0
Регистрация: 21.01.2016
Сообщений: 20
|
|
| 03.02.2016, 10:54 | |
|
Araney, А вы можете попробовать подписать запрос на получение информации о доме(exportHouseRequest), например? у меня на нем получается "внутренняя ошибка", а в запросе (который в вашем приложении) все без ошибок.
еще заметил, что вы тоже это место подправили ![]() https://github.com/springjazzy... es.cs#L254
0
|
|
|
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 3
|
|
| 03.02.2016, 12:05 | |
|
Пробую пользоваться методом ExportHouseData, выводится ошибка что "Сертификат выдан не аккредитованным УЦ", хотя подпись была получена у аккредитованного УЦ и проверяется сервисом на госуслугах.
Кто-нибудь сталкивался?
0
|
|
|
6 / 6 / 0
Регистрация: 24.12.2015
Сообщений: 41
|
|
| 03.02.2016, 12:53 | |
|
дайте xml запроса и ответа
Добавлено через 7 минут Araney, я не особо в программировании, тем более на C#. у меня ошибка после нажатия кнопки "Продписать" "Неправильный дескриптор m_safeCertContext."
0
|
|
|
0 / 0 / 0
Регистрация: 21.01.2016
Сообщений: 20
|
|||||||||||
| 03.02.2016, 14:37 | |||||||||||
|
Кликните здесь для просмотра всего текста
все хорошо, но стоит подписать Кликните здесь для просмотра всего текста
внутренняя ошибка
0
|
|||||||||||
|
13 / 13 / 0
Регистрация: 25.01.2016
Сообщений: 38
|
|
| 03.02.2016, 15:05 | |
|
Dr_Elvis, Там нужно, чтобы подписываемый элемент имел Id="signed-data-container". По нему жестко ищется подписываемый блок
0
|
|
|
6 / 6 / 0
Регистрация: 24.12.2015
Сообщений: 41
|
|
| 03.02.2016, 16:36 | |
|
versh23, замените в элементе X509IssuerName "E" на OID 1.2.840.113549.1.9.1
так же у вас нет инн, огрн поставщика от которого вы отправляете. OID ИНН = 1.2.643.3.131.1.1 OID ОГРН = 1.2.643.100.1 и сертификат у вас без инн и огрн, переделайте https://www.cryptopro.ru/ui/Re... ubject.asp Добавлено через 3 минуты Araney, у меня даже не подписывается xml которая в поле по умолчанию стоит. пробовал другой - тоже самое, хотя Id="signed-data-container"
0
|
|
|
0 / 0 / 0
Регистрация: 21.01.2016
Сообщений: 20
|
|
| 03.02.2016, 16:50 | |
|
Dr_Elvis, спасибо. переделаю сертификат.
Но почему тогда подписанный запрос на exportDataProviderRequest проходит?
0
|
|
|
6 / 6 / 0
Регистрация: 24.12.2015
Сообщений: 41
|
|
| 03.02.2016, 16:53 | |
|
versh23, потому что organizations-registry не проверяет подпись. Логично: подпись должна быть поставщика данных, то есть подпись должна совпадать с SenderID, а в organizations-registry не используется SenderID, потому что еще не привязан поставщик. этот сервис для ИС, а не для поставщика.
1
|
|
|
1 / 1 / 0
Регистрация: 03.02.2016
Сообщений: 13
|
||||||
| 04.02.2016, 05:42 | ||||||
|
Здравствуйте. Тоже интегрирую в ГИС свой арм.
Подскажите пожалуйста, что-то никак не могу понять: что конкретно нужно давать на вход для подписи? какой xml? Какую-то одну ноду? или что? Например, у меня есть запрос:
или на вход давать только один какой-то элемент? И вообще, подписывается ведь только Digest (хэш), а этот хэш на основе какого xml вычисляется? С подписью не имел дело никогда, вот разбираюсь сейчас, так что может быть вопросы глупые. И следом еще вопрос: у меня есть метод, который подписывает текст нужным ГОСТ алгоритмом через библиотеку BouncyCastle. Можно ли ему скармливать весь этот xml? Или XAdES-BES метод как-то подругому подписывает? Спасибо.
0
|
||||||
|
13 / 13 / 0
Регистрация: 25.01.2016
Сообщений: 38
|
|
| 04.02.2016, 07:11 | |
|
mortifactor, подписывается элемент org:exportOrgRegistryRequest, но ему надо указать атрибут Id. Все созданные ноды внутрь этого элемента пихаются. Пример подписи санного элемента выше.
Добавлено через 59 секунд Dr_Elvis, Ошибка вроде из библиотеки криптопрошной. Добавлено через 7 минут Пока не знаю как лучше реализовать - получается, что нужно сообщения от разных поставщиков данных подписывать своим сертификатом. У нас система одна на многих поставщиков. Либо держать у себя все ЭЦП, что думаю юридически не верно, либо нужно участие поставщика в отправке информации - уходим от автономной работы системы. Разработчик https://github.com/springjazzy смотрю делает клиент - серверную систему. Сервер формирует сообщение, клиент его подписывает.
0
|
|
| 04.02.2016, 07:11 | |
|
.NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (2) Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel Soap, Java, Гис ЖКХ
Интеграция с ГИС ЖКХ (ГЖ). 400 Bad request Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|