Как стать автором
Обновить

Как создать Telegram bot для проверки электронной подписи

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.4K

Введение

Электронная подпись (ЭП) — неотъемлемая часть современного цифрового документооборота. Мы сталкиваемся с ней ежедневно: при отправке отчетности в налоговую, подписании договоров, участии в тендерах или просто обмениваясь юридически значимыми документами. Но как устроен процесс проверки электронной подписи изнутри? Как убедиться, что электронная подпись действительна, и какие критерии делают ее юридически значимой?

На практике часто возникает задача: проверить ЭП быстро, удобно и без запуска сложного backend-сервиса. И здесь на помощь приходят no-code и low-code инструменты.

В этой статье мы покажем, как реализовать проверку электронной подписи документов, используя:

  • Telegram bot (интерфейс взаимодействия с пользователем);

  • n8n (no-code/low-code инструмент для автоматизации сценариев);

  • КриптоАРМ Server (проверка электронной подписи через API).

Такое решение может использоваться для:

  • Внутреннего контроля корректности подписей сотрудников.

  • Проверки ЭП в технической поддержке.

  • Интеграции в автоматические боты или системы.

Что такое электронная подпись: краткое напоминание

Электронная подпись — это способ подтвердить:

  • Авторство: кто подписал документ.

  • Целостность: что документ не изменялся после подписания.

  • Невозможность отказа: автор не может отказаться от подписи (в рамках закона).

С технической точки зрения ЭП — это результат криптографического преобразования (обычно хэш + шифрование закрытым ключом), прикреплённый к документу.

Виды ЭП по закону в России

Согласно 63-ФЗ выделяют три типа ЭП:

  1. Простая ЭП (ПЭП) — логин/пароль, SMS-код и т.п.

  2. Усиленная неквалифицированная ЭП (УНЭП) — криптографическая подпись, выдана удостоверяющим центром без аккредитации.

  3. Усиленная квалифицированная ЭП (УКЭП) — аналог собственноручной подписи, выдана аккредитованным удостоверяющим центром, внесенным в реестр Минцифры.

В этой статье — про усиленные подписи, так как только они требуют криптографической проверки.

Что считается корректной подписью?

Электронная подпись считается корректной, если одновременно выполняются:

  1. Электронная проверка прошла успешно — алгоритм расшифрования подписи с использованием открытого ключа даёт исходный хеш.

  2. Документ не был изменен — пересчет хеша по содержимому совпадает с расшифрованным хешем.

  3. Сертификат действителен — подпись была создана в период действия сертификата.

  4. Сертификат не отозван — его нет в CRL (списке отозванных сертификатов) или OCSP-ответе.

  5. Цепочка доверия замкнута — сертификат подписан УЦ, которому доверяет система.

Как проверить ЭП: шаг за шагом

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

Онлайн

Создание 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

  1. Откройте в Telegram бота @BotFather.

  2. Отправьте команду /newbot.

  3. Введите имя и юзернейм для вашего бота.

  4. Получите токен — он понадобится для 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
Визуальный редактор n8n

Не будем подробно останавливаться на описании интерфейса n8n и нюансах его использования — он интуитивно понятен, а все ключевые моменты хорошо освещены в официальной документации. Кроме того, на сайте проекта представлен обширный раздел сообщества, где собраны практические статьи и кейсы по автоматизации самых разных сценариев.

Шаг 3: Устанавливаем Telegram Polling ноду

Почему не стандартный Telegram Trigger?

Официальный Telegram Trigger в n8n работает только через Webhook, который требует HTTPS. Если вы запускаете n8n локально или без SSL-сертификатов, Webhook просто не заработает.

n8n-nodes-telegram-polling — альтернативная нода от сообщества, которая использует polling-режим Telegram API (вместо webhook). Это значит:

  • Работает без HTTPS.

  • Отлично подходит для разработки и локальных стендов.

  • Проста в установке и использовании.

Установка:

  1. В интерфейсе n8n откройте меню Settings > Community Nodes.

  2. Нажмите Install, введите
    n8n-nodes-telegram-polling

    Установка n8n-nodes-telegram-polling ноды
    Установка n8n-nodes-telegram-polling ноды
  3. После установки n8n-nodes-telegram-polling будет доступна одна новая нода Telegram Trigger (long polling) Trigger:

Telegram Trigger (long polling) Trigger нода
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.

 Получение файла из Telegram
 Получение файла из Telegram

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

Настройка обработки ошибок при получении файла
Настройка обработки ошибок при получении файла

3. Получение значение Base64 файла с подписью

Используем стандартную ноду Extract from File:

 Преобразование файла в Base64
Преобразование файла в Base64

4. HTTP Request к КриптоАРМ Server

Добавьте HTTP Request ноду:

Проверка подписи в КриптоАРМ Server
Проверка подписи в КриптоАРМ Server

5. Ответ пользователю

Добавьте Telegram Send Message:

Результат проверки подписи
Результат проверки подписи

Текст ответа будет формироваться при помощи такого выражения:

{{$json.message ? $json.message: "Подпись " + ($json.isValid ? "": "не ") + "действительна"}}

Полный рабочий процесс будет выглядеть так:

Рабочий процесс в n8n
Рабочий процесс в n8n

Исходный код этого flow доступен по ссылке.

Что дальше?

  • Можно прикрутить проверку PDF-файлов с визуализацией штампа подписи (dataStamp).

  • Отправлять пользователю PDF-отчет (report) прямо в Telegram.

  • Поддерживать проверку отсоединенной подписи.

  • Добавить сбор оценок ответов бота.

Все это мы реализовали в нашем боте. Подробности и описание тут.

Telegram bot SignKloudOne
Telegram bot SignKloudOne

Заключение

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

Надеемся, что статья оказалась полезной, а приведённые примеры и подходы помогут вам внедрить проверку электронной подписи в собственных проектах.

Теги:
Хабы:
+7
Комментарии5

Публикации