Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/539: Рейтинг темы: голосов - 539, средняя оценка - 4.96
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
.NET 4.x

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

06.04.2017, 22:27. Показов 110972. Ответов 256

Студворк — интернет-сервис помощи студентам
Решил создать отдельную тему, так как в теме Интеграция с ГИС ЖКХ. Подпись 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 предложил набор классов реализующих работу в ГИС ЖКХ файловых сервисов.
Вложения
Тип файла: zip GisBusted.zip (4.17 Мб, 676 просмотров)
11
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.04.2017, 22:27
Ответы с готовыми решениями:

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

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

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

256
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
06.12.2017, 12:02
Студворк — интернет-сервис помощи студентам
warchief, нет объектов для экспорта - это уже что-то. Значит, ты прорвался через все контроли))) Тебе надо добавить DataProviderNsi ITEEEMS))))
0
 Аватар для vst377
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
26.12.2017, 07:20
Добрый день и с наступающим.

Кто-нибудь сталкивался с exception сериализатора WCF при формировании запроса к ГИС ЖКХ для получения результата ранее отправленного асинхронного запроса веб-сервиса HouseManagementServiceAsync?
Пытаюсь получить результат запроса importAccountData, сериализатор выдаёт:

Значение не может быть неопределенным.
Имя параметра: elem


Проверил заполняемость объектов RequestHeader и getStateRequest, всё ОК, не заполняю только ISCreator, но он вроде и не требуется. Полазил по файлам описания wsdl, ничего интересного не нашел. Версия интеграции 11.7.0.10.1
0
4 / 4 / 0
Регистрация: 21.04.2015
Сообщений: 45
26.12.2017, 07:43
Всем привет! Ни у кого не возникала ошибка: "Не удалось установить безопасный канал для SSL/TLS с полномочиями "api.dom.gosuslugi.ru"? Месяц не трогал, сегодня делал запросы на ГИС, а мне выдается эта ошибка. Может кто нибудь сталкивался?
0
 Аватар для vst377
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
26.12.2017, 09:20
И на 11.8.0.4 тоже самое

Добавлено через 1 час 12 минут
Ну короче я сам дурак ))) У меня шло подписание запроса, а getState() не подписывается. Microsoft.Xades.XadesSignedXml не мог найти контейнер

Добавлено через 38 секунд
Цитата Сообщение от daniel_tlk Посмотреть сообщение
Ни у кого не возникала ошибка
Нужно поискать по форуму, тут что-то подобное обсуждалось
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
27.12.2017, 18:34
daniel_tlk, установи STUNNEL.
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
27.12.2017, 19:11  [ТС]
Цитата Сообщение от umatkot Посмотреть сообщение
daniel_tlk, установи STUNNEL.
Тема как называется?

.NET 4.x Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel и прочих прокладок.
0
4 / 4 / 0
Регистрация: 21.04.2015
Сообщений: 45
28.12.2017, 02:49
umatkot, проблема была в обновлении Net. Framework. Решил проблему откатом к предыдущей версии фреймворка.

P.S. Я использую КриптоПро
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
28.12.2017, 04:31
hhmm, Да со мной история приключилась недавно.
Нужно было проект перекинуть на сервер отдельный. Установил сначала минимал(КриптоПро, Сертификаты), пробую тестить, всё хорошо, но эта ошибка просто не исчезала. .NET стоял последний, намёков с его стороны не ожидалось на неполноту установки. Но эта ошибка меня так довела, что я решил докопаться, почему она иногда у некоторых появляется. В итоге, я решил попробовать не использовать STUNNEL, а просто его установить и удалить если что. И о чудо!! Сразу пошёл коннект. Я думаю, что STUNELL меняет какие-то настройки реестра и SSL канал начинает определять правильный ГОСТ шифр. Странно вообще всё это...
0
1 / 1 / 0
Регистрация: 13.10.2016
Сообщений: 64
28.12.2017, 04:32
Цитата Сообщение от warchief Посмотреть сообщение
Короче, я понял. проблема только с тестовыми стендами. С рабочим все нормально.

Так вот - как настроить эту куклу чтобы она работала с тестовым стендом (конкретно с SIT02)?

Очень важно.
Мы уже давно завязали работать с тестовыми серверами. Они часто неадекватно отвечают на запросы.
А пром - он всегда валится)))
Например как вчера, со статусом =1 запросы болтаются. А сегодня вообще чёт всё легло.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
28.12.2017, 04:37
кому интересно: есть такие программы, которые делают снимки системы(реестр, файлы и т.д.) можно на чистый Windows начинать ставить элементы и наблюдать ошибку и сопровождать каждую установку снимками. Когда ошибка пропадёт, можно будет глянуть в снимках, что наменяла та или иная установка. (только муторное это дело, скажу я вам)

Добавлено через 2 минуты
kevinlexus, можешь воспользоваться моей куклой, сами шаблоны можно вытаскивать из SOAP UI, она даже очень похожа на неё. Можешь просто настроить SOAPUI, но тогда тебе нужен будет STUNNEL. Если нет времени разбираться, то там в app.conf ты можешь глянуть настройки на адрес СИТ.
0
 Аватар для vst377
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
12.01.2018, 11:12
Может кому пригодится. В продолжение проекта hhmm GisBusted
Работа с файлами на ГИС ЖКХ через Интеграцию (загрузка файлов, скачивание файлов):
Вложения
Тип файла: zip GisFileClient.zip (6.1 Кб, 95 просмотров)
4
 Аватар для vst377
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
17.01.2018, 11:00
В GisFileClient не совсем корректно обрабатывается заголовок x-upload-filename (строка 474).
Лучше сделать это так:

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
string name = mimeDecode(this.ResponseHeaders[key]);
...
 
