Почему зависает 1С при открытии настроек электронной подписи и проверке сертификатов?

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

При переходе на новые релизы платформы 1С:Предприятие (в частности, ветки 8.3.24) многие администраторы и разработчики сталкиваются с критической ошибкой: при открытии форм «Настройка электронной подписи и шифрования», работе с маркировкой («Честный Знак», эмиссия кодов), сервисами ЭДО или проверке сертификатов сеанс 1С намертво зависает. Причем первая проверка ЭЦП часто проходит успешно, а на второй попытке процесс полностью прекращает отвечать. Разберем по шагам, почему возникает эта неполадка, в каком коде она локализуется и какими способами можно восстановить стабильную работу системы.

Локализация ошибки в коде конфигурации

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


// Для функции ПроверитьСертификат
Функция ПроверитьСертификатНаКорректность(МенеджерКриптографииДляПроверки, СертификатДляПроверки, РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение)
    Попытка
        МенеджерКриптографииДляПроверки.ПроверитьСертификат(СертификатДляПроверки, РежимыПроверкиСертификата);
        Возврат Истина;
    Исключение
        ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
    КонецПопытки;
КонецФункции

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

Способ 1. Обновление компоненты ExtraCryptoAPI из свежих версий БСП

В типовых конфигурациях («1С:Бухгалтерия предприятия», «1С:Управление торговлей», «1С:ERP») взаимодействие с криптопровайдерами частично опирается на внешнюю компоненту ExtraCryptoAPI. В некоторых сборках конфигураций устаревшая версия компоненты вызывает конфликт при обращении к CryptoAPI операционной системы.

  1. Откроем конфигуратор и найдем справочник СертификатыКлючейЭлектроннойПодписиИШифрования.
  2. Перейдем в раздел макетов справочника, где хранится макет внешней компоненты ExtraCryptoAPI.
  3. Заменим макет компоненты версией из актуального релиза БСП (например, версии 3.1.10.369 или выше) либо установим последние официальные исправления (патчи) от фирмы «1С».

Способ 2. Корректировка режимов проверки сертификата через расширение

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

Проверим эту гипотезу и исключим проверку списков отзыва. Для этого создадим расширение конфигурации и переопределим параметры проверки:


&Вместо("ПроверитьСертификатНаКорректность")
Функция Расш1_ПроверитьСертификатНаКорректность(МенеджерКриптографииДляПроверки, СертификатДляПроверки, РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение)
    // Добавляем режим пропуска проверки по спискам отзыва
    Если РежимыПроверкиСертификата = Неопределено Тогда
        РежимыПроверкиСертификата = Новый Массив;
    КонецЕсли;
    
    // Исключаем сетевой опрос недоступных точек распространения списков отзыва
    РежимыПроверкиСертификата.Добавить(РежимПроверкиСертификата.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов);
    
    Попытка
        МенеджерКриптографииДляПроверки.ПроверитьСертификат(СертификатДляПроверки, РежимыПроверкиСертификата);
        Возврат Истина;
    Исключение
        ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
        Возврат Ложь;
    КонецПопытки;
КонецФункции

Если после добавления режима ИгнорироватьПроверкуВСпискеОтозванныхСертификатов зависания прекратились, причина заключается в недоступности внешних сетевых узлов УЦ с рабочего места или сервера 1С.

Способ 3. Перенос выполнения криптографических операций на сторону клиента

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

  1. Откроем раздел программы: Администрирование — Обмен электронными документами — Настройки электронной подписи и шифрования.
  2. Перейдем на вкладку настроек и снимем флажки «Проверять электронные подписи и сертификаты на сервере» и «Подписывать и шифровать на сервере».
  3. Сохраним настройки. В этом случае вызовы СКЗИ будут выполняться строго на клиентском ПК в контексте вошедшего пользователя Windows.

Способ 4. Настройка криптопровайдера и RDP-подключения

Когда работа организована через терминальный сервер (RDP), зависание при открытии форм подписи часто связано с конфликтом системной службы смарт-карт Windows (SCardSvr) и пробросом клиентских устройств.

Разберем по шагам оптимизацию терминальной среды:

  1. Отключение проброса неиспользуемых устройств: в свойствах RDP-ярлыка на вкладке «Локальные ресурсы» нажмем «Подробнее» и снимем галочки с пунктов «Смарт-карты» и «Другие поддерживаемые устройства Plug and Play», если сертификаты установлены непосредственно в реестр сервера.
  2. Очистка считывателей КриптоПро CSP: запустим панель управления криптопровайдера от имени администратора, перейдем на вкладку «Оборудование» — «Настроить считыватели» и удалим виртуальные ридеры и пункт «Все съемные диски», оставив только ридер «Реестр».
  3. Служба локальных смарт-карт (КриптоПро 5.0): проверим включение терминальных пользователей в локальную группу безопасности «Пользователи локальных смарт-карт КриптоПро CSP».

Способ 5. Устранение взаимоблокировок серверных процессов и обновление платформы

В некоторых сборках платформы 1С:Предприятие ветки 8.3.24 зарегистрирована ошибка взаимной блокировки (deadlock) потоков рабочего процесса rphost при повторном обращении к криптографическим библиотекам операционной системы. Именно поэтому первая проверка отрабатывает успешно, а следующая парализует работу, и восстановить процесс помогает лишь перезапуск службы 1C:Enterprise Server.

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

← На главную