Перейти к основному содержимому

Медленное подписание документов через CryptoPro на Linux

Описание проблемы​

При подписании документов через Госключ или другие сервисы электронной подписи операция подписания занимает аномально долгое время (5–30 минут вместо нескольких секунд), что приводит к таймаутам и ошибкам.

Как проявляется​

  • Пользователь нажимает кнопку «Подписать» в интерфейсе веб-приложения EmplDocs
  • Интерфейс «зависает» на длительное время без видимой активности
  • Запрос Sign к базе 1С выполняется 5–20 минут (до таймаута)
  • По истечении таймаута возвращается ошибка HTTP 504 Gateway Timeout
  • При этом на других серверах или в других базах подписание работает нормально (1–10 секунд)

Затронутые компоненты​

  • Сервер 1С:Предприятие на Linux (Ubuntu, Astra Linux, RHEL/CentOS и др.)
  • CryptoPro CSP 5.0 и выше
  • Любые операции подписания через МенеджерКриптографии.Подписать() в 1С
  • Интеграции с Госключом, Контуром и другими провайдерами ЭЦП

Причина​

Проблема возникает из-за неустановленной цепочки сертификатов на сервере.

В случае с отправкой документа в Госключ — цепочка для обезличенного сертификата организации.

При подписании CryptoPro выполняет проверку цепочки доверия сертификата:

Сертификат пользователя → Промежуточный УЦ → Корневой УЦ (Минцифры)

Если промежуточные или корневые сертификаты не установлены локально, CryptoPro:

  1. Пытается загрузить недостающие сертификаты из интернета
  2. Проверяет списки отзыва сертификатов (CRL) через HTTP/LDAP
  3. Выполняет OCSP-запросы для проверки статуса сертификата

Каждая из этих операций может занимать минуты, особенно если:

  • Серверы УЦ недоступны или работают медленно (частая причина — интернет на сервере 1С по белым спискам)
  • Файрвол блокирует исходящие соединения
  • DNS-резолвинг работает некорректно

Специфика платформы​

Linux vs Windows​

На Windows проблема встречается реже, потому что:

  • Корневые сертификаты Минцифры часто уже установлены через Windows Update
  • Браузеры и другое ПО могли ранее установить нужные сертификаты
  • Механизм автоматического обновления корневых сертификатов работает «из коробки»

На Linux сертификаты необходимо устанавливать вручную, так как:

  • Нет централизованного механизма распространения российских корневых сертификатов
  • Серверы 1С обычно устанавливаются «с нуля» без лишних компонентов
  • Администраторы часто устанавливают только сертификат пользователя, забывая о цепочке

Версии CryptoPro​

Проблема воспроизводится на всех версиях CryptoPro CSP 4.0, 5.0, 5.0 R2 и выше. Это не баг, а штатное поведение — криптопровайдер обязан проверять цепочку доверия согласно стандартам.

Диагностика​

Шаг 1. Проверка подписания из командной строки​

Выполните от имени пользователя сервера 1С:

bash

# Создать тестовый файл
echo "test" > /tmp/test.txt

# Подписать по отпечатку сертификата (как делает 1С)
sudo -u usr1cv8 /opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint ОТПЕЧАТОК_СЕРТИФИКАТА /tmp/test.txt /tmp/test.sig

Признаки проблемы:

  • Появляется сообщение «Цепочка сертификатов не проверена»
  • Операция выполняется с задержкой в несколько минут
  • Запрашивается подтверждение на использование сертификата

Если проблемы нет:

  • Подписание завершается мгновенно (менее 1 секунды)
  • Нет предупреждений о цепочке сертификатов

Шаг 2. Просмотр информации о сертификате​

bash

sudo -u usr1cv8 /opt/cprocsp/bin/amd64/certmgr -list -thumbprint ОТПЕЧАТОК_СЕРТИФИКАТА

Обратите внимание на поле Issuer (Издатель) — это УЦ, выдавший сертификат.

Шаг 3. Проверка установленных корневых сертификатов​

bash

# Корневые сертификаты
/opt/cprocsp/bin/amd64/certmgr -list -store mRoot

# Промежуточные сертификаты УЦ
/opt/cprocsp/bin/amd64/certmgr -list -store mCA

Решение​

Вариант 1. Установка цепочки сертификатов (рекомендуется)​

1. Скачать корневой сертификат Минцифры России

Официальные источники:

Обычно файл называется russian_trusted_root_ca.cer или rootca_ssl_rsa2022.cer.

2. Найти и скачать промежуточный сертификат УЦ

Промежуточный сертификат можно найти:

  • На сайте удостоверяющего центра, выдавшего сертификат
  • В расширении сертификата «Доступ к информации о центре сертификации» (AIA)

3. Установить сертификаты

bash

# Установить корневой сертификат в хранилище доверенных корневых
sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -file /path/to/russian_trusted_root_ca.cer

# Установить промежуточный сертификат УЦ
sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mCA -file /path/to/intermediate_ca.cer

4. Проверить результат

bash

sudo -u usr1cv8 /opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint ОТПЕЧАТОК_СЕРТИФИКАТА /tmp/test.txt /tmp/test2.sig

Подписание должно выполняться мгновенно без предупреждений.

Вариант 2. Открыть сетевой доступ для проверок​

Если установка сертификатов невозможна, обеспечьте серверу доступ к:

  • Серверам CRL удостоверяющих центров (обычно HTTP, порт 80)
  • Серверам OCSP (HTTP, порт 80)
  • Серверам AIA для загрузки промежуточных сертификатов

Этот вариант зависит от доступности внешних сервисов.

Вариант 3. Отключение проверки отзыва (не рекомендуется)​

Внимание: Этот способ снижает безопасность и должен использоваться только для диагностики.

bash

# Отключить проверку отзыва
sudo /opt/cprocsp/sbin/amd64/cpconfig -ini '\config\Parameters' -add string 'revocation_check' 'none'

# Вернуть проверку обратно
sudo /opt/cprocsp/sbin/amd64/cpconfig -ini '\config\Parameters' -del 'revocation_check'

Проверка после исправления​

  1. Повторите тест подписания из командной строки — должно выполняться менее 1 секунды
  2. Выполните подписание документа в 1С — операция должна занимать 5–15 секунд
  3. Убедитесь, что таймауты больше не возникают

Профилактика​

При настройке сервера 1С на Linux с CryptoPro:

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