Сканирование смонтированных USB-носителей (/run/media/$USER, /media,
/mnt) на папки вида name.000 с *.key — это «контейнер КриптоПро на
флешке». В шаге 3 wizard'а и в /admin/setup появилась таблица
найденных контейнеров с кнопкой «Скопировать в локальное хранилище»
(копирует папку в /var/opt/cprocsp/keys/$USER/, после чего контейнер
виден как \\.\HDIMAGE\name и работает без вставленной флешки).
Дедуп по AlreadyImported — если папка уже есть в HDIMAGE, кнопка не
показывается. Сертификат из контейнера импортируется отдельно через
certmgr -inst -cont (это пока вне UI, подсказка в текст flash-сообщения).
Кроме того — переписан help-блок в шаге 3 wizard'a на основании
«Инструккия M2M.pdf» (стр. 11, 16-19): явно расписано, что в режиме
ИШ подписывает сам ИШ (наш ключ в ИШ), а в режиме прямого ONYX —
bj-server. Таблица «что куда грузить»: УЦ МБ в mroot, УЦ НРД в
mroot+uRoot, наш сертификат в uMy только если без ИШ. Сертификаты
с Рутокена явно отмечены как «не грузить — сами появятся».
Новый раздел /admin/setup → «Сертификаты УЦ» (и в шаге 3 wizard'а): список
URL .cer-файлов УЦ (одна ссылка на строку). По кнопке «Скачать сейчас»
система качает каждый URL, парсит X.509, и через certmgr -inst импортирует
в mroot (если cert == issuer, т.е. корневой) или uRoot (промежуточный).
Дедуп по SHA-256: если файл по URL не изменился — повторного импорта нет.
В runtime-конфиге сохраняется журнал FetchedCerts (CN/SHA-256/срок/статус)
для отображения в UI.
Чекбокс «Авто-обновление раз в сутки» включает фоновую горутину
StartCACertsAutoUpdater — стартует через 30 сек после bj-server, потом
тикает раз в 24 часа. При изменении сертификата он переустанавливается
без участия оператора.
Mastered tasks: #44.
Для пользователя без IT-навыков — пошаговая настройка (5 шагов) с
прогресс-баром, подсказками «?» рядом с каждым полем и блоками
«Что это?» / «Где взять?» в каждом шаге. Шаги: PostgreSQL → КриптоПро →
Сертификаты → ИШ НРД → Тестовая заявка. Авто-определение текущего шага
по первому незавершённому пункту, навигация Назад/Далее, мягкие пропуски
(in-memory / mock-режимы).
В шаге 1 — «⚡ Поднять локальный PostgreSQL автоматически»: одна кнопка
запускает podman-compose, ждёт pg_isready, накатывает миграции
fansy-store + m2m-core, сохраняет DSN в runtime-конфиг. setupFlash теперь
возвращает пользователя на /admin/wizard, если POST пришёл оттуда —
визард не «теряется» после действий.
Mastered tasks: #41, #42, #43.
После реальной установки КриптоПро CSP добавлены следующие
функциональности:
cryptocli/client.go:
- FindCertificates() — перечисляет CKO_CERTIFICATE объекты на всех
подключенных слотах через PKCS#11, парсит X.509, извлекает CN, ИНН
(OID 1.2.643.3.131.1.1), серийник, срок действия. Для каждого
сертификата проверяет наличие парного приватного ключа (CKO_PRIVATE_KEY
с тем же CKA_ID).
- Тип Certificate с полями: SubjectCN, IssuerCN, INN, Serial, NotBefore,
NotAfter, DER, HasPrivateKey, TokenLabel, SlotID.
internal/lkgateway/setup.go:
- handler importCertificate (POST /admin/setup/crypto/import-cert,
multipart). Принимает .pfx/.p12 (с PIN) или .cer/.crt. Запускает
certmgr -inst -pfx или -inst с выбором хранилища (uMy/mroot/uRoot).
- listCertsForUI() — вспомогательный метод renderSetup для подгрузки
актуального списка сертификатов с подключенных токенов при каждом
открытии страницы.
internal/lkgateway/web/templates/admin_setup.html:
- секция «Сертификаты на токенах» с таблицей (Кому/Кем выдан/ИНН/срок/
токен/есть-ли-приватный-ключ).
- форма «Импорт сертификата (.pfx/.cer/.crt)» с полями для PIN и
выбора хранилища.
- блок «Интеграционный шлюз НРД»: добавлен JS автозаполнения URL ONYX
и контейнера по выбору профиля (guest/test3/prod × gost/rsa) —
значения из DOC/Ссылки для доступа в тестовые контуры.pdf.
internal/lkgateway/web/templates/admin_help_systems.html:
- секция «Интеграционный шлюз НРД и контуры тестирования» дополнена
полной таблицей URL-ов сервисов GUEST/TEST3 (ONYX, Agate, DCS,
Единый кабинет, Корпоративные действия). IP gost.nsd.ru для
настройки межсетевого экрана.
- новая секция «Сертификаты УЦ НРД (для проверки квитанций)» с
пошаговой инструкцией: куда импортировать корневой сертификат УЦ
НРД, куда промежуточные, куда наши сертификаты из стороннего УЦ.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
В карточке «СКЗИ» страницы /admin/setup добавлены два новых блока:
1. «Установка КриптоПро CSP» — multipart-форма с input type=file.
Принимает .tar/.tgz/.tar.gz/.rpm (формат с cryptopro.ru). После
загрузки на сервер (лимит 256 МБ):
- сохраняет архив в /tmp/bj-cryptopro/
- распаковывает (tar -xzf или tar -xf)
- находит все .rpm в распакованной директории
- выполняет sudo rpm -Uvh --replacepkgs --nosignature на найденные пакеты
- возвращает результат с количеством установленных пакетов и выводом rpm
2. «Активация лицензии» — поле для ввода серийника и кнопка.
Вызывает /opt/cprocsp/sbin/amd64/cpconfig -license -set <серийник>.
Если cpconfig не найден — показывает подсказку про /admin/help/cryptopro.
После успеха сохраняет серийник в runtime-конфиге.
internal/lkgateway/setup.go:
- handler installCryptoPro (multipart form, parse, untar, find rpms, sudo rpm)
- handler activateLicense (cpconfig -license -set, сохранение в RuntimeConfig)
- общие хелперы runCmd / runCmdInDir для exec через context
internal/lkgateway/web/templates/admin_setup.html:
- секция «Установка КриптоПро CSP» с формой загрузки
- секция «Активация лицензии» с полем + кнопкой
- ссылки на /admin/help/cryptopro и cryptopro.ru/products/csp/downloads
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
В карточке «Криптография» на странице /admin/setup остались упоминания
старой Java-реализации (КриптоПро JCP, путь к jcp.jar) — устаревшая
информация. Новый клиент работает напрямую через PKCS#11 (см. коммит
2e09e21).
internal/lkgateway/web/templates/admin_setup.html:
- Заголовок: «Криптография (КриптоПро JCP)» → «СКЗИ (КриптоПро CSP, Рутокен и др. через PKCS#11)»
- Опция «КриптоПро JCP» в селекте → «КриптоПро CSP (через PKCS#11)»
- Опция «Валидата JCP» → «Валидата»
- Добавлена опция «Рутокен ЭЦП 2.0 (для подписи оператора)»
- Поле «Путь к jcp.jar» → «Путь к модулю PKCS#11» с placeholder
/opt/cprocsp/lib/amd64/libcppkcs11.so
- Поле «UDS-сокет» помечено как (legacy) — для совместимости со старым
Java crypto-service
- Подпись «Лицензионный ключ» → «Серийный номер лицензии», placeholder
типа реального серийника КриптоПро
- Описание под формой переписано: команды установки CSP и пути для
Рутокен, ссылка на /admin/help/cryptopro
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Добавлена вкладка «Настройка» в admin-панели lk-gateway. Позволяет
ввести параметры каждой подсистемы прямо через веб-интерфейс,
проверить подключение и запустить тестовую заявку в один клик.
internal/lkgateway/runtimeconfig.go:
- Runtime-конфиг с персистом в JSON (BJ_SETUP_PATH или ~/.bj/setup.json)
- Поля: PostgresDSN, Crypto (provider/socket/jcp_path/license_key),
NSD (profile/igw_base_url/key_container), LK (callback_url),
LastTestRun (результат последнего тестового прогона)
- ReadinessSummary() для блока «Готовность системы: X из Y»
internal/lkgateway/setup.go:
- GET /admin/setup — страница настройки
- POST /admin/setup/postgres — DSN + sql.Ping (без pgx-драйвера упадёт
на «unknown driver postgres», что покажет пользователю)
- POST /admin/setup/crypto — provider/socket/jcp.jar/лицензия, проверка
существования файла jcp.jar
- POST /admin/setup/nsd — профиль/URL ИШ/контейнер, GET /healthz ИШ
- POST /admin/setup/lk — callback URL + GET /healthz эмулятора/ЛК
- POST /admin/setup/test-run — пробная сквозная заявка с предзаполнением
(Иванов, 1500 акций Газпрома, ИИС T03), опрос статуса до финального
internal/lkgateway/web/templates/admin_setup.html:
- 4 карточки подсистем со статус-индикаторами (зелёная/красная точка)
- Inline-формы через <details>/<summary>: открыты для не настроенных,
свёрнуты для уже настроенных
- Карточка «Тестовый прогон» с историей последнего результата
- Прогресс «Готовность системы: X из Y» в верхней части
internal/lkgateway/server.go:
- Server.rc *RuntimeConfig — поднимается при NewServer
- CheckOptions для admin-дашборда теперь берутся из runtime-конфига,
а не только из ENV — изменения в /admin/setup сразу видны в /admin/
и /admin/status без перезапуска
В layout.html добавлена nav-ссылка «Настройка», между «Дашборд» и
«Заявки».
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>