Как настроить автоматическое получение документов ЭДО в 1С на сервере Linux (Ubuntu)?

Системный администратор 1С v8.3 (Управляемые формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Определяем контекст выполнения

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

Подготовка контейнеров ключей в среде Hyper-V

Поскольку наш сервер работает на гипервизоре Hyper-V, мы сталкиваемся с ограничением: прямой проброс USB-токенов (Рутокен, JaCarta) в Linux-системы штатными средствами затруднен или нестабилен. Для автоматизации обмена документами рассмотрим наиболее надежный метод — использование программных ключей (копируемых контейнеров), размещенных непосредственно в файловой системе сервера.

Выясним, где КриптоПро хранит ключи в Linux. Обычно это директория /var/opt/cprocsp/keys/. Нам необходимо скопировать папку с контейнером (которая содержит файлы типа header.key, masks.key и т.д.) в папку нашего сервисного пользователя.

Выполним команды для подготовки директории и назначения прав:


sudo mkdir -p /var/opt/cprocsp/keys/usr1cv8
sudo cp -R /путь/к/вашему/контейнеру.000 /var/opt/cprocsp/keys/usr1cv8/
sudo chown -R usr1cv8:grp1cv8 /var/opt/cprocsp/keys/usr1cv8
sudo chmod -R 700 /var/opt/cprocsp/keys/usr1cv8

Установка сертификата под учетной записью сервера

Теперь перейдем к установке сертификата. Все манипуляции с certmgr должны выполняться строго от имени usr1cv8. Проанализируем ситуацию: если мы просто запустим команду, она отработает для текущего пользователя. Поэтому используем sudo -u.

Установим сертификат из файла (.cer), связав его с контейнером в локальном хранилище:


sudo -u usr1cv8 /opt/cprocsp/bin/amd64/certmgr -inst -file /путь/к/сертификату.cer -cont '\\.\HDIMAGE\имя_контейнера'

Здесь HDIMAGE указывает на то, что ключ находится в файловой системе (имитация жесткого диска). Посмотрим на результат: после этой команды сертификат попадет в личное хранилище (My) пользователя usr1cv8, и серверная часть 1С сможет к нему обратиться.

Настройка цепочки доверия и корневых сертификатов

Для корректной проверки подписи при получении документов 1С должна доверять удостоверяющему центру (УЦ). Установим корневые сертификаты Минцифры и вашего УЦ в общесистемное хранилище (mRoot). Рассмотрим, как это сделать:


sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -file /путь/к/root_ca.cer

Важно помнить: без установленных корневых сертификатов проверка цепочки провалится, и фоновое задание ЭДО завершится с ошибкой "Не удалось проверить подпись".

Решение проблемы с паролями контейнеров

Автоматизация предполагает отсутствие диалоговых окон для ввода пароля. Если на контейнер установлен пароль, фоновое задание "зависнет". Выясним, как сохранить пароль в системе. КриптоПро позволяет кэшировать пароли для конкретных сертификатов. Воспользуемся утилитой csptest от имени пользователя 1С:


sudo -u usr1cv8 /opt/cprocsp/bin/amd64/csptest -passwd -savecert -container 'имя_контейнера' -password 'ваш_пароль'

После этого система будет автоматически подставлять пароль при обращении к ключу из кода 1С.

Настройка в интерфейсе 1С

Когда программная часть на уровне ОС готова, нам необходимо правильно сконфигурировать саму 1С. Зайдем в раздел "Администрирование" — "Настройки электронной подписи и шифрования".

Выполним следующие шаги:

  1. Перейдем на закладку "Программы" и добавим (или отредактируем) запись для КриптоПро CSP.
  2. В поле "Путь к модулю криптографии на сервере Linux" укажем правильный путь к библиотеке. Обычно это /opt/cprocsp/lib/amd64/libcapilite.so.
  3. В карточке сертификата на закладке "Состав" обязательно установим флажки "Проверять подпись на сервере" и "Подписывать на сервере".
  4. Укажем в поле "Пользователь" нашего бухгалтера, но убедимся, что 1С понимает: работа идет через сервер.

Особенности Ubuntu 24.04

Проанализируем специфику свежей версии Ubuntu 24.04. В этой версии используются обновленные системные библиотеки, что может вызвать проблемы со старыми версиями КриптоПро. Для стабильной работы рекомендуем использовать версию КриптоПро CSP 5.0 R3 (5.0.12998) или выше. Также убедимся, что служба pcscd установлена и запущена, даже если вы не используете токены, так как некоторые компоненты CAPI могут обращаться к ней:


sudo apt install pcscd
sudo systemctl enable --now pcscd

Проверка результата

Чтобы убедиться, что всё настроено верно, запустим в 1С встроенный тест проверки сертификата. Если все этапы выполнены правильно (установка под usr1cv8, прописка путей к библиотекам, сохранение пароля), тест должен показать успешный статус по всем пунктам: от поиска сертификата до создания тестовой подписи на стороне сервера. Теперь регламентное задание "Обмен с контрагентами" сможет автоматически забирать документы из облака оператора ЭДО в фоновом режиме, пока бухгалтер занимается своими делами на макбуке.

← На главную