Цитата |
---|
это нужно для жителей |
Я уже тут писал, что на данный момент система авторизации на ГИС ЖКХ заслуживает самое мягкое определения "крайне непродуманная". В стране все еще много тех, кто не зарегистрирован на Госуслугах - в основном это пенсионеры. А пенсионеров - треть населения страны. И они очень часто являются формальными владельцами. Итого, минимум треть квартир даже в принципе (не обращая внимание на то, что Росреестр привязывается как попало) не могут зайти и посмотреть, что же там УО внесли.
Это конечно была шутка, забавное преувеличение. но! в каждой шутке как известно только доля шутки. ЭП на файлы передаваемые в ЛК не ставится, кто отправитель заранее известно, так что SOAP от XML практически не отличается в этом случае.
Цитата |
---|
Sergey Cheban пишет: Протокол SOAP - открытый. И вот с этой точки - пожалуйста, сами, если можете. А если не можете, то и говорить не о чем. А DLL - это очень, очень плохая идея:Непонятная DLL, работающая с криптографией и имеющая доступ к приватным ключам - это не безопасно.DLL привязывает нас к платформе Windows.Интерфейс, предоставляемый DLL - это чистый C. Даже не C++. Работать с ним из современных языков программирования неудобно.DLL выполняется в адресном пространстве чужого процесса. Если в результате процесс падает, не всегда понятно, по чьей вине это произошло. Нет внятного разграничения зон ответственности.В DLL наверняка были бы ошибки. Распространение DLL с исправлениями этих ошибок - задача нетривиальная. |
По пунктам:
1) Более половины реализации SOAP одинаково не только в рамках ГИС ЖКХ, но и вообще всех российских ФГИС (все что вне Body по большому счету описано SOAP, отличий не так уж много). То есть что разработчиков множество это плохо, а что государство не предложит единую реализацию SOAP, на которую могли бы ориентироваться те же разработчики будущих ФГИС, это нормально - как хотите так и плывите. Правильно Вас понимаю?
2) небезопасно, согласен. Но все криптопровайдеры тоже в своем составе имеют DLL, естественно подписанные и сертифицированные ФСБ. Им вы доверяете? И при этом лично звонили проверяли подлинность сертификата? Ну и прекрасно, используем их.
Собственно для данной DLL (обертки XML в SOAP, добавление подписи, отправки SOAP на сервер ГИС) нет необходимости работать с приватными ключами напрямую (даже скорее посторонняя функция, зачем изобретать велосипед и реализовывать криптографические примитивы) - можно вычислить необходимые значения либо через сертифицированный криптопровайдер (который, "зараза", формирует cades-bes в отсоединенной ЭП файла, но тем не менее сам не умеет формировать xades-bes внутри XML) либо через сертифицированную версию OpenSSL (как рекомендуется в статьях на хабре). Плюс цифровая подпись DLL, что ее никто не изменял и она сама ключи не ворует. Понятно, если бы библиотека была подписана подписью ГИС ЖКХ или КриптоПро к ней было бы больше доверия, чем к "левому" разработчику, потому и просим.
Естественно, будет ли пользователь использовать сертифицированный криптопровайдер, сертифицированные бинарные файлы OpenSSL (и платить денежку) или общедоступные несертифицированные или соберет свою сборку - остается на совести администратора информационной безопасности организации пользователя. Нет смысла "не выпускать джинна из бутылки" - кто захочет несертифицированный, сделает и по тем статьям на хабре.
3) На Linux есть аналог DLL - SO библиотеки. Если компилятор кроссплатформенный, то сделать библиотеку для Linux примерно так сложно как передать параметр TargetOs и ссылки на библиотеки взять в управляющие комментарии (в кроссплатформенных компиляторах как правило уже есть билды стандартных Unit с использованием библиотек поддерживаемых операционных систем, нужно только Unit собственного сочинения перестроить под них). Тем не менее, у меня, например, нет планов поддерживать библиотеку на *nix системах, так как у меня нет возможности составить корректные представления о криптопровайдерах на *nix и написать соответствующие Unit.
4) Здравствуйте, при всем уважении, а кроме семейства Си языки какие-то знаете? У меня например мои все DLL на Паскале. Главное, что бы формат параметров можно было описать на любом языке - неважен язык программирования разработчика DLL. Это дает огромное преимущество по сравнению с проектами которые все делают именно на C# или Java. Не считая отсутствия громоздкого dotNet. Это компенсирует некоторые неудобства. Написать объект на вашем языке программирования когда уже есть реализация кода объекта в виде отдельных функций DLL тоже простая задача - все основные функции операционной системы Windows как раз содержатся в DLL, тем не менее работаете с ними через объекты.
Если же Вы имеете ввиду ООП при работе самой библиотеки, то огромное количество COM объектов как раз используют фабрики экземпляров в виде DLL и OCX TLB (расширение не особо имеет значение - по сути это тоже внешний исполняемый код, подгружаемый программой). Но COM объекты как раз и привяжут нас к Windows. dotNet полагаю тоже?
5) Ошибки есть везде и зона ответственности не разграничена, согласен. Но посмотрим, в среднем процессе Windows 7 вовлечены более чем 100 библиотек - не потому что разработчик программы их все загрузил, а потому системные и околосистемные библиотеки тянут за собой огромное количество зависимостей. В этом смысле, если добавится еще одна библиотека, погоды это не сделает. Для этого есть современные средства отладки собирающие данные активности на момент сбоя во всех потоках процесса. Определить, что вылетело при выполнении такой-то функции - на раз.
Тут хочу высказаться о языке программирования, на котором сделана библиотека - компиляторы Паскаля как раз славятся тем, что при загрузке модуля (будь то программа или библиотека) сразу же запрашивается память у системы "про запас", не через getmem, а как еще один сегмент наряду с кодом и данными (в них сразу записаны значения) - сегмент "кучи" (значения не записаны, заполнен "мусором" из оперативной памяти). По умолчанию это 8 мегабайт, мало по нынешним меркам, но на хранение результатов криптооперации - с головой хватит. Заранее объявленные глобальные переменные сюда не входят - один раз была нужда и объявил глобальный многомерный массив, потянувший на гигабайт - и все это скомпилировалось в сегменте данных. Если памяти не хватит библиотека не загрузится вообще и будет ясно - вывалилось до загрузки библиотеки и обработать это корректно задача использующей программы. Если память есть, то все загрузится и пока запас не исчерпан, никакой дополнительной памяти у системы не запрашивается и всю обработку правильности использования памяти в сегментах ведет стандартный код, вставленный компилятором. То есть со внутренней "кучей" можно что угодно делать - это повлияет на корректность работы библиотеки, но на работоспособность программы, использующей библиотеку, и системы это не повлияет. Хотя конечно памяти потребляет больше, по сравнению с запросом и освобождением у системы памяти для каждого объекта, но так надежнее.
С использованием данных, переданных основной программой гораздо сложнее, но и тут можно подстелить соломку, проверяя все указатели системной функцией (IsBadReadPtr IsBadWritePtr кажется - для своих программ не делал, но если распространять библиотеку, то нужно делать), как это делает само ядро операционной системы, и возвращая код ошибки "неправильный указатель", если проверка не пройдена. Лезть в память программы, если библиотеку об этом не просили и не дали правильный указатель - заведомо ошибочное дело, нет разницы в одном мы адресном пространстве или в разных.
6) проблемы обновления DLL абсолютно такие же, как и у программы, а именно - что заменить файл модуля, который запущен в данный момент, мягко говоря, непросто. Плюс при этом нужно убедиться, что замена не испорчена, а то и подписана ЭП. Проще в том плане, что объем библиотеки мал. Апплеты панели управления с расширением CPL - все те же DLL, но написанные по определенным требованиям и выводящие пользователю диалоговые окна. В том числе среди них есть такие, что реализуют функцию обновления какой-либо программы. Есть и другие средства решения: например можно функцию обновления вызывать в самой DLL при инициализации. Либо экспортировать функцию обновления отдельно, а в комплекте распространять bat файл, запускающий rundll32 для загрузки библиотеки и выполнения функции.
Цитата |
---|
Sergey Cheban пишет: 3. В каком виде должна быть ЭЦП? Как она должна отделяться от данных? |
Насчет этого - никаких проблем, просто ЭЦП должна быть отсоединенной, в виде отдельного файла с расширением sig. Заметьте, в ту же налоговую (и из нее тоже) передается отсоединенная ЭЦП. Еще краем уха слышал, сейчас можно подписать VBScript, тоже по сути текстовый файл, в подробности не вникал пока. С остальным соглашусь, формат должен быть описан точно.
Цитата |
---|
Sergey Cheban пишет: Да и присутствие на рынке _множества_ разработчиков мне кажется вредным для дела. |
Это конечно так, однако вот так посмотришь что в одном регионе "горячее водоснабжение", в другом "подогрев воды" и так далее и тому подобное. Программа, учитывающая все нюансы будет огромной и соответственно пропорционально количеству кода возрастет количество ошибок. Собственно именно это и видим на примере ГИС. Хотя наверно тоже можно поделить на библиотеки