Как исправить ошибку "Нет личного сертификата на серверной машине" при подписании документов ЭДО в 1С?

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

При настройке Электронного документооборота (ЭДО) в клиент-серверных базах 1С (Управление торговлей 11.5, ERP, Комплексная автоматизация) мы часто сталкиваемся с ситуацией, когда подписание документов останавливается с ошибкой. Система сообщает, что нет личного сертификата на серверной машине, хотя мы уверенно установили сертификат в хранилище, и он виден в панели управления криптопровайдера (например, КриптоПро CSP) под учетной записью администратора.

В этой статье мы подробно разберем, почему возникает данная проблема, как на нее влияет архитектура Windows Server и какие существуют проверенные способы решения. Мы проанализируем настройки самой 1С и особенности работы с криптографией в изолированных сеансах служб.

Суть проблемы и диагностика окружения

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

Главная причина кроется в том, что сервер 1С (служба Агент сервера 1С:Предприятия) работает в специальной сессии операционной системы, так называемой Session 0. Эта сессия изолирована от интерактивных сеансов пользователей. Даже если вы зашли на сервер по RDP под администратором и видите сертификат, это не означает, что служба 1С, работающая в фоне, тоже его "видит".

Разберем методы решения от самых простых (настройка логики работы) до технических (перенос ключей).

Решение 1: Изменение места выполнения криптографических операций

Прежде чем погружаться в настройки сервера, давайте проверим настройки самой 1С. Очень часто проблема решается простым переключением "галочки".

Если электронная подпись (токен) находится физически у пользователя на клиентском компьютере, а 1С пытается искать его на сервере, ошибка неизбежна. Нам необходимо указать программе, что подписывать нужно на стороне клиента.

  1. Перейдем в раздел НСИ и Администрирование — Общие настройки.
  2. Найдем блок Электронная подпись и шифрование.
  3. Откроем вкладку Сертификаты.
  4. Зайдем в настройки конкретного сертификата, с которым возникает проблема.
  5. Внимательно изучим настройки. Если там стоит опция, указывающая на проверку или подписание на сервере, и при этом токен вставлен в компьютер пользователя — это ошибка.

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

Решение 2: Перенос закрытого ключа в Реестр Windows

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

Использование аппаратного токена (USB-флешки), вставленного в сервер, является ненадежным решением для службы Windows из-за изоляции сессий. Служба не может вывести окно запроса PIN-кода, и часто драйверы смарт-карт не пробрасываются в сессию службы корректно.

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

Важно: Данная операция возможна только если при генерации ключа он был помечен как "Экспортируемый".

Разберем процедуру по шагам:

  1. Запустите КриптоПро CSP на сервере (под той учетной записью, которая имеет права администратора).
  2. Перейдите на вкладку Сервис и нажмите кнопку Скопировать.
  3. Нажмите "Обзор" и выберите контейнер на вашем Рутокене (или флешке).
  4. Нажмите "Далее". Придумайте имя для нового контейнера (например, добавьте суффикс _REG).
  5. На этапе выбора носителя выберите Реестр.
  6. Установите пароль на новый контейнер (или оставьте пустым, если политики безопасности позволяют, но лучше задать PIN).

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

  1. В КриптоПро CSP перейдите на вкладку Сервис — Просмотреть сертификаты в контейнере.
  2. Выберите только что созданный контейнер в Реестре.
  3. При запросе PIN-кода введите его и обязательно поставьте галочку Сохранить пароль (или "Запомнить пароль").

После этого установите сертификат из этого контейнера в хранилище "Личное". Теперь ключ находится в реестре и не требует физического наличия токена в порту.

Решение 3: Установка сертификата для пользователя службы 1С

Даже после переноса в реестр, мы можем столкнуться с тем, что 1С все равно не видит сертификат. Это происходит из-за того, что мы установили сертификат в хранилище "Личное" пользователя Administrator, а служба Агент сервера 1С может быть запущена под пользователем USR1CV8 или LocalSystem.

Давайте выясним, под кем работает сервер, и предоставим сертификат именно этому пользователю.

Анализ службы:

  1. Откройте оснастку Службы (services.msc).
  2. Найдите службу Агент сервера 1С:Предприятия 8.3.
  3. Посмотрите колонку "Вход от имени".

Если там указан конкретный доменный или локальный пользователь (например, .\usr1cv8), нам нужно зайти в систему именно под этим пользователем и проделать установку сертификата и ввод сохраненного пароля в КриптоПро именно в этом сеансе.

Если служба работает от имени системной учетной записи (Local System), ситуация сложнее, так как интерактивный вход под ней невозможен. В этом случае системные администраторы часто прибегают к утилите PsExec (из пакета Sysinternals) для запуска оснастки управления сертификатами от имени системы:

PsExec.exe -i -s certmgr.msc

Запустив эту команду, мы попадем в хранилище сертификатов именно системной учетной записи. Туда необходимо импортировать личный сертификат.

Однако, для работы с КриптоПро и сохранения паролей для LocalSystem, более простым решением часто является перенастройка службы 1С на запуск от имени конкретного пользователя-администратора (или специально созданного сервисного пользователя), для которого мы уже настроили криптографию в обычном режиме.

Решение 4: Настройки КриптоПро и службы смарт-карт

Если вы все же решили использовать аппаратный ключ, вставленный непосредственно в сервер, обратите внимание на следующие настройки.

В панели управления КриптоПро CSP на вкладке "Настройки" для оборудования есть опция, связанная с использованием службы локальных смарт-карт. Если токен вставлен в сервер, убедитесь, что соответствующие службы Windows (Smart Card) запущены и работают.

Также проверьте права доступа к закрытому ключу:

  1. Откройте КриптоПро CSP.
  2. Вкладка Сервис — Протестировать.
  3. Выберите контейнер.
  4. Если тест проходит успешно, посмотрите путь к ключу в реестре или на диске.
  5. Убедитесь, что у пользователя, под которым работает служба 1С, есть права "Полный доступ" или хотя бы "Чтение" на ветку реестра или папку с ключами.

Решение 5: Разрядность приложений

Еще один нюанс, который мы не должны упускать из виду — это разрядность (битность) приложений. Сервер 1С:Предприятия (64-bit) требует установленной 64-битной версии криптопровайдера и соответствующих драйверов.

Бывают ситуации, когда в 32-битной оснастке сертификат виден, а 64-битное приложение сервера его не находит. Убедитесь, что вы используете актуальную версию КриптоПро CSP (рекомендуется версия 5.0 R2 и выше), которая корректно работает в обеих архитектурах.

Итоги

Для успешного решения проблемы "Нет личного сертификата на сервере" мы рекомендуем действовать по следующему алгоритму:

  1. Проверьте настройки 1С: Если токен у пользователя — отключите подписание на сервере.
  2. Используйте Реестр: Если нужно подписывать на сервере, скопируйте ключ в реестр. Это устраняет 90% проблем с видимостью токенов.
  3. Сохраните пароль: Служба не умеет вводить PIN-коды. Используйте функцию "Сохранить пароль" в КриптоПро.
  4. Совпадение пользователей: Убедитесь, что сертификат установлен в профиль того пользователя, от имени которого запущена служба Агент сервера 1С.

Применяя эти методы, вы сможете настроить стабильную работу электронного документооборота в вашей корпоративной системе.

← На главную