# Медленное подписание документов через 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

```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

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

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

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

bash

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

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

### Решение

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

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

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

* <https://www.gosuslugi.ru/crt>
* <https://digital.gov.ru/ru/appeals/faq/certificates/>

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

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

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

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

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

bash

```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

```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

```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. Настройте мониторинг времени выполнения операций подписания


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://padocs.empldocs.app/dlya-razrabotchikov/nastroika-kedo/medlennoe-podpisanie-dokumentov-cherez-cryptopro-na-linux.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
