fix(ipsec): исправить статус клиента с полным DN сертификата

This commit is contained in:
Denozordec committed 2026-10-10 09:42:57 +07:00
1 parent 1d61b50591
commit 2aa93ad365
16 files changed
+1517 -17

No files matched your search

+17 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Актуальное продолжение 2026-10-10: завершены12.5.107–109 — VXLAN bridge/FDB и IPv6 ULA inner в VXLAN/GRE/WireGuard по IPv4 outer. Steady/recovery Ping10/10 в обе стороны каждого типа; initial loss сохранён. Cleanup собственных объектов/baseline passed, обаCHR доступны. Runtime ux-patch102/ux-a11y101 прежний. Native IPv6 не означает поддержку IPv6 interface address в API/history/export GRE/WG. Следующий110 — профильная приёмка IPsec со сложным DN; Portal/Telegram ожидают настройки/разрешения.12.5 открыт.
Актуальное продолжение 2026-10-10: завершён12.5.110 — исправлено сопоставление сертификатного IPsec по полному DN (C/S/L/O/OU/CN, специальные символы), неоднозначные rendered subjects/active IDs не подтверждают online. Backend ux-dn110/version1.0.0-test.dn110, frontend ux-a11y101 прежний. State89/89, профильный IPsec/build/lint, live UI4/4 с проверкой actual theme; native established/assigned IP/catalog online и cleanup13 коллекций×2 passed. Все предварительные ошибки сохранены. Следующий111 — нестандартные IKE ID/границы сопоставления сертификатов; внешние Portal/Telegram требуют настройки и разрешения.12.5 открыт.
IPsec78: реальный PSK responder established, mode-config198.18.78.10 и online=true подтверждены API; точные собственные объекты удалены. Сертификатный/DN online, late failure и history restore остаются открытыми. [Отчёт](ux-ui/acceptance/ipsec-mode-config-2026-10-09.json), [журнал](ux-ui-progress.md).
@@ -1058,3 +1058,19 @@ Initial результаты: gre/CHR1=0/3, gre/CHR2=1/3, wireguard/CHR1=3/3, wi
Production aggregate GET /api/gre/tunnels и /api/wireguard вернули собственные интерфейсы без failures; WG allowedIps сохранил native IPv6 /128, privateKey не возвращён. Ограничение обнаружено и зафиксировано: CHR1: GRE localInnerIp="", WG address=null; CHR2: GRE localInnerIp="", WG address=null. Текущие GRE/WG readers получают interface addresses из /ip/address, поэтому native IPv6 адрес не попадает в это поле. Эти проверки не принимают IPv6 создание/restore/history/export через приложение и не расширяют его API. Поддержка полного IPv6 управления требует отдельной согласованной модели адресов и миграции snapshots.
Перед очисткой exact IDs/markers и immutable reference fields сверены; собственные peers/IPv6 addresses/interfaces удалены. Baseline projection13 коллекций×2 и7 исходных параметров IPv6 settings совпали. Пароли прежние, оба CHR доступны. DB/runtime/исходники продукта не менялись, повтор build/общей UI регрессии не требовался. Открыты IPv6 outer/client OS/scale, application IPv6 address lifecycle и остальные пункты матрицы. Следующий110 — IPsec complex/escaped DN с собственной сертификатной парой и контролем online identity; внешние Portal/Telegram требуют настоящей настройки.
## 12.5.110 — IPsec: полный DN сертификата и достоверный online (2026-10-10)
Исправлена реальная ошибка: собственная IKEv2 certificate сессия на двух CHR7.24.5 established/получила198.18.110.250, но production каталог показывал клиента online=false. Сначала воспроизведён DN с country/organization/unit и comma/plus/equals вCN; затем полный subject с state/locality/кавычками/обратным слешем. RouterOS печатает строку без экранирования: C=US, S=New York, L=Albany, O=Example, Ltd, OU=QA+Operations, CN=... Поэтому не используется CN substring или общий RFC4514 parser. Новый ipsec-certificate-dn.ts строит точную полную строку из известных метаданных; ipsec-live.ts сравнивает весь subject, считает collisions по rendered string, не выбирает одну из одинаковых active IDs и требует уникальный CN для прежнего bare-CN fallback. Подсчёт subject/CN выполняется один раз на снимок. Выбор matched identity, сетевые операции, PKI, секреты, API DTO и UI-компоненты не менялись.
Проверки: профильный test:ipsec (8 скриптов) passed; финальный state набор89/89, включая иной organization, одинаковые сертификаты, разные attribute tuples с одинаковой неэкранированной строкой, duplicate active ID и control characters. Backend/contracts production TypeScript build, ESLint трёх изменённых файлов и diff check passed. [Source manifest](ux-ui/acceptance/ipsec-dn-source-2026-10-10.json): base audited build-patch102 context +3 working-file overrides отHEAD1d61b50; context hashes3/3 и runtime compiled byte hashes2/2 совпали. Это не полный повтор audit всех production inputs. Docker backend ux-dn110/version1.0.0-test.dn110, imagesha256:f0cd7afc7391ac463c8b3c7d183b0c294f01ffca6beda3d240d26bec59c06d72, label dn110 — stage marker, неGitSHA. Entrypoint/node check и pg_restore18.6 passed; приватный pre-dn110.env сохранён, прежний backend image остаётся для rollback. Backend/PG healthy; frontend ux-a11y101 unchanged/HTTP browser passed.
[Полный протокол](ux-ui/acceptance/ipsec-certificate-dn-2026-10-10.json) сохраняет7 preliminary native failures: два неподдерживаемых параметра fixture (comment вprofile и address-prefix), затем auth failures сложного/простого control. Причина тестовой конфигурации выявлена по my auth size0: import присвоил client иCA одинаковое имя. Их переименование по exactIDs в разные имена восстановило handshake; исправление trust собственногоCA/source address само по себе не устраняло дублирование. Все preliminary cleanups passed. Эти отказы не приписаны продукту и не заменены успешным итогом. Два успешных native before-fix воспроизведения доказывают именно ошибку online. После deploy полныйDN established, native lease и application online/activeAddress совпали.
[Live UI4/4](ux-ui/acceptance/browser-ipsec-dn-2026-10-10.json):1280/320px×dark/light, URL выбранногоCHR, правильный online address, reload, page overflow0/JS errors0/application writes0. Первый помощник неверно использовал storage key theme; его4 cases не принимаются как две темы. В повторе возник detached read-only locator при refresh; helper ограниченно заново находит элемент, никакие mutations не повторяет. Финальный запуск использует rl-theme и проверяет root class; скриншоты actual dark/light сохранены, два размера/темы просмотрены. Frontend/shared ReUI/Frame/base-nova не менялись, общая UI регрессия не повторялась.
Собственные CA/server/client certificates, импортированные сертификаты, peer/identity/profile/proposal/group/template/mode-config, export/upload files и временные logging rules удалены после exact-ID/name/comment/prefix preflight. Baseline13 коллекций×2 совпал, включая logging/certificates/files/IP/routes/NAT; default/metadata/public routes и исходный195.195.195.195/32CHR2 сохранялись. Private P12/PEM/pass files удалены из helper-каталога, private keys/пароли не записаны в репозиторий. В приложении использовался aggregate GET /api/ipsec без observed revision write; tests DB не меняли. ОбаCHR и SSH доступны, пароли не менялись.
Границы: это сопоставление подтверждённой native сессии для данного формата RouterOS7.24.5, не общая DN/ASN.1 библиотека и не новая проверка encrypted data plane (77–82 остаются источником). Custom OIDs/другие форматы и IKE ID namespaces, клиентские ОС, полнаяPKI/policy-profile-proposal restore/IPv6/scale открыты. При неоднозначном rendered subject адрес не приписывается одному из клиентов. Следующий111 — нестандартные IKE ID и границы сопоставления сертификатных сессий; внешние интеграции всё ещё требуют настройки. Квота после live-блока: использовано33% пятичасового/67% недельного (значение до финальной записи).
Референс семантики certificate ID: [официальная документация MikroTik IPsec](https://help.mikrotik.com/docs/spaces/ROS/pages/11993097/IPsec); фактический формат S/порядок/символы подтверждён native отчётом выше.