fix(ipsec): экспортировать сертификат только по прямой привязке

This commit is contained in:
Denozordec committed 2026-10-10 22:29:51 +07:00
1 parent 9da5e55367
commit 08fcebd549
9 files changed
+542 -15

No files matched your search

+18 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-10: завершён12.5.117 — основной UI набор1243 passed/1 failed28.8m, context221/2217.2m; единственный failure CSS-transition исправлен ожиданием прежних44px/границ, scoped delta1/1.1465 unique accepted, не новый whole-main pass.905 source/config inputs проверены с явными preprocessing/test exceptions,984 production compiled normalizedLF совпали, read-only27 коллекций×2/own fixtures0, servers2/migrations9. Runtime backend/frontend ux-bound116. Следующий118 — legacy PSK certificate export угадывает имя: before200 подтверждён на своём cert, исправить/проверить.12.5 открыт.
Актуальное продолжение 2026-10-10: завершён12.5.118 — legacy client export больше не угадывает certificate по managed имени; PSK/отсутствующая binding дают409 до export, explicit certificate binding работает после rename. Backend8 scripts/state114/build/ESLint passed; native before200 с чужим для identity своим cert, after409 без архива/positive bound200, cleanup13×2. Архивы/passphrase не сохранялись. Backend ux-export118/version1.0.0-test.export118, frontend ux-bound116/version1.0.0-test.bound116. Следующий119 — реальные одновременные IKE sessions с одним ID через isolated Linux clients; image подготовка начата.12.5 открыт.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -36,7 +36,23 @@
| 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–117 и ограничения ниже. Runtime backend/frontend ux-bound116. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–118 и ограничения ниже. Runtime backend ux-export118/frontend ux-bound116. |
## 12.5.118 — IPsec: legacy экспорт только по явной certificate привязке (2026-10-10)
Исправлен POST /ipsec/users/:serverId/:rosId/cert: managed display name больше не преобразуется в clientCertName как fallback. PSK либо отсутствие remote-certificate возвращают409 до вызова exporter, без contentB64/passphrase. Для отдельного сертификата остаётся явный export-by-name endpoint. Direct certificate binding поддерживается после смены display label: имя сертификата/ключ не меняются, bundle.user соответствует актуальной подписи.
Изменены routes/ipsec.ts и mutation test. Все8 backend scripts/state114, backend build и scoped ESLint passed. HTTP test подтвердил PSK409/exportCalls0, positive200/exportedName ровно explicit ref при другом display label. Первый positive mock упал502 из-за отсутствующего getCertificates у заглушки; fixture дополнен и повтор принят. Последняя перестановка независимых HTTP кейсов проверена focused script повторно. UI/source не менялись, full1244/context221 не повторялись после локального изменения одного backend endpoint; границы117 сохранены.
Native before на backend116: создана своя PSK identity без remote-certificate с именем, совпадающим со slug собственного unused signed decoy cert. Legacy POST200 вернул его P12 archive. After на118: этот запрос409 без archive/passphrase. Для primary certificate identity временно установлен другой managed display label; POST200 вернул archive её прямого remote-certificate, исходный comment восстановлен. Архив/passphrase/instructions использовались только в памяти, не записывались в report/Git. Existing certificate IKE session/CN/FQDN/catalog оставались корректны; это не новая PSK session или клиентская OS приёмка.
Backend ux-export118/version1.0.0-test.export118 собран из build-bound116/base9da5e55 с одним route override; source/compiled route bytehash совпал. Frontend ux-bound116/version1.0.0-test.bound116 сохранён. Backend/PG healthy; rollback .env pre-export118.env и прежний образ оставлены, label export118 неGitSHA. Оба native запуска очистили собственные certificates/imports/peers/identity/groups/templates/mode-config/profile/proposal/files, baseline13×2 совпал. Native certificate IDs сохранялись до собственного cleanup; logging/default/public/metadata/195.195.195.195/32 сохранены, оба CHR/SSH доступны, пароли прежние. Протокол: [export binding](ux-ui/acceptance/ipsec-export-binding-2026-10-10.json).
Следующий119 — закрыть controlled-only границу113: несколько реальных established IKE sessions с одним ID и одним certificate principal. Подготовка отдельного official Debian/strongSwan image начата; клиенты будут в собственных Docker namespaces, private credentials временные/свои, host network и приложение не перенастраиваются. До native подтверждения этот пункт остаётся открытым. Конфигурация сверена с [strongSwan](https://docs.strongswan.org/docs/latest/swanctl/swanctlConf.html), [каталогом credentials](https://docs.strongswan.org/docs/latest/swanctl/swanctlDir.html) и [RouterOS](https://manual.mikrotik.com/docs/virtual-private-networks/ipsec/). Внешние Portal/Telegram/Windows/macOS/mobile/multi-WAN/scale остаются отдельно.
| Референс | Схема |
| --- | --- |
| [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранный клиент → явная certificate binding → PKI export либо409 без архива |
## 12.5.117 — общая UI-регрессия и сверка действующего source/runtime (2026-10-10)