fix(ipsec): подтвердить сертификатный клиент и сообщать сбой истории

This commit is contained in:
Denozordec committed 2026-10-09 15:32:10 +07:00
1 parent b9a8615b8b
commit 5d9ef9dcf3
11 files changed
+176 -12

No files matched your search

+16 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-09: 12.5.78 подтвердил реальное PSK IKEv2 подключение с выдачей mode-config и исправил ложный offline в каталоге клиентов. Backend ux-ipsec78, frontend ux-ipsec77; 77 backend-проверок, TypeScript/ESLint, одна backend Docker сборка и native/API приёмка; собственные объекты удалены. Следующий12.5.79 — сертификатный клиент/выдача mode-config, затем поздние ошибки операций и история восстановления. Этап12.5 открыт.
Актуальное продолжение 2026-10-09: 12.5.79 подтвердил сертификатный IKEv2 со статическим mode-config198.18.79.250 и online=true; поздний сбой сохранения ревизии сообщает state=applied/historyRecorded=false. Backend ux-ipsec79, frontend ux-ipsec77. Следующий12.5.80 — исправление и реальная приёмка восстановления истории IPsec; поздние частичные/транспортные ошибки остаются открытыми. Этап12.5 открыт.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -36,7 +36,21 @@
| 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–78 и ограничения ниже. Runtime backend ux-ipsec78/frontend ux-ipsec77. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–79 и ограничения ниже. Runtime backend ux-ipsec79/frontend ux-ipsec77. |
## 12.5.79 — IPsec: сертификатный online и поздняя ошибка истории (2026-10-09)
**Результат.** Реальный сертификатный клиент получал198.18.79.250, но отображался offline: active-peers.id возвращается как CN=имя. Mapper сопоставляет полный одноатрибутный DN с единственным CN сертификата; не извлекает CN из составного DN и не угадывает дубликаты/экранированные значения. Статус/адрес/uptime подтверждены через production API. Native match-by=certificate корректно выбрал персональный mode-config несмотря на общую listener identity; менять порядок identities не понадобилось.
**Поздний сбой истории.** captureAndAppendRevision может вернуть null при отказе capture/БД. Все IPsec apply/rollback теперь проверяют результат и отвечают502 со state=applied, historyRecorded=false и пояснением: операция уже выполнена, обновить данные перед повтором. Observed capture остаётся best effort для чтения. Добавлен createIpsecRoutes с узкими зависимостями для проверок реального HTTP-маршрута. Это не подтверждение транспортного разрыва или частичного применения до recordIpsec: эти границы открыты.
**Проверки.** config tests +80 state checks, HTTP PATCH: успешная запись истории/отказ после подтверждённого native изменения/отказ до записи; backend tsc, scoped ESLint, diff check. Реальный сертификат выпущен через API и экспортирован вPKCS12, импортирован наCHR2 с уникальными именами CA/leaf; private material оставался в0700 каталоге стенда и удалён. IKEv2 established на обоих CHR; responder native и API: staticIp/activeAddress198.18.79.250, online=true, uptime1s. Управляемая инъекция recordRevision=null в изолированном Fastify с тем же compiled route дала502/applied после настоящего выключения собственного peer; production PATCH вернул peer обратно. Это контракт сбоя записи, не реальная авария PostgreSQL. [Отчёт](ux-ui/acceptance/ipsec-certificate-2026-10-09.json).
**Очистка.** До удаления проверены точные ID/name/comment всех собственных объектов; после совпали исходные ID10 коллекций на обоих CHR. CA удалялся после leaf; системные каталоги/исходные файлы сохранены. Пароли не менялись. Первоначальный запуск после deploy столкнулся с readiness race до первого API write; повтор выполнен после docker compose --wait. Далее всегда ждать healthy до native сценария.
**Runtime.** Одна backend production сборка: mmapp-test/backend:ux-ipsec79/version1.0.0-test.ipsec79, image sha256:26b5b05122b7b55aa83b1f80b880d1aee6eaf33caa225afe09327b02a219c5dc1. Frontend ux-ipsec77 сохранён. Context предыдущего ipsec78 + пять backend-файлов из рабочего состояния перед коммитом; archiveSHA50cdacc0016810bd8c87c0bf2eaedbe9ddd4e1d6134a960f6ca11207c4faaff6. SHA runtime исходников совпали локально/удалённо: ipsec-live.ts676b51c9ed7edd9bc5d0cf5a455409b445c46235a55e2bedeff9e07208401bb6, routes/ipsec.ts192a3a7c5628c5e68c5cb20c26b55ce97c9a4c2cce8effea8ed1a26c79ee442d. Label revision=ipsec79, не итоговый Git SHA. .env backup приватный; миграций нет.
Следующий12.5.80: исправить restore mode-config без неподдерживаемого comment, порядок зависимостей и проверить реальный откат изменений. Обнаружен воспроизводимый локальный отказ: существующие reserved mode-config планируются как новые PUT; новая профильная проверка для следующего блока пока красная. Остальные ограничения12.5.77, составные/экранированные DN, NAT/интернет/IPv6/клиентские ОС/RBAC/throughput открыты. Один локальный коммит без push.
## 12.5.78 — IPsec: реальный online и адрес mode-config (2026-10-09)