private string mimeDecode(string s)
{
            string result = string.Empty;
            System.Text.RegularExpressions.MatchCollection matchList = System.Text.RegularExpressions.Regex.Matches(s, @"(?:=\?)([^\?]+)(?:\?B\?)([^\?]*)(?:\?=)", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
 
            for (int i = 0; i < matchList.Count; i++)
            {
                string charset = matchList[i].Groups[1].Value;
                string data = matchList[i].Groups[2].Value;
                byte[] b = Convert.FromBase64String(data);
                result += Encoding.GetEncoding(charset).GetString(b);
            }
 
            return (string.IsNullOrEmpty(result)) ? s : result;
}


Добавлено через 9 минут
+ ещё одна особенность, которую я не учёл: ГИС ЖКХ возвращает x-upload-completed = false, если файл меньше 5 Мб

Добавлено через 1 час 26 минут
И даже если файлы больше 5 Мб, тоже постоянно это шлёт x-upload-completed = false. По крайней мере, это относится к файлам, которые загружали в ГИС ЖКХ через личный кабинет. При этом сами файлы в нормальном состоянии
0
 Аватар для vst377
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
19.01.2018, 08:35
В общем, поторопился. Окончательная версия файлового менеджера для работы с ГИС ЖКХ с учётом возможного наличия кириллицы в именах файлов и специфического кодирования и декодирования этих имён для ГИС ЖКХ. Добавил файл, с помощью которого я получаю хэш-сумму файла по ГОСТ Р 34.11-94. Буду благодарен за конструктивную критику ))

Для hhmm: можете разместить моё решение у себя в шапке?
Вложения
Тип файла: zip GisFileClient_v2.zip (12.0 Кб, 96364 просмотров)
0
1 / 1 / 0
Регистрация: 13.10.2016
Сообщений: 64
19.01.2018, 11:39
Чёт я совсем не понимаю, как с этой ГИС работать... с утра часть заданий (экспорт дома, счетчиков) стоит в статусе=1...
это у всех так или у меня одного??
как работать то??
0
 Аватар для vst377
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
19.01.2018, 11:52
У меня тоже самое, не могу получить сведения о договоре управления с самого утра (асинхронный сервис выдает: получено, синхронный: превышено максимальное время обработки запроса)
0
1 / 1 / 0
Регистрация: 13.10.2016
Сообщений: 64
19.01.2018, 12:00
Странно это всё... что будет когда будем грузить не по 100 запросов а поболее?)))
у меня коллега шаблонами грузит, у него всё окей! Может пора назад на шаблоны возвращаться?
0
 Аватар для vst377
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
19.01.2018, 12:05
Мне некуда бежать с этого грёбанного ГИСа, так как я выгружаю информацию за другие организации через ИС и доступа к их личному кабинету у меня нет.
А на родном РСО несколько сот тысяч лицевых счетов, как это грузить шаблонами....
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
19.01.2018, 20:56  [ТС]
Цитата Сообщение от vst377 Посмотреть сообщение
Буду благодарен за конструктивную критику ))
Интересно с какой целью вы используете внешнюю программу rhash.exe для расчета хэша файла?
Ведь это можно сделать уже средствами криптопровайдера, имеющими в демо-приложении, т.е. как-то так (пишу от руки, не проверял):

C#
1
2
3
4
5
6
byte[] data = LoadFile(); // как-то прочитать файл с данными
ICryptoProvider CryptoProvider = GetCryptoProvider(Certificate);
 
// Расчет с помощью криптопровайдера
byte[] bHash3411 = CryptoProvider.ComputeHash(data);
string sHash3411 = Convert.ToBase64String(bHash3411);
это не с целью критики, а просто поинтересоваться
Хэш криптопровайдером считается очень быстро, в начале неделе для своих внутренних потребностей (искал утечку памяти, хотел обвинить в этом криптопровайдера ) считал хэши кусков памяти в 1 гигабайт, считает очень быстро, утечек в нем не обнаружил.
0
 Аватар для vst377
12 / 12 / 0
Регистрация: 02.06.2017
Сообщений: 75
23.01.2018, 06:51
Цитата Сообщение от hhmm Посмотреть сообщение
Интересно с какой целью вы используете внешнюю программу rhash.exe для расчета хэша файла?
Дело в том, что ГИС ожидает хэш-сумму в стандарте ГОСТ Р 34.11-94, который уже устарел и не используется.
Если не ошибаюсь, то ваш вариант кода даст хэш-сумму в стандарте ГОСТ Р 34.11-2012.

Вот мои мытарства по этому поводу Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5)
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
23.01.2018, 09:57  [ТС]
Цитата Сообщение от vst377 Посмотреть сообщение
Если не ошибаюсь, то ваш вариант кода даст хэш-сумму в стандарте ГОСТ Р 34.11-2012.
По моему ошибаетесь, так как в настоящее время Ланит не умеет работать с более современным вариантом ГОСТ.
В свойствах криптопровайдера стоит хэш 94 года.
Миниатюры
Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2018, 09:57

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

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ
Здравствуйте! Передо мной стоит задача интеграции с системой ГИС ЖКХ (https://dom.gosuslugi.ru/) программой, написанной на языке...

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

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

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


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru