64 / 55 / 1
Регистрация: 01.04.2016
Сообщений: 345
|
||||||
1 | ||||||
.NET 4.x Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel06.04.2017, 22:27. Показов 94222. Ответов 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) |
12 / 11 / 1
Регистрация: 18.04.2016
Сообщений: 75
|
|
04.04.2019, 14:56 | 161 |
Я починил.
В SignLibrary из Nuget обновил GostCryptography и BouncyCastle.Crypto Кое что подправил методом тыка и взлетело.
1
|
12 / 11 / 1
Регистрация: 18.04.2016
Сообщений: 75
|
|
04.04.2019, 14:57 | 162 |
Я починил.
В SignLibrary из Nuget обновил GostCryptography и BouncyCastle.Crypto Кое что подправил методом тыка и взлетело.
0
|
12 / 11 / 1
Регистрация: 18.04.2016
Сообщений: 75
|
|
05.04.2019, 14:12 | 163 |
Пример подписанного запроса
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
21.06.2019, 05:32 | 164 |
Изменённая, адаптивная либа для GOST 2012 и старого алгоритма. Уже есть - но эта работает 100% без переделок.
1
|
7 / 7 / 0
Регистрация: 21.04.2017
Сообщений: 36
|
||||||
19.07.2019, 08:09 | 165 | |||||
Уважаемые коллеги!
Кто может подсказать в чем дело. Пытаюсь обновить перечень лицевых счетов для индивидуального прибора учета. Использую сервис HouseManagementServiceAsync и его метод importMeteringDeviceData. Однако сервер не хочет принимать запрос"Удаленный сервер возвратил ошибку: (400) Недопустимый запрос." Сообщение:
Чудо софтина основанная на кукле выдает следующее сообщение: System.ServiceModel.ProtocolException: Удаленный сервер вернул неожиданный ответ: (400) Bad Request. ---> System.Net.WebException: Удаленный сервер возвратил ошибку: (400) Недопустимый запрос. в System.Net.HttpWebRequest.GetResponse() в System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannel Request.WaitForReply(TimeSpan timeout) --- Конец трассировки внутреннего стека исключений --- Server stack trace: в System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(H ttpWebRequest request, HttpWebResponse response, HttpChannelFactory`1 factory, WebException responseException, ChannelBinding channelBinding) в System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannel Request.WaitForReply(TimeSpan timeout) в System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) в System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) в System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessag e methodCall, ProxyOperationRuntime operation) в System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown at [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) в GisBustedWsdlWrapper.HouseManagementPortsTypeAsync.importMeteringDeviceData(impo rtMeteringDeviceDataRequest1 request) в GisBustedWsdlWrapper.HouseManagementPortsTypeAsyncClient.GisBustedWsdlWrapper.Ho useManagementPortsTypeAsync.importMeteringDeviceData(importMeteringDeviceDataReq uest1 request) в D:\GIS\GBv3\WSDL\GisBustedWsdlWrapper.cs:строка 129010 в GisBustedWsdlWrapper.HouseManagementPortsTypeAsyncClient.importMeteringDeviceDat a(RequestHeader RequestHeader, importMeteringDeviceDataRequest importMeteringDeviceDataRequest, AckRequest& AckRequest) в D:\GIS\GBv3\WSDL\GisBustedWsdlWrapper.cs:строка 129018 в GisBusted.Workers.house_managment_async.HouseManagementServiceAsyncWorker.Import MeteringDeviceData(String FIASHouseGuid, importMeteringDeviceDataRequestMeteringDevice[] meteringDevices, String& MessageGUID, Exception& Error) в D:\GIS\GBv3\Workers\house-managment-async\HouseManagementServiceAsyncWorker.cs:строка 159
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
19.07.2019, 08:31 | 166 |
anton_hz, Возможно там такой подход - архивирование ПУ старого и создание нового с требуемыми лицевыми.
Добавлено через 7 минут anton_hz, даже если есть показания, думаю, что ничего страшного не случится, если прибор удалить, добавить новый и накатить все показания. Там, в документации указывается, что нужно все данные передавать, не только AccountGuid - это больше мороки чем тупо новый создать. Да, так кстати везде по обновлениям - вообще, это косяк ГИС, что требует все данные в целостности, а не обновляет только одно поле - мы с этим "супералгоритмом обновления" ещё пару лет назад познакомились и уже тогда их прокляли) В тот конструктор, что вы обновить пытаетесь, можно играть очень долго, чтобы убедиться, какие поля требуются, а какие - нет.
0
|
7 / 7 / 0
Регистрация: 21.04.2017
Сообщений: 36
|
|
19.07.2019, 09:04 | 167 |
По документации на тип "MeteringDeviceToUpdateAfterDevicesValuesType" вроде все сходится там почте все поля
в количестве 0...1. Теоретически должно все работать. И тех. поддержка написала "Для продолжения работы по Вашему обращению просим уточнить актуальность проблемы на текущий момент. Если проблема сохраняется, то просьба приложить к ответному письму все запросы и ответы (изначальный запрос, AckRequest, getStateRequest, ответ с ошибкой), а также заголовки и и URL сервиса данных запросов и адреса отправления запросов." Это они что-то типа сделали, проверьте. Но кода я им завинтил что запрос вообще не принимается системой, и что речи не может быть про AckRequest, getStateRequest. Они слились. В последнее время у всех проблемы с тех. поддержкой или я один такой?
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
19.07.2019, 10:33 | 168 |
anton_hz, им надо звонить и уточнять статус обращения мотивируя их тем, что сейчас за спиной у вас стоит голодный и злой директор - что-то в этом роде - долбить их до бесконечности, пока не решат проблему и не помогут. Да, я видел по полям, возможно, так и есть, но если проходит один запрос (проверьте тоже самое, только архивируйте тестовый счётчик на ППАК и также можно проверить, как реагирует более продвинутый СИТ 2) - они сначала на СИТ 2 всё обновляют, потом на ППАК и СИТ 1
0
|
7 / 7 / 0
Регистрация: 21.04.2017
Сообщений: 36
|
|
24.07.2019, 13:16 | 169 |
Проблема решилась. Отказ в передаче был из-за отсутствия TransportGUID. Ошибка детская.
А обновление действительно отработало как нужно. Обновился только перечень лицевого счета. Всем спасибо за помощь.
0
|
4 / 4 / 0
Регистрация: 21.04.2015
Сообщений: 45
|
|
12.10.2019, 07:26 | 170 |
Всем привет. Кто нибудь GisBusted модифицировал под ГОСТ 2012?
0
|
12 / 11 / 1
Регистрация: 18.04.2016
Сообщений: 75
|
|
21.10.2019, 08:47 | 171 |
Хм... ППАК
Перестала работать подпись... System.ServiceModel.CommunicationException: Ошибка при отправке запроса HTTP к https://api.dom.gosuslugi.ru/e... ementAsync. Возможно, это вызвано тем, что сертификат сервера не сконфигурирован с HTTP.SYS для случая HTTPS. Это может быть также вызвано несоответствием привязки безопасности между клиентом и сервером. ---> System.Net.WebException: Базовое соединение закрыто: Непредвиденная ошибка при передаче. ---> System.IO.IOException: Аутентификация не пройдена из-за закрытия транспортного потока удаленной стороной. Они там чтото опять сломали или мои лыжи не едут?
0
|
64 / 55 / 1
Регистрация: 01.04.2016
Сообщений: 345
|
|
21.10.2019, 19:42 [ТС] | 172 |
Наверное новых корневых и промежуточных сертификатов не хватает, они же недавно их выкладывали в разделе регламенты и инструкции
1
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
||||||
22.10.2019, 03:16 | 173 | |||||
foxwizard, Это не в процессе подписи, если соединяетесь без туннеля, то вероятно, не происходит элементарное рукопожатие с сервисом. Была такая проблема - я поставил такие настройки соединений
1
|
4 / 4 / 0
Регистрация: 21.04.2015
Сообщений: 45
|
|||||||||||
22.10.2019, 05:00 | 174 | ||||||||||
кто нибудь может подсказать, что в этом запросе не так? делаю поддержку ГОСТ 2012. запрос на ГИС отправляется, но getState возвращает: Ошибка формата подписи запроса.
Запрос:
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
22.10.2019, 05:36 | 175 |
0
|
4 / 4 / 0
Регистрация: 21.04.2015
Сообщений: 45
|
|
22.10.2019, 06:06 | 176 |
0
|
12 / 11 / 1
Регистрация: 18.04.2016
Сообщений: 75
|
|
22.10.2019, 06:33 | 177 |
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
22.10.2019, 08:34 | 178 |
daniel_tlk, по нодам и идентификаторам - всё норм. Попробуйте моей либой протестить?
0
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
22.10.2019, 08:35 | 179 |
foxwizard, https://api.dom.gosuslugi.ru должен быть доверенным в explorer - для этого надо установить все цепочки в хранилище.
Также, желательно тоже, на всякий случай, свой сертификат подтвердить в системе. У меня ещё такая ошибка была, когда я тестил на своём локальном компе и поставил использование IIS64 разряда, забыл, что поставил и парился. Потом, случайно набрёл, поставил 32 разряда и рукопожатие прошло.
0
|
4 / 4 / 0
Регистрация: 21.04.2015
Сообщений: 45
|
|
22.10.2019, 09:09 | 180 |
В общем, все магическим способом заработало. Но, возможно, это не магия, а повлияла установка сертификатов ГИС.
0
|
22.10.2019, 09:09 | |
22.10.2019, 09:09 | |
Помогаю со студенческими работами здесь
180
Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ Осуществить подпись SOAP, по стандартам ГИС ГМП, принятого через TCP сокет Ошибки интеграции ГИС ЖКХ Soap, Java, Гис ЖКХ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |