
Введение
Электронная подпись (ЭП) — неотъемлемая часть современного цифрового документооборота. Мы сталкиваемся с ней ежедневно: при отправке отчетности в налоговую, подписании договоров, участии в тендерах или просто обмениваясь юридически значимыми документами. Но как устроен процесс проверки электронной подписи изнутри? Как убедиться, что электронная подпись действительна, и какие критерии делают ее юридически значимой?
На практике часто возникает задача: проверить ЭП быстро, удобно и без запуска сложного backend-сервиса. И здесь на помощь приходят no-code и low-code инструменты.
В этой статье мы покажем, как реализовать проверку электронной подписи документов, используя:
Telegram bot (интерфейс взаимодействия с пользователем);
n8n (no-code/low-code инструмент для автоматизации сценариев);
КриптоАРМ Server (проверка электронной подписи через API).
Такое решение может использоваться для:
Внутреннего контроля корректности подписей сотрудников.
Проверки ЭП в технической поддержке.
Интеграции в автоматические боты или системы.
Что такое электронная подпись: краткое напоминание
Электронная подпись — это способ подтвердить:
Авторство: кто подписал документ.
Целостность: что документ не изменялся после подписания.
Невозможность отказа: автор не может отказаться от подписи (в рамках закона).
С технической точки зрения ЭП — это результат криптографического преобразования (обычно хэш + шифрование закрытым ключом), прикреплённый к документу.
Виды ЭП по закону в России
Согласно 63-ФЗ выделяют три типа ЭП:
Простая ЭП (ПЭП) — логин/пароль, SMS-код и т.п.
Усиленная неквалифицированная ЭП (УНЭП) — криптографическая подпись, выдана удостоверяющим центром без аккредитации.
Усиленная квалифицированная ЭП (УКЭП) — аналог собственноручной подписи, выдана аккредитованным удостоверяющим центром, внесенным в реестр Минцифры.
В этой статье — про усиленные подписи, так как только они требуют криптографической проверки.
Что считается корректной подписью?
Электронная подпись считается корректной, если одновременно выполняются:
Электронная проверка прошла успешно — алгоритм расшифрования подписи с использованием открытого ключа даёт исходный хеш.
Документ не был изменен — пересчет хеша по содержимому совпадает с расшифрованным хешем.
Сертификат действителен — подпись была создана в период действия сертификата.
Сертификат не отозван — его нет в CRL (списке отозванных сертификатов) или OCSP-ответе.
Цепочка доверия замкнута — сертификат подписан УЦ, которому доверяет система.
Как проверить ЭП: шаг за шагом
1. Извлекаем подпись
Подпись может быть:
Встроенной (например, в PDF или XML).
Отдельным файлом (например, .sig, .sgn, .p7s, .cms).
2. Проверяем хеш
Из документа вычисляется хеш-функция (например, ГОСТ Р 34.11-2012 или SHA-256).
Из подписи расшифровывается хеш (используется открытый ключ из сертификата).
Сравниваются: если не совпадают — подпись недействительна.
3. Проверяем сертификат
Анализируем срок действия (Not Before, Not After).
Проверяем, не отозван ли сертификат: CRL / OCSP.
Строим цепочку доверия — от подписавшего к корневому УЦ.
4. Проверяем политики и расширения
Подходит ли ключ по OID (опционально).
Разрешено ли его использовать для подписи.
Инструменты для проверки ЭП
Вручную
openssl cms -verify ...
gostsum, cryptcp, certmgr, csptest (для ГОСТ)
GUI
Adobe Acrobat + КриптоПро PDF (PDF с КЭП).
Онлайн
КриптоПро: сервис проверки электронной подписи
Контур.Крипто: проверка электронной подписи.
Создание Telegram bot
Почему no-code?
В 2025 году no-code и low-code платформы стали нормой для быстрого прототипирования и автоматизации. Совсем недавно на Хабре вышла хорошая обзорная статья, в которой сравниваются популярные платформы: Make, Zapier, Relay.app, Activepieces, Pabbly Connect и n8n.
По итогам обзора выбор пал на n8n — универсальную open-source систему для построения автоматизации с мощной логикой, локальной установкой и поддержкой кастомных интеграций.
Почему n8n?
Бесплатный и open-source.
Можно развернуть локально (важно для безопасной работы с ЭП).
Есть полноценная поддержка HTTP, JavaScript и кастомной логики.
Большое количество готовых интеграций + поддержка community-нод.
Шаг 1: Создаем Telegram bot
Откройте в Telegram бота @BotFather.
Отправьте команду /newbot.
Введите имя и юзернейм для вашего бота.
Получите токен — он понадобится для n8n.
Шаг 2: Устанавливаем n8n
Самый простой способ — через Docker. Официальная инструкция.
Ниже — пример docker-compose.yml с базовой конфигурацией:
volumes:
n8n_data:
services:
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
ports:
- 5678:5678
environment:
- N8N_RUNNERS_ENABLED=true
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
volumes:
- n8n_data:/home/node/.n8n
Старт контейнер с n8n:
docker-compose up -d
После запуска по адресу http://localhost:5678 откроется визуальный редактор сценариев.

