Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы и WCF
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.84/204: Рейтинг темы: голосов - 204, средняя оценка - 4.84
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
1
.NET 4.x

Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel

06.04.2017, 22:27. Просмотров 39889. Ответов 229


Решил создать отдельную тему, так как в теме Интеграция с ГИС ЖКХ. Подпись 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 в данном приложении осуществляется следующим образом:

C#
1
2
ICryptoProvider CryptoProvider = GetCryptoProvider(SigningSertificate);
signedXml.ComputeSignature(CryptoProvider.ComputeHash, CryptoProvider.ComputeSignature, CryptoProvider.ReverseSignature);
где:
  • signedXml - экземпляр класса XadesSignedXml из модифицированной библиотеки
  • ComputeHash - функция расчета хэша вида byte[] ComputeHash(byte[] Data)
  • ComputeSignature - функция расчета подписи вида byte[] ComputeSignature(byte[] Data)
  • ReverseSignature - свойство типа bool, показывающее библиотеке, нужно ли переворачивать полученную подпись:8 Выяснилась занятная деталь: Крипто .NET и CryptoPro CSP оба выдают верные подписи (для одного и того же сертификата), но одну из них нужно зеркально перевернуть, чтобы ее принял ГИС ЖКХ. Почему там сделано - не знаю, это наверное можно спросить в КриптоКом

  • Кукла проверена на машине где установлен как Крипто .NET так и CryptoPro CSP
  • После чего Крипто .NET был удален
  • Компьютер был перезагружен для завершения удаления (два раза, так как с первого раза Крипто .NET удаляться не захотел)
  • После этого осталась работоспособной только часть, работающая через CryptoApi

С ключами Инфотекса у меня в настоящее время возможности проверить работоспособность нет, так как тестовый ключ Инфотекса уже не рабочий.

У кого есть возможность проверить, просьба сообщить о результатах.

