Здравствуй Гиктаймс, сегодня мы поговорим о некоторых, а по сути — одной большой, проблемах сдачи электронной отчетности в системе GNU/Linux.
Вопрос сдачи электронной отчетности из ОС 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 ведя себя странно, при прямой передаче путей к подписываемым, и выходным файлам.
#!/bin/sh
DIR=`dirname $1`
/opt/cprocsp/bin/amd64/cryptcp -signf $2 $3 -cert -der -norev "$1"
mv "$1.sgn" "$1.p7s"
#!/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
для сервера.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (27)
kolu4iy
14.10.2016 16:09«Тем не менее продукт весьма достойный, если Вы пользуетесь 32х разрядной версией системы.» — вообще можно и в 64-битной системе поднять 32-битное окружение почти для любой программы. Посмотрите на skype multiarch для debian, например. Думаю, что и здесь проблемы не возникнет. Сам, разумеется, не пробовал.
Lirein
14.10.2016 16:21+1Проблема будет с 32х битными драйверами на ключи аппаратной защиты, т.к. демон pcscd таки 64х битный. Криптопро можно ставить обеих версий, они работают с pcscd используя собственную прослойку через библиотеку libpcsclite.so.
Плавали, знаем. Если у кого получится завести его под 64х битной системой, чтобы он видел Рутокен лайт — отпишитесь, пожалуйста.
AndreiRch
14.10.2016 16:53+2Конкретно 1С-Отчетность не проверял, но вот встроенный во все современные конфигурации 1С механизм электронного документооборота под Linux прекрасно работает.
Lirein
14.10.2016 17:04Расскажите пожалуйста подробнее, какая используется конфигурация, какой клиент — толстый, тонкий.
Файлсерверная версия, толстый и тонкий клиент, криптография на стороне клиента. ЭДО не работает.AndreiRch
14.10.2016 17:08+2Точно проверено на Ubuntu 14.04/16.04 х64 с использованием КриптоПро 4. Конфигурация у меня УНФ, но должно работать на любой современной. Режим работы файловый, тонкий клиент.
Я лично у себя использую работу с в таком режиме для организации обмена электронными документами через 1С-Такском напрямую из 1С. Все отлично работает.Lirein
14.10.2016 17:12Спасибо, попробую обновить версию криптопро до актуальной, может быть заработает.
Рабочая конфигурация Mint 17.3 (14.04.4 + Cinnamon), x64, CryptopPro CSP 4.0.9630AndreiRch
14.10.2016 17:15Подчеркну, что отчетность я не проверял, только ЭДО. Если именно ЭДО не работает — напишите, на каком этапе возникают проблемы.
Lirein
14.10.2016 17:26ЭДО последних версий, если честно не проверялась. Обновил до последней версии, пока не хочет загружать криптопровайдер, постараюсь разобраться.
Используемая конфигурация — Бухгалтерия предприятия 3.0, актуальная версия.
Проверю на чистой ЭДО и отпишусь.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
AndreiRch
14.10.2016 18:01+2Это вы про 1С-Отчетность написали. А теперь попробуйте 1С-ЭДО(1С-Такском). Там все должно работать как надо.
Lirein
14.10.2016 18:27+1Подтверждаю в последних версиях ЭДО сертификаты видятся и всё работает. Проблема заключается в подсистеме 1С-Отчетности. Ждем пока изменения из Клиент ЭДО перекочуют туда. Спасибо за информацию.
AndreiRch
14.10.2016 18:36+1Поправьте, пожалуйста, статью, что бы было четко видно различия между 1С-Отчетность (для сдачи отчетности в органы) и 1С-ЭДО(1С-Такском) (для электронного документооборота с контрагентами). Сейчас она вводит в заблуждение.
Lirein
14.10.2016 18:55+1Изменения в статью внесены. Ещё раз спасибо.
AndreiRch
14.10.2016 19:02Боюсь, что нет. Речь не про конфигурацию «Клиент ЭДО». Любая современная конфигурация 1С (для которой это актуально, естественно) под Linux позволяет обменивается электронными документами с контрагентами, и БП 3.0 в том числе. Соответствующий код, основанный на БСП, везде одинаковый. И, вероятно, не позволяет сдавать отчетность в органы, потому что там используется свой код, вместо кода БСП.
Вы в статье используете термин «ЭДО», совершенно не разъясняя, что под ним имеется ввиду в конкретном контексте. Это так же вводит в заблуждение. Потому что в контексте конфигурации 1С «ЭДО» — это документооборот с контрагентами, а отчетность — несколько отдельная сущность.
Lirein
14.10.2016 19:22Понял. проверил из «Бухгалтерия предприятия 3.0». Именно ЭДО — работает. Сама ЭДО сейчас использует как раз встроенные механизмы. 1С- Отчетность ссылается на «ЭДКО», наверное по историческим причинам.
AndreiRch
14.10.2016 19:34Еще бы хотелось услышать, что есть «ЭДКО». Признаюсь со стыдом, слышу эту аббревиатуру первый раз. Гугл ее не знает, партнерский форум 1С — тоже.
PS Предлагаю написать про то, что есть облачная КЭП, и как там организована работа с локальным сертификатом ЭЦП в контексте Linux.Lirein
14.10.2016 19:43Это наименование подсистемы в исходниках конфигурации (просмотр доступен в конфигураторе во время отладки), судя по всему этой аббревиатурой хотели обозначить "электронный документооборот".
Честно говоря я пока с Облачной КЭП кроме как у Контура не сталкивался, а брать любые облачные решения работающие с локальным сертификатом страшно — т.к. везде прямо написано что они не работают в Линукс, кроме как с облачной КЭП.
deaddy64
15.10.2016 06:18+2Расшифровывается как Электронный Документооборот с Контролирующими Органами
Lirein
14.10.2016 20:15В Эльбе работает точно. В Контур-Бухгалтерия — работает только облачная. От них приходит СМС с одноразовым кодом подтверждения, после ввода кода из СМС — происходит подписание и отправка документа. То же самое при получении и расшифровке пакетов.
Никаких OTP у них не поддерживается. Работа с локальной ЭЦП у них организована через Silverlight плагин (.NET) и работает только в Windows (IE), Mono и Moonlight не поддерживаются.
vallhund
15.10.2016 14:12+1Лучший сервис сдачи отчетности, по моему личному мнению практикующего бухгалтера — Контур: Экстерн, под Linux работает «чуть менее, чем никак», что весьма печально.
Кстати, при повседневной работе возникает ощущение, что даже клиент 1С 8.3 под Linux не нативный, а представляет собой Windows-клиент в странно работающей обертке.Lirein
15.10.2016 14:15+1Таки нативный. Написан, судя по импортируемым библиотекам, с использованием фреймворка GTK-2.
Lirein
17.10.2016 05:36Я почти поборол работу 1С-Отчетности в 1С, во всяком случае сертификаты видятся, мастер настройки 1С-Отчетности доходит дальше второго шага, работает обмен с КО, но не работает расшифровка конфигурации Такском при получении. Статью обновил. Кроме того имеет место вот такой косяк:
При открытии списка сертификатов для сертификата страхователя — видим все установленные. Однако при открытии списка для выбора сертификата ФСС получаем пустое модальное окно. Т.о. сертификат можно выбрать либо только с помощью мастера, либо из 1С под управлением ОС Windows.
Lirein
17.10.2016 06:35Нашёл. Добавлять сертификат ФСС нужно в хранилище AddressBook, не в My или Root.
Saffron
> Нужно отдать должное, что с их стороны предпринимались активные попытки внести изменения в рабочую версию NSS с целью поддержки ГОСТ, но воз и ныне там.
А что им мешает распространять патчи для NSS? Клиент уж как-нибудь на месте пересоберёт библиотеки. А браузеры и прочие потребители библиотек традиционно собираются с поддержкой динамических библиотек, так что их даже трогать не нужно будет.
Lirein
Патчи есть для старых версий NSS, в багтреке. Патчей несколько, для того чтобы собрать текущие версии NSS — нужно переписывать патчи. Скорее всего собирать в отдельную ветку на гитхабе и отслеживать изменения. У меня на это времени нет, хотя если приспичит — можно заняться.