Поскольку Интеграционный шлюз НРД (ИШ) официально работает только на Astra Linux SE 1.6/1.7 (RPM-версии нет, дистрибутив только .deb для Debian-based), мигрируем инфраструктуру с РЕД ОС на Astra. Это заодно проверит «чистую» установку с нуля. deploy/astra/install.sh — установщик bj-server для свежей Astra ВМ: - проверка ОС (Astra Linux SE) - apt-зависимости (curl, git, podman, podman-compose, postgresql-client) - скачивание Go 1.24+ с go.dev, если нет - системный пользователь bj + каталоги /opt/bj /var/lib/bj /var/log/bj - git clone репо в /opt/bj/src - go build бинарника /opt/bj/bj-server - podman-compose up -d postgres + накат всех миграций - systemd unit с безопасными ограничениями (NoNewPrivileges, ProtectSystem=strict, ReadWritePaths только нужные, PrivateTmp) - автозапуск + проверка systemctl is-active - финальная подсказка с URL'ами deploy/astra/install-validata.sh — установщик Валидата CSP: - ищет .deb пакеты в dist/validata/ или принимает путь аргументом - если пакетов нет — печатает текст письма для запроса дистрибутива у НРД (soed@nsd.ru) или МБ (pki@moex.com) - dpkg -i + apt-get install -f для зависимостей - проверка установки в /opt/Validata* deploy/astra/install-ish.sh — установщик ИШ: - ищет igate_*_amd64.deb в стандартных местах (dist/ish/, ~/Downloads и т.п.) - проверяет наличие Валидаты (предупреждает если нет) - dpkg -i igate_*.deb - подсказывает следующие шаги (запуск GUI, настройка БД и канала WSL) deploy/astra/migrate-from-redos.sh — экспорт со старой РЕД ОС ВМ: - pg_dump БД bj (через podman exec или напрямую) - копия ~/.bj/setup.json (ищется в нескольких стандартных путях) - последние 7 дней логов из /var/log/bj и journalctl - meta.txt с версиями ОС/пакетов - README.md с инструкциями восстановления на новой ВМ - итоговый тарбол /tmp/bj-migration-YYYY-MM-DD-HHMM.tar.gz deploy/astra/healthcheck.sh — проверка после установки: - 8 разделов: ОС, пользователь/каталоги, systemd, HTTP, PostgreSQL, Валидата, ИШ, сетевые порты - цветной вывод OK/WARN/FAIL для каждого пункта deploy/astra/README.md — пошаговая инструкция миграции из 8 этапов: - подготовка (Astra ВМ, доступ root, запрос Валидаты у НРД) - экспорт со старой ВМ - install.sh на новой ВМ - restore БД и настроек - healthcheck - install-validata.sh + импорт сертификатов УЦ МБ - install-ish.sh + настройка канала WSL - первый тест с роботом MOEX МОСТ - раздел «что НЕ переносится автоматически» - раздел «откат» (старая ВМ работает до подтверждения миграции) REPORT.md обновлён: - общая готовность 72% → 75% - готовность к роботу 85% → 88% - новая строка «Установщик/мигратор на Astra Linux: 100% ✅» - «Установка ИШ на наш стенд» поднялась с 0% до 30%
25 KiB
Bridge-and-Join-s — отчёт о ходе работ
Дата: 14.05.2026 (3-я редакция за день — скачан дистрибутив ИШ + полная документация ИШ) Контур: дев-стенд РЕД ОС 8 (10.10.10.22), bj-server на :8080, lk-emulator на :8083 Целевая интеграция: сервис MOEX МОСТ (M2M) через НКО АО НРД
Готовность по областям
| Область | Готовность | Статус |
|---|---|---|
| Контракты и модели M2M (XSD → Go) | 100% | ✅ Готово |
| Журнал сделок (PostgreSQL + in-memory) | 100% | ✅ Готово |
| Бизнес-логика FSM (стейт-машина заявок) | 100% | ✅ Готово |
| Веб-интерфейс администратора | 95% | ✅ Готово |
| Мастер настройки (wizard) для оператора | 100% | ✅ Готово |
| Установка и конфигурация КриптоПро CSP через UI | 100% | ✅ Готово |
| Авто-загрузка сертификатов УЦ (мониторинг + ежесуточное обновление) | 100% | ✅ Готово |
| Контейнеры КриптоПро с флешки (импорт в HDIMAGE) | 80% | ⚠ Без UI-импорта сертификата из контейнера |
| Лента новостей + мониторинг сайта НРД (doc-watcher) | 100% | ✅ Готово |
| Эмулятор робота-автотеста НРД (внутренний mock) | 90% | ⚠ Сценарий 3333 — частично |
| Реальное подключение к роботу на TEST3 НРД | 30% | ⚠ REST-клиент ИШ готов, ждём сам ИШ + сертификат |
| REST-клиент ИШ НРД (по DOC/instr-ish-rest-api.pdf) | 100% | ✅ POST file, GET status, GET list, GET package, упаковщик ZIP, 10/10 тестов |
| Дистрибутив ИШ НРД и полная документация | 100% | ✅ Скачаны: igate_100.0-765_amd64.deb (117 МБ) + 6 PDF |
| Установка ИШ на наш стенд | 30% | ⚠ Скрипты установки готовы, ждём Astra Linux ВМ от инфра-команды |
| Установщик/мигратор на Astra Linux | 100% | ✅ 5 скриптов в deploy/astra/: install/install-ish/install-validata/migrate-from-redos/healthcheck + README |
| Получение СКЗИ «Валидата CSP» для Linux | 0% | ⏳ Запрос в soed@nsd.ru / pki@moex.com — см. блокер #2 |
| Сертификат УЦ Московской Биржи для подписи | 0% | ⏳ Не получен — см. блокер #3 |
| Подключение реального ЛК ESIA Finance | 20% | ⚠ Эмулятор lk-emulator работает, реальный URL не указан |
| Контракт с Fansy (ETL) | 30% | ⚠ Контракт документирован, ETL не реализован стороной Fansy |
| Уведомления (e-mail, мессенджеры) | 0% | ⏳ M3-M4 |
| Тесты, CI/CD | 40% | ⚠ Unit-тесты компонентов, нет E2E против реального НРД |
Общая готовность системы: ≈ 75% (по объёму функциональности) Готовность к интеграционному тесту с роботом: ≈ 88% (зависит только от внешних факторов: Astra Linux ВМ, Валидата CSP, сертификат УЦ МБ — на нашей стороне установщик готов)
Что сделано (28 коммитов)
Архитектура и ядро (M1)
- Реализованы Go-модели всех M2M-сообщений (M2MTransferRequest, Response, Decision, History, Movement) с валидацией.
- Стейт-машина обработки заявок (FSM):
draft → validated → submitted_to_nsd → awaiting_decision → confirmed/rejected/timed_out → done+ ветка ручного разбора. - Один исполняемый бинарник
bj-server(вместо запланированных микросервисов) — рассчитано на нагрузку до 1000 сделок/день. - Хранилище: PostgreSQL 16 в контейнере podman (один клик «Поднять автоматически» в UI), миграции для двух схем —
fansy.*(данные от Fansy) иm2m_core.*(журнал сделок). Fallback на in-memory для дева.
Криптография
- Переход с КриптоПро JCP (~82 000₽, Java) на КриптоПро CSP (~30-50 000₽, нативный) — экономия лицензии в ~2 раза. Подходит для нашего объёма (100-1000 сделок/день).
- Go-клиент к СКЗИ через стандартный PKCS#11 интерфейс (
internal/cryptocli). Один клиент работает с КриптоПро CSP, Рутокен ЭЦП 2.0, Валидата, ViPNet — меняется только путь к .so модулю. - UI-кнопка «Загрузить дистрибутив КриптоПро»: загружаешь tar/tgz/rpm, система сама распаковывает и устанавливает через
sudo rpm -Uvh. - Активация лицензии через UI (
cpconfig -license -setпод капотом). - Импорт сертификатов (.pfx/.p12 с PIN, .cer/.crt без) в хранилища
uMy/mroot/uRootчерезcertmgr -inst. - Авто-обнаружение контейнеров КриптоПро на USB-флешках (формат
name.000): сканирует/run/media/$USER/,/media/,/mnt/; кнопка «Скопировать в локальное хранилище» переносит контейнер в/var/opt/cprocsp/keys/$USER/. - Авто-обнаружение сертификатов на Рутокене ЭЦП 2.0 — список заполняется автоматически после подключения токена в USB.
Сертификаты УЦ
- Авто-загрузка корневых и подписных сертификатов УЦ по списку URL: SHA-256 дедуп, импорт в
mroot/uRootчерезcertmgr. - Ежесуточная фоновая горутина обновляет сертификаты, в ленте новостей появляется уведомление «Обновлён сертификат УЦ: ».
- За 14 дней до истечения сертификата — отдельное предупреждение в ленте.
Веб-интерфейс администратора (порт 8080)
6 разделов меню:
- Дашборд — счётчики сделок, состояние подсистем, последние заявки, блок «Новости» сверху.
- Мастер настройки — пошаговая настройка (5 шагов) с прогресс-баром, подсказки «?» и «Где взять?» рядом с каждым полем.
- Настройка — расширенные параметры всех подсистем.
- Заявки — журнал + карточка заявки с историей FSM.
- Статус системы — health-check всех подсистем.
- Инструкции — 5 help-страниц: БД, API ЛК, КриптоПро, Внешние системы, Тестирование с роботом.
- Новости — лента событий + кнопка «Проверить обновления документации НРД сейчас».
Все надписи на русском.
Мониторинг НРД (doc-watcher)
- Раз в сутки скачивает страницы с сайта НРД, парсит ссылки на PDF, обновляет файлы в
DOC/(старые версии переименовываются в.YYYY-MM-DD.pdf.bakдля аудита). - Каждое обновление публикуется как новость в ленту.
- Уже скачаны три свежие инструкции от 12.05.2026:
instruktsiya-po-testirovaniyu-s-robotom.pdf— инструкция по роботу-автотестуinstruktsiya-...-fizicheskim-litsom-samomu-sebe.pdf— обмен при self-transferservis-most-m2m.pdf— обзор сервиса
Робот-автотест MOEX МОСТ
- Реализован внутренний робот-эмулятор: bj-server понимает код робота
MC0012500000и 4 тестовых сценария (1111/2001/2002/3333) через DocumentSeries. - Это позволяет проверить нашу логику обработки ответов до того, как у нас появится реальный ИШ + сертификат + доступ к TEST3.
- Help-страница
/admin/help/robotс полной документацией (коды ошибок M2M01-M2M09, тестовые наборы депозитариев, схема обмена). - Когда подключим реальный ИШ — переключение прозрачное, те же заявки пойдут на реальный TEST3.
REST-клиент ИШ НРД (готов на нашей стороне)
- По свежей спецификации НРД (
DOC/instr-ish-rest-api.pdf) реализован Go-клиент вinternal/nsdadapter/igw:POST /api/package/{channel}/file— отправка ZIP (Type=archive, File=base64)GET /api/package/status/{id}— статус: NEW / SENT / ERRORGET /api/package?channel=&type=M2MTD&...— список входящих от НРДGET /api/package/{id}— скачать ZIP пакета (поддерживает и raw ZIP, и base64-в-JSON)
- Упаковщик (
pack.go):M2MTransferRequest → ZIP (XML + config.xml)по разделу 2.3 инструкции - Распаковщик: ZIP → DocXML + winf.xml + .sgn (отсоединённая подпись НРД)
- Парсеры:
ParseDecision,ParseResponse— из XML в Go-структуры черезnsdxml.Unmarshal - Покрыто тестами: 10/10 PASS (httptest + zip round-trip + 4xx без ретраев + retry на 5xx)
- Готов к переключению: как только получим живой ИШ от НРД, нужно только указать BaseURL и Channel в
/admin/setup— код уже всё умеет
Полный пакет миграции на Astra Linux (новое — 14.05.2026, вечер)
Поскольку ИШ работает только на Astra Linux, инфраструктура мигрирует на эту ОС. Подготовлен набор скриптов для чистой установки с нуля в deploy/astra/:
install.sh— bash-установщик для свежей Astra Linux ВМ: проверка ОС, apt-зависимости, скачивание Go 1.24+, создание пользователя bj, клон репо, сборкаbj-server, поднятие PostgreSQL в podman, накат миграций, systemd unit с безопасными ограничениями (NoNewPrivileges, ProtectSystem=strict, и т.п.), стартует сервисinstall-validata.sh— установка СКЗИ Валидата CSP + АПК Валидата Клиент L черезdpkg -i(когда придёт дистрибутив от НРД). С подсказкой текста письма-запроса, если дистрибутива ещё нетinstall-ish.sh— установка ИШ черезdpkg -i igate_*.deb(дистрибутив уже скачан вdist/ish/)migrate-from-redos.sh— экспорт состояния со старой РЕД ОС ВМ:pg_dumpБД, копия~/.bj/setup.json, последние логи, метаинформация, тарбол/tmp/bj-migration-YYYY-MM-DD-HHMM.tar.gzдля переноса на новую ВМhealthcheck.sh— проверка состояния всех компонентов после установки: ОС, пользователь, бинарник, systemd, HTTP-эндпоинты, PostgreSQL, Валидата, ИШ, сетевые портыREADME.md— пошаговая инструкция миграции (8 этапов), что НЕ переносится автоматически, как откатываться
Дистрибутив ИШ и полная документация (получены 14.05.2026)
По наводке от заказчика на странице https://www.nsd.ru/workflow/system/programs/web-service/ найдены и скачаны все официальные материалы:
- Дистрибутив ИШ Linux:
dist/ish/igate_100.0-765_amd64.deb(117 МБ, для Astra Linux) - Электронная подпись к дистрибутиву:
dist/ish/igate_95.0-716_amd64.SGN - DOC/ruk_install_ish_2025_11_10.pdf (4.7 МБ) — Руководство по установке ИШ от 10.11.2025. Главное:
- Поддерживаемые ОС: Windows 10/Server, Astra Linux SE 1.6/1.7 (РЕД ОС не упомянута)
- СКЗИ: «Валидата CSP» + АПК «Валидата Клиент L» (НЕ КриптоПро)
- БД: SQLite или PostgreSQL (PostgreSQL обязателен для REST API)
- Только ГОСТ-криптография под Linux (RSA — только Windows)
- Только сертификаты от УЦ МБ
- DOC/ruk_pol_ish.pdf (3.5 МБ) — Руководство пользователя ИШ
- DOC/QA_ish.pdf (2.5 МБ) — Q&A
- DOC/test-case_ish.pdf (1.3 МБ) — Тест-кейсы для проверки работоспособности ИШ
- DOC/instr_int_sh_01072025.pdf (0.4 МБ) — Инструкция по созданию заявки на тестирование
- DOC/web_service_nrd_standard_soap_rest.pdf (2.2 МБ) — Техрекомендации Web-сервиса ONYX
dist/ish/.deb не коммитится в git (большой), но dist/ish/README.md содержит все ссылки на повторное скачивание.
Безопасность и надёжность
- Баннер «🟡 РЕЖИМ ЭМУЛЯЦИИ» отображается на каждой странице админки пока не настроен ИШ или СКЗИ — оператор не сможет случайно принять mock-результат за реальный.
- Контекстная навигация после действий (после POST возврат на ту же страницу, не в /admin/setup).
- HTTP-клиенты для запросов на nsd.ru/cryptopro.ru идут напрямую (игнорируют корпоративный прокси), браузерный User-Agent для обхода антибот-фильтров.
- systemd-unit
deploy/systemd/bj-server.serviceсEnvironment=LD_LIBRARY_PATH=/opt/cprocsp/lib/amd64, ProtectSystem=strict, NoNewPrivileges, и т.п.
Что в процессе и в очереди
Внешние блокеры (без них не двинемся к реальному НРД)
-
Astra Linux ВМ для ИШ ⭐ новый блокер
- Дистрибутив ИШ — только
igate_100.0-765_amd64.deb(под Astra Linux SE 1.6/1.7). РЕД ОС официально не поддерживается, RPM-версии нет. - Что нужно: поднять отдельную Astra Linux ВМ (10.10.10.23?) или попробовать запустить ИШ в Docker-контейнере с Astra-образом.
- Альтернативы: Windows 10/Server (есть .exe-дистрибутив, но это шаг назад от Linux).
- Срок: зависит от инфра-команды; ~1 день поднять ВМ + ~30 мин установить ИШ.
- Дистрибутив ИШ — только
-
СКЗИ «Валидата CSP» + АПК «Валидата Клиент L» ⭐ новый блокер
- ИШ требует именно Валидату, НЕ КриптоПро CSP (у нас стоит КриптоПро, придётся ставить параллельно или вместо).
- Где взять: только по запросу —
soed@nsd.ru(НРД) илиpki@moex.com(МБ). Временная лицензия выдаётся. - Что нужно: отправить письмо с реквизитами организации и обоснованием (подключение к MOEX МОСТ M2M).
- Срок: ~1-3 дня на ответ НРД.
-
Сертификат подписи УЦ Московской Биржи (ca.moex.com)
- Нужен для подписи отправляемых сообщений. Кладётся в Справочник сертификатов АПК Валидата Клиент L, экспортируется в системное хранилище.
- Что нужно: оформить заявку в УЦ МБ от организации, получить сертификат + приватный ключ.
- Срок: зависит от УЦ МБ.
-
Заявка на тестирование в TEST3 НРД
- Форма:
https://www.nsd.ru/workflow/zayavka-na-testirovanie/ - Инструкция:
DOC/instr_int_sh_01072025.pdf - Получаем код депонента-тестера и доступ к контурам GUEST/TEST3.
- Форма:
-
Сертификаты УЦ НРД (для проверки квитанций)
- Где взять:
https://www.nsd.ru/workflow/system/cryptography/— сейчас отдаёт 404 на нашем дев-стенде (вероятно перенесено в ЛК НРД депонента). - В коде уже есть форма «Авто-загрузка сертификатов УЦ» в
/admin/setup— как только получим прямые URL .cer, добавим их.
- Где взять:
-
Окно техработ TEST3: 18.05.2026 — 22.05.2026
- Полевое тестирование в этот период невозможно. Реальные прогоны — до 18-го или после 22-го мая.
-
Доступ к API реального ЛК ESIA Finance
- Сейчас bj-server работает с встроенным эмулятором
lk-emulatorна :8083. - Что нужно: URL продакшен/тест ЛК, Basic-auth учётка.
- Сейчас bj-server работает с встроенным эмулятором
Внутренние задачи (можем делать параллельно)
| Задача | Приоритет | Эффект |
|---|---|---|
| Завершить сценарий 3333 робота — приёмная сторона bj-server (входящие M2MTransferRequest) | средний | Полное покрытие тестов с роботом |
| UI для импорта сертификата из контейнера КриптоПро (после копирования с флешки) | низкий | Сейчас делается вручную через certmgr |
| Уведомления: SMTP, Yandex Messenger, Telegram (плагины через единый интерфейс Notifier) | средний (M3) | Операторам — критичные события в мессенджеры |
| Расширение тестов: unit + интеграционные с mock-роботом, нагрузочные | низкий | Уверенность перед прод |
| Документация для команды Fansy (ETL): передача контракта, согласование SLA, прописывание IP в pg_hba.conf | средний | Запуск ETL-потока |
Что после получения ИШ и сертификата (план первичного тестирования с роботом)
- День 0 (получили дистрибутив ИШ + сертификат + руководство)
- Поставить ИШ на dev-ВМ.
- Положить сертификат в ИШ-хранилище.
- В bj-server:
/admin/setup→ ИШ профильtest3-gost, URL ИШ.
- День 1 (smoke-тест)
- Отправить через bj-server заявку с ReceiverCode =
MC0012500000, DocumentSeries =2001, DocumentNumber =111111→ ожидаем «принять все бумаги» от робота. - Проверить: квитанция от НРД, Decision от робота, callback в
lk-emulator, статус в журнале →confirmed.
- Отправить через bj-server заявку с ReceiverCode =
- День 2-3 (полное покрытие сценариев)
- 1111 (отказ M2M01..M2M09) — все коды ошибок.
- 2001 / 2002 — все депозитарии, все варианты частичного приёма.
- 3333 — встречный перевод (когда доделаем приёмную сторону).
- День 4-5 (нагрузка)
- 50-100 одновременных заявок, проверка очередей, БД, корректность статусов.
- День 6 (живой контрагент)
- Согласовать с любым подключённым к НРД депозитарием тестовый обмен.
- Это последний шаг перед присоединением к Правилам ЭДО НРД (продакшен).
Реалистичный срок от получения ИШ до готовности к продакшену: 2-3 недели (включая обкатку, fix багов, документацию).
Стоимостная сводка
| Статья | Сумма (руб) | Статус |
|---|---|---|
| Лицензия КриптоПро CSP (сервер) | ~30 000-50 000 | Демо 3 мес. — активна |
| Лицензия КриптоПро CSP (рабочее место оператора, опц.) | ~2 000-3 000 | Не куплена |
| Рутокен ЭЦП 2.0 для оператора (железо, опц.) | ~3 000-5 000 | Не куплено |
| Сертификат УЦ МБ для организации | по тарифам УЦ | Не получен |
| Сэкономлено против КриптоПро JCP | ~30 000-50 000 | (отказ от Java-стека) |
Ключевые архитектурные решения
- Один бинарник вместо микросервисов — рассчитано на наш объём (100-1000 сделок/день). Упрощает деплой, отладку, мониторинг. Все компоненты в одном процессе с понятными границами пакетов (
internal/m2mcore,internal/nsdadapter,internal/lkgateway, ...). - PKCS#11 как единый интерфейс к СКЗИ — позволяет менять провайдер (CSP/Рутокен/Валидата) без изменения кода bj-server.
- Двух-уровневая БД (
fansy.*для входных данных,m2m_core.*для журнала сделок) — позволяет команде Fansy писать в свою схему без знания о нашем pipeline. - Mock-робот внутри bj-server — даёт возможность работать без живого НРД для значительной части интеграционного тестирования.
- «Дружественный» UI — установка/настройка не требует SSH-доступа: всё через веб (КриптоПро, лицензии, сертификаты, контейнеры с флешки).
Готов к интеграционному тестированию с роботом на TEST3: да, как только будет ИШ + сертификат. Готов к продакшену: ориентировочно через 3-4 недели после получения всех внешних компонентов.
— Команда разработки Bridge-and-Join-s