Как исправить ошибку «Цепочка сертификатов не может быть построена до доверенного корневого сертификата» в 1С?

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

При интеграции механизмов электронной подписи в конфигурациях на базе БСП или при вызове метода встроенного языка МенеджерКриптографии.ПроверитьСертификат() разработчики и администраторы нередко сталкиваются с ошибкой: «Цепочка сертификатов не может быть построена до доверенного корневого сертификата». При этом изменение свойства МенеджерКриптографии.ВключениеСертификатовВПодпись никак не влияет на ситуацию, так как данная настройка управляет только составом подписи, а не алгоритмом валидации цепочки доверия в операционной системе.

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

1. Контекст исполнения: хранилище пользователя и хранилище компьютера

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

Сертификаты, которые пользователь или администратор установил в личное хранилище («Текущий пользователь» / Current User), службе сервера просто недоступны. В результате метод проверки сертификата завершается сбоем, так как криптопровайдер под учетной записью службы не видит ни самого сертификата, ни звеньев его цепочки.

Для исправления ситуации выполним следующие действия:

  1. Откроем оснастку управления сертификатами локального компьютера, выполнив команду certlm.msc от имени администратора.
  2. Установим корневой сертификат удостоверяющего центра в хранилище «Доверенные корневые центры сертификации» (уровень «Локальный компьютер»).
  3. Если проверка или подписание должны выполняться в контексте пользователя Windows, убедимся, что личный и промежуточные сертификаты установлены непосредственно в профиль той учетной записи, под которой запускается клиентское приложение или служба 1С.
  4. Проверим права доступа учетной записи службы 1С к веткам реестра и системным хранилищам криптопровайдера КриптоПро CSP.

2. Отсутствие промежуточных центров сертификации (УЦ)

Рассмотрим структуру цепочки доверия. Сертификат конечного пользователя практически никогда не подписывается напрямую корневым сертификатом (например, Головным удостоверяющим центром Минцифры). Между ними находится один или несколько промежуточных (подчиненных) центров сертификации (УЦ ФНС, Федерального казначейства или коммерческого аккредитованного УЦ).

Если в системе установлен только корневой сертификат верхнего уровня и сертификат пользователя, цепочка оказывается разорванной. КриптоПро CSP не может проследить путь доверия от конечного узла к корню.

Разберем по шагам, как восстановить целостность цепочки:

  1. Откроем свойства проблемного сертификата и перейдем на вкладку «Путь сертификации».
  2. Определим, на каком именно узле отображается значок ошибки (недоверенный узел).
  3. Скачаем недостающие сертификаты промежуточных центров сертификации с официального сайта выдавшего УЦ.
  4. Установим все промежуточные сертификаты в хранилище «Промежуточные центры сертификации» локального компьютера (или текущего пользователя, если работа ведется исключительно на клиенте).
  5. Убедимся, что промежуточный сертификат случайно не попал в хранилище доверенных корневых центров, так как это нарушает строгий алгоритм проверки.

3. Актуализация списков отзыва (СОС / CRL) и сетевые ограничения

При вызове метода ПроверитьСертификат() криптографическая подсистема обязана проверить статус действия каждого звена цепочки: не был ли отозван сертификат до истечения своего срока действия.

По умолчанию КриптоПро CSP обращается к точкам распространения списков отзыва (CRL Distribution Points) и сведениям о доступе к информации центра сертификации (Authority Information Access) по протоколу HTTP через интернет. Если сервер 1С находится в изолированном контуре, за межсетевым экраном или прокси-сервером, сетевые запросы завершаются по таймауту, и цепочка признается недействительной.

Для устранения проблемы в закрытых сетях выполним следующее:

  1. Загрузим вручную актуальные файлы списков отзыва (файлы с расширением .crl) для корневого и всех промежуточных УЦ цепочки.
  2. Установим списки отзыва в хранилище через меню КриптоПро CSP или стандартный интерфейс операционной системы.
  3. Настроим регулярное обновление списков отзыва с помощью регламентных заданий или скриптов ОС, так как СОС имеют ограниченный срок действия.

4. Настройки подсистемы криптографии в БСП

Посмотрим на настройки конфигурации, если база данных разработана на базе Библиотеки Стандартных Подсистем (БСП). В справочнике «Настройки электронной подписи и шифрования» определяется место выполнения операций: на клиенте или на сервере.

Если для программы криптографии или конкретного действия включен признак выполнения на сервере, система будет требовать наличия всей цепочки сертификатов на сервере 1С:Предприятия. Проверим соответствие настроек:

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

5. Особенности настройки на серверах под управлением Linux

Если сервер 1С работает под управлением Linux, системные хранилища Windows отсутствуют. В этом случае взаимодействие с КриптоПро CSP происходит через консольные утилиты.

Проанализируем порядок установки цепочки в Linux-окружении:

  1. Запустим утилиту командной строки certmgr от имени суперпользователя или пользователя usr1cv8.
  2. Установим корневой сертификат в машинное хранилище mRoot (или в хранилище пользователя uRoot для usr1cv8).
  3. Установим промежуточные сертификаты в машинное хранилище mCA (или в хранилище uCA).
  4. Установим файл списка отзыва (CRL) с помощью флага -crl в соответствующее хранилище.
  5. Проверим права доступа пользователя usr1cv8 к каталогам и библиотекам КриптоПро CSP.

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

← На главную