Здравствуй Гиктаймс, сегодня мы поговорим о некоторых, а по сути — одной большой, проблемах сдачи электронной отчетности в системе 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 человек.

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

Поделиться с друзьями
-->

Комментарии (27)


  1. Saffron
    14.10.2016 16:00

    > Нужно отдать должное, что с их стороны предпринимались активные попытки внести изменения в рабочую версию NSS с целью поддержки ГОСТ, но воз и ныне там.

    А что им мешает распространять патчи для NSS? Клиент уж как-нибудь на месте пересоберёт библиотеки. А браузеры и прочие потребители библиотек традиционно собираются с поддержкой динамических библиотек, так что их даже трогать не нужно будет.


    1. Lirein
      14.10.2016 16:25
      +1

      Патчи есть для старых версий NSS, в багтреке. Патчей несколько, для того чтобы собрать текущие версии NSS — нужно переписывать патчи. Скорее всего собирать в отдельную ветку на гитхабе и отслеживать изменения. У меня на это времени нет, хотя если приспичит — можно заняться.


  1. kolu4iy
    14.10.2016 16:09

    «Тем не менее продукт весьма достойный, если Вы пользуетесь 32х разрядной версией системы.» — вообще можно и в 64-битной системе поднять 32-битное окружение почти для любой программы. Посмотрите на skype multiarch для debian, например. Думаю, что и здесь проблемы не возникнет. Сам, разумеется, не пробовал.


    1. Lirein
      14.10.2016 16:21
      +1

      Проблема будет с 32х битными драйверами на ключи аппаратной защиты, т.к. демон pcscd таки 64х битный. Криптопро можно ставить обеих версий, они работают с pcscd используя собственную прослойку через библиотеку libpcsclite.so.
      Плавали, знаем. Если у кого получится завести его под 64х битной системой, чтобы он видел Рутокен лайт — отпишитесь, пожалуйста.


  1. AndreiRch
    14.10.2016 16:53
    +2

    Конкретно 1С-Отчетность не проверял, но вот встроенный во все современные конфигурации 1С механизм электронного документооборота под Linux прекрасно работает.


    1. Lirein
      14.10.2016 17:04

      Расскажите пожалуйста подробнее, какая используется конфигурация, какой клиент — толстый, тонкий.

      Файлсерверная версия, толстый и тонкий клиент, криптография на стороне клиента. ЭДО не работает.


      1. AndreiRch
        14.10.2016 17:08
        +2

        Точно проверено на Ubuntu 14.04/16.04 х64 с использованием КриптоПро 4. Конфигурация у меня УНФ, но должно работать на любой современной. Режим работы файловый, тонкий клиент.
        Я лично у себя использую работу с в таком режиме для организации обмена электронными документами через 1С-Такском напрямую из 1С. Все отлично работает.


        1. Lirein
          14.10.2016 17:12

          Спасибо, попробую обновить версию криптопро до актуальной, может быть заработает.
          Рабочая конфигурация Mint 17.3 (14.04.4 + Cinnamon), x64, CryptopPro CSP 4.0.9630


          1. AndreiRch
            14.10.2016 17:15

            Подчеркну, что отчетность я не проверял, только ЭДО. Если именно ЭДО не работает — напишите, на каком этапе возникают проблемы.


            1. Lirein
              14.10.2016 17:26

              ЭДО последних версий, если честно не проверялась. Обновил до последней версии, пока не хочет загружать криптопровайдер, постараюсь разобраться.
              Используемая конфигурация — Бухгалтерия предприятия 3.0, актуальная версия.
              Проверю на чистой ЭДО и отпишусь.


              1. Lirein
                14.10.2016 17:55
                +1

                Итак, обновился, обновил плагин, перегрузил 1С. Криптопро подхватился, но проблема по прежнему та же.

                Скриншоты прилагаются
                $ /opt/cprocsp/bin/amd64/certmgr -list
                Certmgr 1.0 (c) "CryptoPro",  2007-2010.
                program for managing certificates, CRLs and stores
                
                =============================================================================
                1-------
                Issuer              : OGRN=1027700071530, INN=007704211201, STREET="Барыковский пер., дом 4 стр. 2", E=uc_support@taxcom.ru, C=RU, S=77 Москва, L=Москва, O="ООО ""Такском""", OU=Удостоверяющий центр, CN=TAXCOM CA
                Subject             : SNILS=13032174498, OGRN=1157232033023, INN=007203355594, E=720303f@host9.taxcom.ru, C=RU, S=72 Тюменская область, L=Тюмень, O="ООО ""ОАС""", CN="ООО ""ОАС""", STREET="Демьяна бедного, 83, 1, 10", T=ДИРЕКТОР, G=ИВАН АНАТОЛЬЕВИЧ, SN=БАТАЛИН
                Serial              : 0x1C598C200001000C7D6A
                SHA1 Hash           : 0x2199a7c990c8dfbd2cc7cbaa46cd44217ed6cc78
                SubjKeyID           : b94c8cf95fc34703b899032db6dd60a8aec68e76
                Signature Algorithm : ГОСТ Р 34.11/34.10-2001
                PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
                Not valid before    : 02/09/2016  12:10:00 UTC
                Not valid after     : 02/09/2017  12:20:00 UTC
                PrivateKey Link     : Yes                 
                Container           : SCARD\rutoken_lt_313979c8\0D00\E7AF
                Provider Name       : Crypto-Pro GOST R 34.10-2001 KC1 CSP
                Provider Info       : ProvType: 75, KeySpec: 1, Flags: 0x0
                OCSP URL            : http://ocsp.taxcom.ru/ocsp/ocsp.srf
                CA cert URL         : http://crl.taxcom.ru/taxcom-ca-v1.cer
                Extended Key Usage  : 1.3.6.1.5.5.7.3.2
                                      1.3.6.1.5.5.7.3.4
                                      1.2.643.2.2.34.6
                

                image
                image
                image


                1. AndreiRch
                  14.10.2016 18:01
                  +2

                  Это вы про 1С-Отчетность написали. А теперь попробуйте 1С-ЭДО(1С-Такском). Там все должно работать как надо.


                  1. Lirein
                    14.10.2016 18:27
                    +1

                    Подтверждаю в последних версиях ЭДО сертификаты видятся и всё работает. Проблема заключается в подсистеме 1С-Отчетности. Ждем пока изменения из Клиент ЭДО перекочуют туда. Спасибо за информацию.


                    1. AndreiRch
                      14.10.2016 18:36
                      +1

                      Поправьте, пожалуйста, статью, что бы было четко видно различия между 1С-Отчетность (для сдачи отчетности в органы) и 1С-ЭДО(1С-Такском) (для электронного документооборота с контрагентами). Сейчас она вводит в заблуждение.


                      1. Lirein
                        14.10.2016 18:55
                        +1

                        Изменения в статью внесены. Ещё раз спасибо.


                        1. AndreiRch
                          14.10.2016 19:02

                          Боюсь, что нет. Речь не про конфигурацию «Клиент ЭДО». Любая современная конфигурация 1С (для которой это актуально, естественно) под Linux позволяет обменивается электронными документами с контрагентами, и БП 3.0 в том числе. Соответствующий код, основанный на БСП, везде одинаковый. И, вероятно, не позволяет сдавать отчетность в органы, потому что там используется свой код, вместо кода БСП.
                          Вы в статье используете термин «ЭДО», совершенно не разъясняя, что под ним имеется ввиду в конкретном контексте. Это так же вводит в заблуждение. Потому что в контексте конфигурации 1С «ЭДО» — это документооборот с контрагентами, а отчетность — несколько отдельная сущность.


  1. Lirein
    14.10.2016 19:22

    Понял. проверил из «Бухгалтерия предприятия 3.0». Именно ЭДО — работает. Сама ЭДО сейчас использует как раз встроенные механизмы. 1С- Отчетность ссылается на «ЭДКО», наверное по историческим причинам.


    1. AndreiRch
      14.10.2016 19:34

      Еще бы хотелось услышать, что есть «ЭДКО». Признаюсь со стыдом, слышу эту аббревиатуру первый раз. Гугл ее не знает, партнерский форум 1С — тоже.

      PS Предлагаю написать про то, что есть облачная КЭП, и как там организована работа с локальным сертификатом ЭЦП в контексте Linux.


      1. Lirein
        14.10.2016 19:43

        Это наименование подсистемы в исходниках конфигурации (просмотр доступен в конфигураторе во время отладки), судя по всему этой аббревиатурой хотели обозначить "электронный документооборот".

        Честно говоря я пока с Облачной КЭП кроме как у Контура не сталкивался, а брать любые облачные решения работающие с локальным сертификатом страшно — т.к. везде прямо написано что они не работают в Линукс, кроме как с облачной КЭП.


        1. AndreiRch
          14.10.2016 19:51

          А как работает облачная КЭП от Контура в Linux?


          1. vallhund
            15.10.2016 16:07

            работает нормально


      1. deaddy64
        15.10.2016 06:18
        +2

        Расшифровывается как Электронный Документооборот с Контролирующими Органами


  1. Lirein
    14.10.2016 20:15

    В Эльбе работает точно. В Контур-Бухгалтерия — работает только облачная. От них приходит СМС с одноразовым кодом подтверждения, после ввода кода из СМС — происходит подписание и отправка документа. То же самое при получении и расшифровке пакетов.
    Никаких OTP у них не поддерживается. Работа с локальной ЭЦП у них организована через Silverlight плагин (.NET) и работает только в Windows (IE), Mono и Moonlight не поддерживаются.


  1. vallhund
    15.10.2016 14:12
    +1

    Лучший сервис сдачи отчетности, по моему личному мнению практикующего бухгалтера — Контур: Экстерн, под Linux работает «чуть менее, чем никак», что весьма печально.

    Кстати, при повседневной работе возникает ощущение, что даже клиент 1С 8.3 под Linux не нативный, а представляет собой Windows-клиент в странно работающей обертке.


    1. Lirein
      15.10.2016 14:15
      +1

      Таки нативный. Написан, судя по импортируемым библиотекам, с использованием фреймворка GTK-2.


  1. Lirein
    17.10.2016 05:36

    Я почти поборол работу 1С-Отчетности в 1С, во всяком случае сертификаты видятся, мастер настройки 1С-Отчетности доходит дальше второго шага, работает обмен с КО, но не работает расшифровка конфигурации Такском при получении. Статью обновил. Кроме того имеет место вот такой косяк:

    При открытии списка сертификатов для сертификата страхователя — видим все установленные. Однако при открытии списка для выбора сертификата ФСС получаем пустое модальное окно. Т.о. сертификат можно выбрать либо только с помощью мастера, либо из 1С под управлением ОС Windows.




    1. Lirein
      17.10.2016 06:35

      Нашёл. Добавлять сертификат ФСС нужно в хранилище AddressBook, не в My или Root.