Не будем подробно останавливаться на описании интерфейса n8n и нюансах его использования — он интуитивно понятен, а все ключевые моменты хорошо освещены в официальной документации. Кроме того, на сайте проекта представлен обширный раздел сообщества, где собраны практические статьи и кейсы по автоматизации самых разных сценариев.
Шаг 3: Устанавливаем Telegram Polling ноду
Почему не стандартный Telegram Trigger?
Официальный Telegram Trigger в n8n работает только через Webhook, который требует HTTPS. Если вы запускаете n8n локально или без SSL-сертификатов, Webhook просто не заработает.
n8n-nodes-telegram-polling — альтернативная нода от сообщества, которая использует polling-режим Telegram API (вместо webhook). Это значит:
Работает без HTTPS.
Отлично подходит для разработки и локальных стендов.
Проста в установке и использовании.
Установка:
В интерфейсе n8n откройте меню Settings > Community Nodes.
Нажмите Install, введите
n8n-nodes-telegram-pollingУстановка n8n-nodes-telegram-polling ноды После установки n8n-nodes-telegram-polling будет доступна одна новая нода Telegram Trigger (long polling) Trigger:

Шаг 4: Установка КриптоАРМ Server
Для работы с электронной подписью мы используем КриптоАРМ Server — решение для проверки и формирования электронных подписей через REST API. Отлично подходит для интеграции в различные бизнес-процессы.
Сервер можно быстро развернуть у себя по инструкции. Работает по умолчанию на порту 3037.
Что умеет КриптоАРМ Server
КриптоАРМ Server — это универсальный REST-сервер для работы с электронными подписями. Он поддерживает:
PKCS#7 / CMS / CAdES подписи (в т.ч. CAdES-BES, CAdES-T и др.).
Подписи с использованием ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012.
Проверку цепочки сертификатов (CRL, OCSP).
Проверку подписи PDF-документов.
Генерацию PDF-отчета о проверке.
Визуализация штампа подписи в PDF-документах.
Пример API-запроса:
curl -X POST http://localhost:3037/cms/verify \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"cms": "MIAGCSqGSIb3...==",
"data": "dGVzdA=="
}'
Ответ:
{
"status": 200,
"isValid": true,
"isValidSign": true,
"signs": [
{
"certificate": {
"subjectFriendlyName": "Test name",
"issuerFriendlyName": "CRYPTO-PRO Test Center 2"
},
"isCertChainValid": true
}
],
"report": "JVBERi0xLjcKJ...=" // PDF-отчет base64
}
Ответ включает:
isValid — корректность подписи.
signs — информация о подписантах.
report — PDF-отчет в Base64.
dataStamp — PDF-файл в Base64 с визуализацией подписи.
Шаг 5: Создаем рабочий процесс в n8n
Создадим flow, который:
Получает файл с подписью от пользователя.
Извлекает данные.
Отправляет их в КриптоАРМ Server.
Возвращает результат пользователю.
1. Telegram Trigger
Credential to connect with: укажите токен, полученный от BotFather.
Updates: All updates.
Limit и Timeout: можно оставить по умолчанию.
2. Получение файла с подписью
Обратите внимание: сначала необходимо получить file_id, а затем извлечь файл из Telegram. Для этого мы будем использовать стандартную ноду Telegram — Get a file.

Если файл в сообщении отсутствует (например, при первом запуске бота), необходимо предусмотреть отдельную обработку этой ситуации.

3. Получение значение Base64 файла с подписью
Используем стандартную ноду Extract from File:

4. HTTP Request к КриптоАРМ Server
Добавьте HTTP Request ноду:

5. Ответ пользователю
Добавьте Telegram Send Message:

Текст ответа будет формироваться при помощи такого выражения:
{{$json.message ? $json.message: "Подпись " + ($json.isValid ? "": "не ") + "действительна"}}
Полный рабочий процесс будет выглядеть так:

Исходный код этого flow доступен по ссылке.
Что дальше?
Можно прикрутить проверку PDF-файлов с визуализацией штампа подписи (dataStamp).
Отправлять пользователю PDF-отчет (report) прямо в Telegram.
Поддерживать проверку отсоединенной подписи.
Добавить сбор оценок ответов бота.
Все это мы реализовали в нашем боте. Подробности и описание тут.

Заключение
В результате мы собрали простой и удобный Telegram bot, который выполняет проверку электронной подписи без лишнего кода — с помощью n8n, КриптоАРМ Server и кастомных Telegram-нод. Это хорошее решение для внутренних систем, командного документооборота и автоматизированной проверки ЭП.
Надеемся, что статья оказалась полезной, а приведённые примеры и подходы помогут вам внедрить проверку электронной подписи в собственных проектах.