Из имеющихся в настоящий момент не исправленных глюков - ошибка связанная с некорректным освобождением памяти при выходе при приложения. Подозреваю, что ошибка где-то в обертке 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
Вложения
Тип файла: zip GisBusted.zip (4.17 Мб, 288 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2017, 22:27
Ответы с готовыми решениями:

.NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (2)
Начало темы здесь: https://www.cyberforum.ru/web-services-wcf/thread1615223.html umatkot, Да, к...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1800721.html Здравствуйте....

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1840159.html И так мы Я и...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (3)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1776736.html Кто нибудь знает...

229
11 / 11 / 0
Регистрация: 02.06.2017
Сообщений: 75
07.06.2017, 13:03 21
Заметил, что в файле GisBusted_production.config присутствуют не все сервисы, представленные в файлах описания hcs_wsdl_xsd_v.11.1.2.1. Поэтому попробовал сгенерировать классы по новой следующей командой:
Windows Batch file
1
SvcUtil.exe *.wsdl *.xsd /language:C# /namespace:*,GisBustedWsdlWrapper2 /out:GisBustedWsdlWrapper2.cs /config:GisBusted_production2.config
Оказалось, что файл конфигурации из вашего проекта (GisBusted_production.config) отличается от вновь сгенерированного (GisBusted_production2.config) отсутствием ряда параметров (closeTimeout, receiveTimeout, sendTimeout и т.д.) в тегах <binding>. Эти параметры дописаны вами вручную? И второй вопрос, в тех же тегах <binding> у вас идёт <security mode="None">, у меня <security mode="Transport" /> Как по вашему, <security mode="Transport" /> будет работать, или лучше переписать security mode в None ?
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
07.06.2017, 19:56  [ТС] 22
Цитата Сообщение от vst377 Посмотреть сообщение
отсутствием ряда параметров (closeTimeout, receiveTimeout, sendTimeout и т.д.) в тегах <binding>. Эти параметры дописаны вами вручную?
Если они не указаны, то будут использованы значения по умолчанию из библиотек WCF.
Они не особо и нужны, так как синхронные методы в реализации Ланита применимы только в очень ограниченном количестве случаев (загрузить список услуг - получится, а вот список лицевых - уже вряд ли, тут только XXXAsync).

Цитата Сообщение от vst377 Посмотреть сообщение
И второй вопрос, в тех же тегах <binding> у вас идёт <security mode="None">, у меня <security mode="Transport" /> Как по вашему, <security mode="Transport" /> будет работать, или лучше переписать security mode в None ?
Эту ручку крутить не нужно.

Подробнее об этом вы можете прочитать в книге WCF 4 WINDOWS COMMUNICATION FOUNDATION И .NET 4 ДЛЯ ПРОФЕССИОНАЛОВ, авторы: Пабло Сибраро, Курт Клайс, Фабио Коссолино, Йохан Грабнер.

Издания:

ISBN 978-5-8459-1713-3 (рус.) © Компьютерное изд-во “Диалектика”, 2011,
ISBN 978-0-470-56314-4 (англ.) © Wiley Publishing, Inc., 2010


Я для себя эту книгу нашел полезной.
1
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
08.06.2017, 07:12 23
Капец, они только начали что-то узнавать. Ребята - поищите по первой ветке - там валом исходников -- уже рабочие варианты, но только с КриптоПро.НЕТ, здесь вопрос про биндинги и про svcutil вообще не может быть раскрыт в силу оффтопика.

ХММ, я сегодня вылетел без предупреждения. Дело в том, что я очень часто запускаю тесты и у меня несколько раз выпадало сообщение об ошибке... Так как она появляется не часто, я её игнорировал, но наступил момент, когда мой компьютер просто перезагрузился - я подозреваю как раз то, что криптопровайдер используется, но по завершении работы не закрывается HCRYPTPROVHANDLE Safe контекста. Нам надо проверить этот момент.

https://www.cryptopro.ru/forum... sts&m=7370
0
11 / 11 / 0
Регистрация: 02.06.2017
Сообщений: 75
09.06.2017, 06:57 24
Эге-гей, поменьше напышенности, вал исходников мне не нужен, я взял этот проект и сейчас делаю наработки на нём. Из того, что уже успел сделать: детально разобрался в исходниках проекта (правда пока шифрования не касался), обновил GisBustedWsdlWrapper.cs до версии v.11.1.2.1 (тут много всяких нюансов), написал свой первый рабочий worker (exportOrgRegistryWorker).
Подтверждаю, иногда возникают ошибки с подписанием запросов, детально не разбирался пока в них. Причем по большей части ошибки вылезают при дебагинге в VS. Обычный запуск приложения работает без ошибок (у меня пока их не было). Встречал несколько разных Exception-ов, часть из них воспроизвести повторно не удалось.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
09.06.2017, 09:14 25
Цитата Сообщение от vst377 Посмотреть сообщение
Встречал несколько разных Exception-ов, часть из них воспроизвести повторно не удалось.
это как раз те вылеты, с которыми мы пытаемся бороться.
После нескольких десятков запусков, перезапусков приложения - система падает.
0
6 / 6 / 0
Регистрация: 21.04.2017
Сообщений: 28
10.07.2017, 12:45 26
Если кому пригодится немного усовершенствованный файл export.bat. Без жесткого прописывания папок с описанием сервисов. Есть пока минус путь к svcutil.exe прописывать все же придется и собственно путь к корневой папке со схемами.
1
Вложения
Тип файла: 7z exportall.7z (737 байт, 26 просмотров)
8 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 5
11.07.2017, 12:06 27
Могу предложить свою реализацию без Крипто.NET, с конфигурацией из кода https://github.com/gizmo75rus/HCS. За основу был взят signature-demo-net, так что пользуйтесь на здоровье.
0
0 / 0 / 0
Регистрация: 12.07.2017
Сообщений: 2
15.07.2017, 13:28 28
Доброго времени суток. Заранее извинюсь за глупый вопрос. Возникла необходимость работы с ГИС ЖКХ, как им ползоваться через эту программу? Надеюсь на понимание.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
15.07.2017, 15:07 29
kepka2009, Добрый час путник. Это не готовое решение, а его фундамент. Им пользоваться в чистом виде можно только если использовать как самодостаточное приложение. Смотрите настройки в конфиге, меняете на свои, запускаете, смотрите выполнение элементарных операций с порталом ГИС. Для работы с порталом вам требуется быть подключённым к рабочему стенду ГИС ЖКХ. Как это сделать - можно посмотреть в разделе регламенты и инструкции по своей форме управления. Чтобы "научить" проект делать что-то стоющее, вам потребуется по аналогии создать операции согласно приложению альбома ТФФ. Криптотуннель устанавливать не обязательно, как пишут в регламенте и в инструкции по тестированию. Пример, где взять документацию по работе для РСО (https://dom.gosuslugi.ru/files... 02c2250f1a)

Добавлено через 6 минут
Перед началом использования рекомендуется прочитать все пять веток другой темы, из которой выросла эта тема (можно даже бегло).
Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ
0
0 / 0 / 0
Регистрация: 12.07.2017
Сообщений: 2
15.07.2017, 15:18 30
umatkot, Большое Спасибо за ответ, в программировании я не силен, но вполне обучаем и понятлив, без этих навыков возможно всё это сделать? Приложение от автора этой темы я запустил, но что делать дальше вообще не пойму.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
16.07.2017, 04:25 31
kepka2009, отвечу прямо, что не все программисты сразу могут это сделать. Надо как минимум выучить язык C#.
После запуска нужно зарегистрироваться на тестовых стендах СИТ 1 и СИТ 2 - там возможен обмен по http - подключить Fiddler и смотреть как идут запросы, потом начать модифицировать новые сервисы и добавлять функционал. Тут надо набить руку, а это не быстро.
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
16.07.2017, 21:18  [ТС] 32
Цитата Сообщение от kepka2009 Посмотреть сообщение
Приложение от автора этой темы я запустил, но что делать дальше вообще не пойму.
Это приложение - всего лишь пример решения одной болезненной проблемы возникающей при решении задачи интеграции с ГИС ЖКХ через веб-сервисы.

Возможно, для формирования понятийной базы, вам сначала стоит попробовать поработать с ГИС ЖКХ через Excel файлы, это проще.
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
16.07.2017, 21:34  [ТС] 33
Цитата Сообщение от gizmo23 Посмотреть сообщение
Могу предложить свою реализацию без Крипто.NET, с конфигурацией из кода https://github.com/gizmo75rus/HCS. За основу был взят signature-demo-net, так что пользуйтесь на здоровье.
У меня ваш пример не собирается из-за отсутствующих ссылок.
0
Миниатюры
Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel  
11 / 11 / 0
Регистрация: 02.06.2017
Сообщений: 75
17.07.2017, 04:09 34
umatkot, Большое Спасибо за ответ, в программировании я не силен, но вполне обучаем и понятлив, без этих навыков возможно всё это сделать? Приложение от автора этой темы я запустил, но что делать дальше вообще не пойму.
Без навыков разработки на C# данное приложение никакой пользы вам не принесёт, так как оно является заготовкой, которая создаёт защищенное соединение с ГИС ЖКХ, подписывает запросы и получает ответы от портала, а так же может выводить эти запросы и ответы на экран. Для того, чтобы данное решение заработало вам нужно будет как минимум 1) обновить GisBustedWsdlWrapper.cs (папка WSDL) до актуальной версии, 2) написать свои собственные workers-классы (папка Workers), которые будут формировать нужные вам сообщения к ГИС ЖКХ и получение ответов.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
17.07.2017, 10:48 35
hhmm, надо установить библиотеку в Package Manager Install-Package GostCryptography -Version 1.0.1
Там ещё есть интересная либа - попопулярнее Install-Package HashLib -Version 2.0.1
Я доверяю тому первому автору, начал переделывать проект, хорошо поработал над оптимизацией рефлексии в SignXML, но что-то пропустил и теперь у меня там косяк на косяке(((( Надо будет заново пересобрать. Я переделываю из реализации hmmm в реализацию gizmo, но не просто тупо копипастой, а переносом по объектам (с попыткой оптимизации) - пока не получилось.
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
17.07.2017, 20:58  [ТС] 36
Цитата Сообщение от umatkot Посмотреть сообщение
hhmm, надо установить библиотеку в Package Manager Install-Package GostCryptography -Version 1.0.1
Там ещё есть интересная либа - попопулярнее Install-Package HashLib -Version 2.0.1
Разобрался: так как автор не выложил исходники BouncyCastle, то я добавил свою сборку. А у меня она собрана под Framework 4.6, у автора - 4.5. Поэтому ничего и не собиралось. Поменял в проекте версии на 4.6 - все собралось.
0
8 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 5
18.07.2017, 13:09 37
А зачем выкладывать исходники BouncyCastle, в VisualStudio есть NuGet , до установите отсутствующие пакеты и будет Вам счастье ))) Разумеется не нужно забывать о целевой платформе, в моем случае .Net Версии 4.5.
0
6 / 6 / 0
Регистрация: 21.04.2017
Сообщений: 28
21.08.2017, 18:24 38
hhmm, сегодня в связи истечением срока лицензии удалил КриптоПро .Net Клиент каково было удивление
что кукла перестала работать. С сит 02 вылетает исключение о невозможности установить защищенное соединение.
Установил заново чудо софт, хоть и достала табличка с требование ввести ключ, но кукла заработала в прежнем режиме.
Подскажите где был не прав.
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
21.08.2017, 21:33  [ТС] 39
Цитата Сообщение от anton_hz Посмотреть сообщение
С сит 02 вылетает исключение о невозможности установить защищенное соединение.
СИТ2 совсем не показатель, у них и на рабочем сервере бывают проблемы.

Сейчас на рабочем сервере проверил, все работает (у меня на компьютере уже с мая КриптоПро .Net Клиент нет).

Можно начать с проверки установления шифрованного тоннеля, кнопка Wsdl explorer.
Если работает, то с криптопровайдером и сертификатом все в порядке, там КриптоПро .Net Клиент вообще не используется.
0
Миниатюры
Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel  
6 / 6 / 0
Регистрация: 21.04.2017
Сообщений: 28
22.08.2017, 09:07 40
Вот такое исключение выпадает запуске кнопка Wsdl explorer. (забыл добавить что Криптопро тоже удален с машины).
0
Миниатюры
Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2017, 09:07

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ
Здравствуйте! Передо мной стоит задача интеграции с системой ГИС ЖКХ...

Осуществить подпись SOAP, по стандартам ГИС ГМП, принятого через TCP сокет
Здравствуйте. Требуется осуществить подпись SOAP, по стандартам ГИС ГМП, принятого через тсп сокет....

Ошибки интеграции ГИС ЖКХ
Я много тут читал форум по интеграции ГИС. На старте, впрочем, как и в последствии возникает много...

Soap, Java, Гис ЖКХ
Добрый день! Имеет ли кто опыт работы с soap в Java? Поставлена задача наладить работу с ГИС ЖКХ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.