64 / 55 / 1
Регистрация: 01.04.2016
Сообщений: 345
|
||||||
1 | ||||||
.NET 4.x Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel06.04.2017, 22:27. Показов 94119. Ответов 244
Решил создать отдельную тему, так как в теме Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4) - C# WCF уже можно заблудиться.
Причиной написания данной куклы/тестового приложения стало желание избавиться от зависимости от Крипто .NET. За прошедший год с момента начала использования Крипто .NET у меня к нему накопился ряд претензий, таких как: 1. Работа только с одним, своим, криптопровайдером 2. Навязчивая загрузка во все приложения, даже туда, где он не нужен Как следствие, это приводит к невозможности использования ряда приложений, таких как, например, NUnit Framework Не хочу сказать ничего плохого в адрес разработчиков КриптоКом. Они и сами признают на своем форуме, что внедрение чужеродных алгоритмов шифрования в операционные системы Windows это очень непростая задача. Но все-таки в результате Крипто .NET получился, по моему опыту, настолько глючным, что пользоваться им в работе становится весьма обременительным. Предлагаемая кукла обеспечивает работу с ГИС ЖКХ без настоятельно навязываемых Ланитом продуктов КриптоКом, таких как stunnel и Крипто .NET. Для работы используются стандартные вызовы CryptoAPI, так что криптопровайдера установить придется, соответствующего полученному в УЦ ключу, CryptoPro CSP или ViPNet CSP. Что было сделано: 1. За основу была взята реализация springjazzy (https://github.com/springjazzy/Xades) выложенная с составе примера начального уровня выложенного Anvano. Учтены/приняты во внимание замечания других участников форума 2. Была написана обертка для работы с CryptoAPI (с использованием найденного куска от Microsoft), в ней был выделен интерфейс ICryptoProvider декларирующий минимально необходимый функционал для подписи 3. Реализация springjazzy из пункта 1 была подвергнута переработке в следующих направлениях: 3.1. Был выкинут весь неиспользуемый функционал класса XadesSignedXml для облегчения чтения и понимания, что там вообще происходит 3.2. Последовательным движением в глубину текстов библиотеки Xades и замены рефлексии методов .NET на куски текста Microsoft удалось избавить класс XadesSignedXml от криптографии .NET. Вызовы криптографии .NET были заменены на вызовы трех методов ICryptoProvider из п.2 Таким образом, сейчас подпись Xades в данном приложении осуществляется следующим образом:
С ключами Инфотекса у меня в настоящее время возможности проверить работоспособность нет, так как тестовый ключ Инфотекса уже не рабочий. У кого есть возможность проверить, просьба сообщить о результатах. Из имеющихся в настоящий момент не исправленных глюков - ошибка связанная с некорректным освобождением памяти при выходе при приложения. Подозреваю, что ошибка где-то в обертке CryptoAPI, но где - пока непонятно. В прилагаемом архиве исходные тексты куклы и релизная сборка приложения. Отзывы и конструктивная критика принимаются. С уважением к участникам форума, hhmm Дополнение от 18.10.2018: В данной теме есть и другие решения предложенные участниками, вынесены в шапку для облегчения навигации: 1. gizmo23 предложил свой вариант библиотеки. В основу был взят тот же проект signature-demo-net. Все ссылки в сообщении. Первоначальное обсуждение продолжалось до post10628102 2. umatkot предложил утилиту для проверки работоспособности сервера ГИС ЖКХ. Утилита (по словам автора) использует еще более усовершенствованную версию библиотеки подписи. 3. Дополнение на тему альтернативных криптопровайдеров: месяц назад один из клиентов предоставил на опыты реальный, не тестовый ключ, ViPNet CSP выданный настоящим удостоверяющим центром. Попытка прикрутить провайдера ViPNet CSP к ГИС ЖКХ успехом не увенчалась. Несмотря на то, что на машину удалось установить два криптопровайдера одновременно и каждый из них отдельно видел и успешно читал свои ключи, попытка подключиться с ключом ViPNet CSP к ППАК ГИС ЖКХ не удалась. Проблемы возникли на транспортном уровне, такие же какие бывают у Крипто .Net клиент когда обновляется .Net Framework - 'Unable establish secure SSL/TLS channel to api.dom.dosuslugi.ru'. До подписи дело не дошло. То ли там что-то еще нужно докупать у Инфотекса, то ли ViPNet CSP не может внедриться на транспортном уровне. В общем, у меня не получилось. Потратил один день, после чего эксперименты прекратил. Дополнение от 24.01.2018: 4. vst377 предложил набор классов реализующих работу в ГИС ЖКХ файловых сервисов.
11
|
06.04.2017, 22:27 | |
Ответы с готовыми решениями:
244
.NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (2) Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4) Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5) Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (3) |
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
16.10.2017, 09:35 | 61 |
vst377, у меня на работе проксик не даёт выложить файл. В кукле ланита используется много чего, что уже давно изменено и усовершенствовано и на продуктовых системах этих Exception не вылетает.
Я чуть позже выложу этот файл и сами можете глянуть, как там устроена подпись.
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
16.10.2017, 11:27 | 62 |
Недавно на сервере ППАК (сегодня) при экспорте дома, ГИС стала выдавать непонятно что.
WebRequestHandler десериализатора XML ругался на то, что в корневом элементе XML найдено что-то, что мешает десериализации. Для того, чтобы понять точно, что приходит с ГИС была сделана "голая кукла Ланит", которая имеет в себе только функционал отправки запроса по XML шаблону и подписи его без КриптоПро.NET и КриптоКом "радиотунеллей". В алгоритме подписи был использован функционал подписи GostCryptography. Эта программа не является ничем иным как тестовым тупым запросником-ответчиком с ГИС. Чтобы не пришлось тратить время на изготовления данного инструмента, я его решил выложить сюда для всех кто работает с ГИС через сервисы по сертификату. В этой версии нет вылетов при отсутствии signed-data-container. Библиотека подписи законченная и усовершенствованная на вызовы из рефлексии в рабочем цикле приложения (хотя, там есть ещё пара моментов, чтобы ну совсем всё оптимизировать). Прошу автора поместить этот запросник-ответчик в шапку.
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
16.10.2017, 11:27 | 63 |
Недавно на сервере ППАК (сегодня) при экспорте дома, ГИС стала выдавать непонятно что.
WebRequestHandler десериализатора XML ругался на то, что в корневом элементе XML найдено что-то, что мешает десериализации. Для того, чтобы понять точно, что приходит с ГИС была сделана "голая кукла Ланит", которая имеет в себе только функционал отправки запроса по XML шаблону и подписи его без КриптоПро.NET и КриптоКом "радиотунеллей". В алгоритме подписи был использован функционал подписи GostCryptography. Эта программа не является ничем иным как тестовым тупым запросником-ответчиком с ГИС. Чтобы не пришлось тратить время на изготовления данного инструмента, я его решил выложить сюда для всех кто работает с ГИС через сервисы по сертификату. В этой версии нет вылетов при отсутствии signed-data-container. Библиотека подписи законченная и усовершенствованная на вызовы из рефлексии в рабочем цикле приложения (хотя, там есть ещё пара моментов, чтобы ну совсем всё оптимизировать). Прошу автора поместить этот запросник-ответчик в шапку.
0
|
64 / 55 / 1
Регистрация: 01.04.2016
Сообщений: 345
|
|
16.10.2017, 11:47 [ТС] | 64 |
Вы можете немного доработать ваше приложение в следующих аспектах?
1. Скомпилировать и выложить в архиве Release версию, чтобы ее не нужно было собирать 2. Добавить диалог выбора сертификата - сейчас приложение падает даже при прописанном в GisServiceTest.exe.config правильном отпечатке.
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
16.10.2017, 14:16 | 65 |
hhmm, там указывается local_machine - расположение сертификата, нужно поставить current_user.
Завтра переделаю, хоп. Я не подумал, что у всех в curernt_user.
0
|
64 / 55 / 1
Регистрация: 01.04.2016
Сообщений: 345
|
|
16.10.2017, 14:44 [ТС] | 66 |
Угу, вписал current_user и еще пароль для контейнера. Теперь не падает.
В окошке видно The remote server returned an error: (500) Internal Server Error., т.е. наверное программа работает а ГИС ЖКХ как обычно
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
17.10.2017, 02:23 | 67 |
hhmm, странно...
Мне прислали, что они исправили ошибку, я всё равно продолжаю получать Error while serializing JAXB object Он должен выводить либо исключение, либо строку, которую он получает с сервера.... Заметил одну штуку, если указать прокси для WebRequest, и пропустить трафик через Fiddler, то ответ от сервера несколько отличается - в Fiddler видно, что сервер пишет: "не найдена ИС с данным сертификатом", а Exception содержит просто ошибку сервера без какой-либо информации. Короче, я доработаю её ещё немного.
0
|
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
|
|
17.10.2017, 04:21 | 68 |
У меня тоже самое. При запросе getState() для получения результата асинхронной операции importMeteringDeviceData вылетает
Операция завершилась ошибкой: Адресат вызова создал исключение. Имеется проблема в XML-данных, полученных из сети. Подробнее см. в описании внутреннего исключения. Эти данные на корневом уровне недопустимы. Строка 1, позиция 1. Ошибка возникла в воскресенье, где-то после 11-00 МСК, до этого времени всё работало. Сделал обращение в тех.поддержку. Жду ответа от них.
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
17.10.2017, 05:46 | 69 |
Версия тупого запросника-ответчика (тупая кукла Ланита 0.2).
Микроинструкция: В папке Requests находятся доступные запросы. Имя файла запроса совпадает с именем метода Soap. MessageGuid, Date в заголовке ставятся автоматом. В папке приложения после цикла работы выводится (имя метода Soap)_(Request/Response).xml Для поиска сертификата нужно указать его Fingerprint в конфиге. Сертификаты ищутся в хранилище пользователя. Там же проставляется OrgPPAID и адрес endpoint. Скомпилировал Debug и Release во избежании ковыряния в коде.
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
17.10.2017, 05:50 | 70 |
Я не смог найти в GostCryptography метод вызова окна с сертами.
Не знаю, если его нет, то можно сделать самому. Добавлено через 3 минуты Да, тоже самое. Я им написал, они ответили, что исправили, но всё равно на некоторых объектах не канает. Сделай запрос с моим запросником-ответчиком, потренируйся. Сам шаблон можно сделать из SOAPUI. Если получится на выходных сделаю более продвинутую версию(GUI) с выбором платформы, но он так и останется тупым(запросник-ответчик).
0
|
64 / 55 / 1
Регистрация: 01.04.2016
Сообщений: 345
|
|
17.10.2017, 22:15 [ТС] | 71 |
Не по теме:
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
18.10.2017, 03:16 | 72 |
hhmm,
Не по теме: Тоже не по теме. Есть проект, который генерирует более аккуратный код для C# из XSD, его можно переделать для генерации XML и эти XML динамически получать с конкретной платформы для куклы.
0
|
64 / 55 / 1
Регистрация: 01.04.2016
Сообщений: 345
|
|
19.10.2017, 22:40 [ТС] | 73 |
Вы, уважаемый umatkot, слишком хорошо о них думаете
Сегодня появился топик в жире - Несовпадение количества CommonResult при импорте ДРСО, так там люди пишут, что:
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
20.10.2017, 03:08 | 74 |
Не по теме: Я всё понимаю, но не нужна там рекурсия - не нужна. Вы оправдываете своё решение, потому-что вначале не разобрались в схемах от них - в остальных уровнях не может быть ошибок. Если CommonResult дублируются и дублируются сами объекты (не только TransportGuid), то от такого выброса поможет элементарная группировка по TransportGuid. Если дублируется TransportGuid, но текст ошибки - разный, то при группировке по TransportGuid, можно элементарно агрегировать эти строки в массив или одну большую портянку. :-) У меня вообще нет доступа к тому хелпдеску
0
|
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
|
||||||
10.11.2017, 11:19 | 75 | |||||
Уважаемый hhmm!
Можете дать наводку или подсказать решение. Столкнулся с проблемой. SvcUtil.exe при обработке описания сервисов ГИС ЖКХ не учитывает специфику в типах decimal из файла hcs_wsdl_xsd\lib\hcs-bills-base.xsd. Например, при сериализации типа SmallMoneyType
не обрабатывается) и дробная часть не приводится к виду 0.00. ГИС ЖКХ на такие вещи выдаёт ошибку. Можно как-то исправить данную проблему малой кровью? Как я понимаю, нужно писать свой обработчик для SmallMoneyType и других подобных типов? На сколько это сложно сделать?
0
|
64 / 55 / 1
Регистрация: 01.04.2016
Сообщений: 345
|
||||||
10.11.2017, 11:39 [ТС] | 76 | |||||
На вход нужно подавать округленные значения:
0
|
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
|
|||||||||||
10.11.2017, 12:48 | 77 | ||||||||||
Ну а если у меня 12.5 ? Как я понимаю ГИС ЖКХ ждёт что-то типа 12.50
Вот пример запроса: Кликните здесь для просмотра всего текста
и ответ
Добавлено через 30 минут Наверное опять система колдобится
0
|
64 / 55 / 1
Регистрация: 01.04.2016
Сообщений: 345
|
|
10.11.2017, 13:13 [ТС] | 78 |
Судя по RegExp <xsattern value="\d+(\.\d{2})?"/> должно быть два знака, значит
при присвоении значения нужно подать 12.50, что можно получить вызвав Round2
0
|
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
|
||||||
13.11.2017, 06:25 | 79 | |||||
Очень интересно... А разве тут не такая ситуация?
0
|
64 / 55 / 1
Регистрация: 01.04.2016
Сообщений: 345
|
|
13.11.2017, 10:13 [ТС] | 80 |
0
|
13.11.2017, 10:13 | |
13.11.2017, 10:13 | |
Помогаю со студенческими работами здесь
80
Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ Осуществить подпись SOAP, по стандартам ГИС ГМП, принятого через TCP сокет Ошибки интеграции ГИС ЖКХ Soap, Java, Гис ЖКХ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |