Проблемы сдачи отчетности в электронном виде из 1С 8.3 в GNU/Linux +11


Здравствуй Гиктаймс, сегодня мы поговорим о некоторых, а по сути — одной большой, проблемах сдачи электронной отчетности в системе GNU/Linux.


image

Вопрос сдачи электронной отчетности из ОС Linux давно обсуждался как на Хабре/Гиктаймс, так и на тематических форумах — Мисте, Убунту, ЛОРе, КриптоПро и форуме техподдержки 1С: ИТС. В двух словах на настоящий момент есть два решения — либо использовать облачную КЭП и сдавать отчетность через обозреватель, либо использовать выделенную/виртуальную машину с установленной ОС Windows (пусть даже пробной версией) для сдачи отчетности. Вариант сдачи отчетности с помощью специализированных утилит предоставляемых органами (ФНС, ПФР, ФСС, Росстат, ФСРАР) возможен только при использовании Wine@Etersoft, что фактически тоже костыль (ибо нам потребуется ДВЕ лицензии на СКЗИ КриптоПро — для Windows и Linux).



Не секрет что для ОС GNU/Linux существует не так уж и много программ, для ведения бухгалтерии: Ананас (который ныне покоится с миром), украинский Дебет+ (у которого модуль поддержки Российского законодательства не обновлялся уже, Ктулу знает сколько) и 1С бухгалтерия. Имеются в виду Нативные приложения. Из всех вышеперечисленных только 1С на момент написания статьи входит в государственный реестр отечественного ПО и содержит механизмы подготовки и сдачи отчетности в электронном виде через спец-операторов электронного документооборота. К слову операторов, поддерживаемых 1С бухгалтерией не много: ЗАО "Калуга-Астрал" (разработчик подсистемы 1С-Отчетность), ООО "Такском", ООО НПФ "Форус" и мифический "Прочий оператор документооборота".
К сожалению сдача отчетности из 1С сопряжена с рядом трудностей, с которыми может столкнуться рядовой (да и опытный) системный администратор. Разумеется мы подробно рассмотрим эти проблемы и способы их решения.


Первая проблема с которой мы сталкиваемся — это СКЗИ. Нет, не их отсутствие, они есть. Для Linux есть несколько сертифицированных СКЗИ (с поддержкой ГОСТ) доступных к установке и используемых в разных подсистемах. На момент написания статьи это следующие СКЗИ, поправьте меня, если я что-то упустил:


  • CryptoCom
    Данная СКЗИ доступна для платформ i686 и amd64, используется в основном в системах интернет-банкинга, в частности системой iBank (используется многими банками, такими как ГазпромБанк, УБРИР, Альфа и д.р.).


  • Lissi CSP
    Одна из существующих СКЗИ предоставляющая помимо непосредственно, СКЗИ, версии обозревателя Mozilla Firefox и почтового клиента Mozilla Thunderbird с поддержкой алгоритмов шифрования и электронной-цифровой подписи семейства ГОСТ. К сожаления поддерживает только платформу i686, с драйвером ruToken совместимость СКЗИ проверить не удалось, хотя производитель её заявляет. Впрочем, расширение для продуктов Mozilla исправно видит сертификаты и позволяет производить подпись, шифрование и двустороннюю аутентификацию HTTPS с использованием алгоритмов ГОСТ. Совместимость с 1С мной не тестировалась.
    Тем не менее, продукт весьма достойный, если Вы пользуетесь 32х разрядной версией системы. Стоит помнить, что в этом случае ни одно приложение не сможет выделить больше 3 ГБ памяти на один процесс. Некоторые приложения, такие как СУБД, могут обходиться трюком с shmem и использовать до 64х ГБ памяти за счет выделения одного процесса на каждую сессию, но 1С бухгалтерия не использует такой технологии и сервер на 32х разрядную архитектуру с этим СКЗИ я бы ставить не советовал.


  • CryptoPro CSP
    Фактически единственное на настоящий момент комплексное решение для Linux для работы с электронной подписью и шифрованием. Доступна для платформ i686, amd64, armhf (включая android), PowerPC. Это не говоря уже о том что у них есть версии для Solaris (i686, amd64, sparc), AIX, FreeBSD, OSX и iOS. Как ни странно (сарказм), именно КриптоПро официально рекомендуется многими органами государственной власти для взаимодействия и электронного документооборота. Лицензии на КриптоПро часто идут в составе ключа ЭЦП, и в составе договора комплексного обслуживания для сдачи отчетности. Мой выбор был однозначным в пользу этого СКЗИ. К минусам можно отнести относительную сложность установки на системах отличных от RHEL/SLES и встречающиеся недочеты в сборке пакетов ПО (не разрешенные импортируемые символы и экспортируемые функции с разорванными зависимостями). В большинстве случаев эти недочеты не видны пользователю, т.к. данные функции предназначены для работы различных библиотек в составе КриптоПро и автоматически разрешаются при их первом вызове ядром ОС (в адресном пространстве приложения уже загружены нужные библиотеки). Второй минус — отсутствие почтового клиента, если обозреватель CryptoFox представлен, но от поддержки Thunderbird в КриптоПро отказались. Нужно отдать должное, что с их стороны предпринимались активные попытки внести изменения в рабочую версию NSS с целью поддержки ГОСТ, но воз и ныне там. Если бы изменения были приняты, поддержка ГОСТ появилась бы во всех обозревателях и приложениях использующих NSS, таких как Open/LibreOffice, продуктах Mozilla, Nautilus/Nemo, Thunar, XCA и других программах.


  • VipNet
    Ещё одна сертифицированная СКЗИ, поддержка которой изначально присутствует в 1С. Существует в виде бета-версии для архитектур i686 и amd64. К сожалению, кроме самого СКЗИ больше никаких продуктов для Linux у них нет и полноценная работа на порталах и торговых площадках с ней невозможна.

По понятным причинам был выбран СКЗИ КриптоПро, и давайте остановимся на нем подробнее.


Во-первых, для платформы Linux отсутствует знакомое многим приложение КриптоАРМ, для подписи документов. Впрочем для создания прикрепленной и открепленной подписи можно воспользоваться утилитами командной строки. Для создания и проверки открепленной цифровой подписи мной были созданы два сценария — sign и verify, соответственно. Текст сценариев приведен ниже, согласен что они несколько костыльные, но писалось на скорую руку, а на тот момент бета-версия CryptoPro 4.0 ведя себя странно, при прямой передаче путей к подписываемым, и выходным файлам.


sign
#!/bin/sh
DIR=`dirname $1`
/opt/cprocsp/bin/amd64/cryptcp -signf $2 $3 -cert -der -norev "$1"
mv "$1.sgn" "$1.p7s"

verify
#!/bin/sh
DIR=`dirname $1`
cp "$1.p7s" "$1.sgn"
/opt/cprocsp/bin/amd64/cryptcp -vsignf -der -norev "$1"
rm "$1.sgn"

Во-вторых, и это очень важно, мы имеем следующую картину. в 1С бухгалтерии штатные настройки работы с СКЗИ КриптоПро приведены для версии 3.6. С версией 3.6 работает старая версия CryptoFox. На этом достоинства заканчиваются и начинается головная боль. Старая версия CryptoFox не отображает ни один современный сайт, даже портал налоговой инспекции куда-то уползает. При попытке установить ~свежую~ актуальную версию CryptoFox 31, она падает в корку (Segmentation fault) при входе на любой сайт требующий наличия HTTPS с алгоритмом ГОСТ. Иногда падает даже при работе плагина CryptoPro Browser Plugin. Кстати, тоже весьма старой версии, поддерживающей только подпись, но не шифрование и работающий только с NPAPI.


С версией 3.9 ситуация ещё веселее — 1С её уже не видит, но CryptoFox ещё падает, при чем как старый, так и новый.


Версия 4.0, напротив — не видится 1С, но зато с ней заводится CryptoPro Browser Plugin 2.0, работает вход на госплощадки из CryptoFox (о них разговор отдельный, и если разбирать работу из ОС GNU/Linux с ними — материала хватит на ещё одну статью). Проблема — заставить увидеть 1Ску установленный СКЗИ. Проблема в общем то не такая уж и серьёзная, решается буквально за пятнадцать секунд, но на поиск самого решения ушла целая неделя общения с техподдержкой КриптоПро (и отпинывания меня поддержкой 1С на инструкцию в ИТС). В итоге проблема была решена самостоятельно, и решение в конечном итоге опубликовано на форуме КриптоПро. Методология решения проблемы на будущее:


  • В 1С бухгалтерии имеется возможность добавить произвольный криптопровайдер. Воспользуемся этим механизмом, добавьте нового криптопровайдера, и назовите его, скажем "КриптоПро CSP 4.0".


  • Для того чтобы получить имя криптопровайдера и его тип, нам нужно обратиться к утилите КриптоПро. Проще всего получить эти данные, выведя список установленных сертификатов:

/opt/cprocsp/bin/amd64/certmgr -l

  • Указываем следующие данные:
    Имя программы Crypto-Pro GOST R 34.10-2001 KC1 CSP
    Тип программы 75
    Алгоритм подписи GOST R 34.10-2001
    Алгоритм хеширования GOST R 34.11-94
    Алгоритм шифрования GOST 28147-89
  • Сохраняем криптопровайдер и указываем путь к библиотеке: /opt/cprocsp/lib/amd64/libcapi20.so

Готово, 1С теперь видит установленный криптопровайдер. Казалось бы — всё, можно проступать к добавлению сертификатов и настройке сдачи отчётности, но не тут то было. Маленькая беленькая сибирская лисичка подкралась к нам откуда мы и не ждали — от самих разработчиков 1С. Так исторически сложилось, что подсистему электронного документооборота, 1С-Отчетность, ядро 1С и конфигурации пишут разные люди, и даже разные компании. При создании конфигураций с функцией 1С-Отчетность для 1С 8.3, например "Бухгалтерия предприятия 3.0", разработчики не долго думая перенесли всю подсистему ЭДКО "как есть", без изменений, в результате чего мы получаем парадокс. Сама 1С бухгалтерия видит СКЗИ, видит сертификаты, позволяет их установить, подписать и зашифровать любые документы, но при этом система электронного документооборота (старая версия) в упор не видит ни одного установленного сертификата, и соответственно не может даже получить начальную конфигурацию от оператора документооборота — её попросту нечем расшифровывать. Вернее чем расшифровывать есть, но подсистема ЭДКО использует свой собственный механизм работы с СКЗИ, задействуя внешнюю компоненту (только для Windows) и ничего не знает о существовании встроенных механизмов работы с СКЗИ, которые использует сама 1С в рамках конфигурации.


Тем не менее, подсистема ЭДО (не путать с ЭДКО) с контрагентами видит все актуальные сертификаты и позволяет подключиться к системе электронного документооборота. Но не сдачи отчетности.
Для Linux действует ограничение на прямую работу конфигурации Клиент-ЭДО, с внешней конфигурационной базой, и для этого нужен работающий сервер 1С. Так как базовые версии конфигураций не позволяют использовать клиент-серверный вариант развертывания 1С, интеграция Клиент-ЭДО и бухгалтерии в Linux для таких конфигураций не возможна, будет работать только для полнофункциональных. В большинстве конфигураций можно включить обмен с контрагентами, и он будет работать, несмотря на не работающую 1С-Отчетность.


Если мы откроем конфигуратор и включим режим отладки, мы увидим следующую картину:
Формы 1С-Отчетности используют Общие->ОбщиеМодули->КриптографияЭДКОКлиент, который в свою очередь опирается на работу внешней компоненты Addin.ЭДОNative.CryptS.
Тот же функционал работы с электронной цифровой подписью и шифрованием (без функционала обмена транспортными контейнерами по электронным каналам связи) реализован в Общие->ОбщиеМодули->ЭлектроннаяПодписьКлиент, которая учитывает работу в ОС семейства Linux и корректно загружает как и внешнюю компоненту работы с XMLDSig, так и модуль криптопровайдера. Данная библиотека корректно видит все сертификаты, позволяет осуществлять подпись и шифрование документов, содержит функции для работы как с объектами в памяти так и с файлами на жестком диске. Данная библиотека используется во всех стандартных механизмах работы с ЭЦП внутри 1С, кроме подсистемы 1С-Отчетности (ЭДКО).


То есть для реализации работы подсистемы 1С ЭДКО достаточно переписать либо формы 1С-Отчетности на использование встроенных механизмов, либо перегрузить КриптографияЭДКОКлиент, для использования не внешней компоненты, а переадресовывать вызовы работы с сертификатами, ЭЦП и шифрованием на встроенный клиент работы с СКЗИ.
Общение с техподдержкой 1С дало лишь ответ что они в курсе данной проблемы, но клиентов использующих ОС GNU/Linux слишком мало (потребность не носит массовый характер), но задача у них "записана".


UPD:
Таки удалось завести работу мастера после детального изучения исходников. Пока застрял на расшифровке контейнера от Такском, но сертификаты уже видятся. Работает только на свежей версии КриптоПро 4. Завести как указано ниже. Наименование представления роли не играет, но "внутри" 1С-ЭДКО именно так:


Представление CryptoPro CSP
Имя программы Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider
Тип программы 75
Алгоритм подписи GOST R 34.10-2001
Алгоритм хеширования GOST R 34.11-94
Алгоритм шифрования GOST 28147-89

Обязательными при проверке являются поля Имя программы и Тип программы. Имя программы относится к режиму совместимости с версией криптопровайдера 2.0, в бета версии 4.0 наименование отсутствовало.


Основная проблема скрыта тут: Общие->Общие модули->КриптографияЭДКОСлужебныйКлиент.ПолучитьКриптопровайдеры


ВходящиеПараметры = ПараметрыВМассив(1, ТолькоПоддерживаемые);

Для Linux убрать единичку. Или добавить проверку для версии КриптоПро 3.9 и выше:
Общие->Общие модули->КриптографияЭДКОКлиентСервер.ПолучитьКриптопровайдеры.КриптопровайдерCryptoPro
Имя: Crypto-Pro GOST R 34.10-2001 KC1 CSP
для клиента, или
Имя: Crypto-Pro GOST R 34.10-2001 KC2 CSP
для сервера.

Нужна ли Вам возможность сдачи отчетности из 1С в Linux?

Проголосовал 181 человек. Воздержалось 80 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

-->


К сожалению, не доступен сервер mySQL