7a7aa0cf6c
С официальной страницы НРД (https://www.nsd.ru/workflow/system/programs/web-service/) скачано всё необходимое для подключения ИШ: DOC/: - ruk_install_ish_2025_11_10.pdf (4.7 МБ) — Руководство по установке ИШ от 10.11.2025, с разделами «6. Технические требования» и «7.3.2 Установка под Linux» - ruk_pol_ish.pdf (3.5 МБ) — Руководство пользователя ИШ - QA_ish.pdf (2.5 МБ) — Часто задаваемые вопросы - test-case_ish.pdf (1.3 МБ) — Тест-кейсы для проверки работоспособности - instr_int_sh_01072025.pdf (0.4 МБ) — Инструкция по заявке на тестирование - web_service_nrd_standard_soap_rest.pdf (2.2 МБ) — техрекомендации Web-сервиса ONYX dist/ish/: - igate_100.0-765_amd64.deb (117 МБ) — дистрибутив ИШ для Astra Linux, не в git (в .gitignore), но всегда есть для установки - igate_95.0-716_amd64.SGN — ЭП к дистрибутиву - README.md — индекс файлов + ссылки на повторное скачивание Ключевые факты из руководства (попали в REPORT.md и help-страницу): - ИШ работает на Astra Linux SE 1.6/1.7 (РЕД ОС не упомянута) или Windows - СКЗИ — Валидата CSP + АПК Валидата Клиент L (НЕ КриптоПро!) Дистрибутив Валидаты — по запросу soed@nsd.ru / pki@moex.com - БД — PostgreSQL (обязательна для REST API ИШ) или SQLite - Сертификат — только от УЦ Московской Биржи (ca.moex.com) Добавлена help-страница /admin/help/architecture с: - ASCII-диаграммой полной схемы (bj-server → ИШ → ONYX → робот) - Таблицей «кто на чьей стороне, какая ОС, какая СКЗИ» - 8 FAQ-вопросов (включая «ИШ — это сервер НРД?», «можно ли в одну ВМ?», «зачем Валидата если есть КриптоПро» и др.) - Чек-лист «что у нас уже готово» REPORT.md обновлён: - общая готовность 70% → 72% - 7 внешних блокеров вместо 6 (Astra Linux ВМ + Валидата CSP стали явными) - раздел «Дистрибутив ИШ и полная документация» с описанием каждого файла Cleanup: .gitignore теперь исключает /dist/ish/*.deb но пропускает README.md внутри той же папки.
224 lines
22 KiB
Markdown
224 lines
22 KiB
Markdown
# 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 |
|
||
| Установка ИШ на наш стенд | **0%** | ⏳ Требуется Astra Linux ВМ (не РЕД ОС) — см. блокер #1 |
|
||
| Получение СКЗИ «Валидата 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 против реального НРД |
|
||
|
||
**Общая готовность системы:** **≈ 72%** (по объёму функциональности)
|
||
**Готовность к интеграционному тесту с роботом:** **≈ 85%** (зависит только от внешних факторов: 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`.
|
||
- Ежесуточная фоновая горутина обновляет сертификаты, в ленте новостей появляется уведомление «Обновлён сертификат УЦ: <CN>».
|
||
- За 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-transfer
|
||
- `servis-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 / ERROR
|
||
- `GET /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` — код уже всё умеет
|
||
|
||
### Дистрибутив ИШ и полная документация (получены 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, и т.п.
|
||
|
||
---
|
||
|
||
## Что в процессе и в очереди
|
||
|
||
### Внешние блокеры (без них не двинемся к реальному НРД)
|
||
|
||
1. **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 мин установить ИШ.
|
||
|
||
2. **СКЗИ «Валидата CSP» + АПК «Валидата Клиент L»** ⭐ новый блокер
|
||
- ИШ требует именно Валидату, **НЕ КриптоПро CSP** (у нас стоит КриптоПро, придётся ставить параллельно или вместо).
|
||
- Где взять: только по запросу — `soed@nsd.ru` (НРД) или `pki@moex.com` (МБ). Временная лицензия выдаётся.
|
||
- Что нужно: отправить письмо с реквизитами организации и обоснованием (подключение к MOEX МОСТ M2M).
|
||
- Срок: ~1-3 дня на ответ НРД.
|
||
|
||
3. **Сертификат подписи УЦ Московской Биржи** (ca.moex.com)
|
||
- Нужен для подписи отправляемых сообщений. Кладётся в Справочник сертификатов АПК Валидата Клиент L, экспортируется в системное хранилище.
|
||
- Что нужно: оформить заявку в УЦ МБ от организации, получить сертификат + приватный ключ.
|
||
- Срок: зависит от УЦ МБ.
|
||
|
||
4. **Заявка на тестирование в TEST3 НРД**
|
||
- Форма: `https://www.nsd.ru/workflow/zayavka-na-testirovanie/`
|
||
- Инструкция: `DOC/instr_int_sh_01072025.pdf`
|
||
- Получаем код депонента-тестера и доступ к контурам GUEST/TEST3.
|
||
|
||
5. **Сертификаты УЦ НРД** (для проверки квитанций)
|
||
- Где взять: `https://www.nsd.ru/workflow/system/cryptography/` — сейчас отдаёт 404 на нашем дев-стенде (вероятно перенесено в ЛК НРД депонента).
|
||
- В коде уже есть форма «Авто-загрузка сертификатов УЦ» в `/admin/setup` — как только получим прямые URL .cer, добавим их.
|
||
|
||
6. **Окно техработ TEST3: 18.05.2026 — 22.05.2026**
|
||
- Полевое тестирование в этот период невозможно. Реальные прогоны — до 18-го или после 22-го мая.
|
||
|
||
7. **Доступ к API реального ЛК ESIA Finance**
|
||
- Сейчас bj-server работает с встроенным эмулятором `lk-emulator` на :8083.
|
||
- Что нужно: URL продакшен/тест ЛК, Basic-auth учётка.
|
||
|
||
### Внутренние задачи (можем делать параллельно)
|
||
|
||
| Задача | Приоритет | Эффект |
|
||
|---|---|---|
|
||
| Завершить сценарий 3333 робота — приёмная сторона bj-server (входящие M2MTransferRequest) | средний | Полное покрытие тестов с роботом |
|
||
| UI для импорта сертификата из контейнера КриптоПро (после копирования с флешки) | низкий | Сейчас делается вручную через certmgr |
|
||
| Уведомления: SMTP, Yandex Messenger, Telegram (плагины через единый интерфейс Notifier) | средний (M3) | Операторам — критичные события в мессенджеры |
|
||
| Расширение тестов: unit + интеграционные с mock-роботом, нагрузочные | низкий | Уверенность перед прод |
|
||
| Документация для команды Fansy (ETL): передача контракта, согласование SLA, прописывание IP в pg_hba.conf | средний | Запуск ETL-потока |
|
||
|
||
---
|
||
|
||
## Что после получения ИШ и сертификата (план первичного тестирования с роботом)
|
||
|
||
1. **День 0** (получили дистрибутив ИШ + сертификат + руководство)
|
||
- Поставить ИШ на dev-ВМ.
|
||
- Положить сертификат в ИШ-хранилище.
|
||
- В bj-server: `/admin/setup` → ИШ профиль `test3-gost`, URL ИШ.
|
||
2. **День 1** (smoke-тест)
|
||
- Отправить через bj-server заявку с ReceiverCode = `MC0012500000`, DocumentSeries = `2001`, DocumentNumber = `111111` → ожидаем «принять все бумаги» от робота.
|
||
- Проверить: квитанция от НРД, Decision от робота, callback в `lk-emulator`, статус в журнале → `confirmed`.
|
||
3. **День 2-3** (полное покрытие сценариев)
|
||
- 1111 (отказ M2M01..M2M09) — все коды ошибок.
|
||
- 2001 / 2002 — все депозитарии, все варианты частичного приёма.
|
||
- 3333 — встречный перевод (когда доделаем приёмную сторону).
|
||
4. **День 4-5** (нагрузка)
|
||
- 50-100 одновременных заявок, проверка очередей, БД, корректность статусов.
|
||
5. **День 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-стека) |
|
||
|
||
---
|
||
|
||
## Ключевые архитектурные решения
|
||
|
||
1. **Один бинарник вместо микросервисов** — рассчитано на наш объём (100-1000 сделок/день). Упрощает деплой, отладку, мониторинг. Все компоненты в одном процессе с понятными границами пакетов (`internal/m2mcore`, `internal/nsdadapter`, `internal/lkgateway`, ...).
|
||
2. **PKCS#11 как единый интерфейс к СКЗИ** — позволяет менять провайдер (CSP/Рутокен/Валидата) без изменения кода bj-server.
|
||
3. **Двух-уровневая БД** (`fansy.*` для входных данных, `m2m_core.*` для журнала сделок) — позволяет команде Fansy писать в свою схему без знания о нашем pipeline.
|
||
4. **Mock-робот внутри bj-server** — даёт возможность работать без живого НРД для значительной части интеграционного тестирования.
|
||
5. **«Дружественный» UI** — установка/настройка не требует SSH-доступа: всё через веб (КриптоПро, лицензии, сертификаты, контейнеры с флешки).
|
||
|
||
---
|
||
|
||
**Готов к интеграционному тестированию с роботом на TEST3:** да, как только будет ИШ + сертификат.
|
||
**Готов к продакшену:** ориентировочно через 3-4 недели после получения всех внешних компонентов.
|
||
|
||
— Команда разработки Bridge-and-Join-s
|