Настройка электронного документооборота (ЭДО) в среде Linux — задача нетривиальная, особенно когда речь идет о полной автоматизации процесса без участия пользователя. Типичная ситуация: сервер 1С работает под управлением Ubuntu на виртуальной машине Hyper-V, а пользователи подключаются через тонкие клиенты. В таком сценарии основная сложность заключается в том, чтобы заставить серверную часть 1С самостоятельно "видеть" сертификаты и подписывать документы в фоновом режиме. Разберем пошагово, как реализовать эту схему.
Первое и самое важное, что мы должны понять: когда 1С выполняет фоновое задание (например, регламентный опрос сервера оператора ЭДО), код выполняется на стороне сервера от имени специального системного пользователя. В большинстве дистрибутивов Ubuntu, где установлен сервер 1С, это пользователь usr1cv8. Проанализируем типичную ошибку: администратор устанавливает КриптоПро и сертификаты под учетной записью root или своим личным логином. В этом случае сервер 1С просто не найдет контейнеры закрытых ключей, так как хранилища сертификатов в Linux строго разделены по пользователям.
Поскольку наш сервер работает на гипервизоре 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С. Зайдем в раздел "Администрирование" — "Настройки электронной подписи и шифрования".
Выполним следующие шаги:
/opt/cprocsp/lib/amd64/libcapilite.so.Проанализируем специфику свежей версии Ubuntu 24.04. В этой версии используются обновленные системные библиотеки, что может вызвать проблемы со старыми версиями КриптоПро. Для стабильной работы рекомендуем использовать версию КриптоПро CSP 5.0 R3 (5.0.12998) или выше. Также убедимся, что служба pcscd установлена и запущена, даже если вы не используете токены, так как некоторые компоненты CAPI могут обращаться к ней:
sudo apt install pcscd
sudo systemctl enable --now pcscd
Чтобы убедиться, что всё настроено верно, запустим в 1С встроенный тест проверки сертификата. Если все этапы выполнены правильно (установка под usr1cv8, прописка путей к библиотекам, сохранение пароля), тест должен показать успешный статус по всем пунктам: от поиска сертификата до создания тестовой подписи на стороне сервера. Теперь регламентное задание "Обмен с контрагентами" сможет автоматически забирать документы из облака оператора ЭДО в фоновом режиме, пока бухгалтер занимается своими делами на макбуке.