fix(ipsec): исключить чужие сессии при сопоставлении CN

This commit is contained in:
Denozordec committed 2026-10-10 09:56:21 +07:00
1 parent 2aa93ad365
commit 7815e00a1c
15 files changed
+604 -13

No files matched your search

+19 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 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 открыт.
Актуальное продолжение 2026-10-10: завершён12.5.111 — буквальный CN больше не трактуется как typed Remote ID или чужой DN. Реальная одна сессия/два сертификата: только настоящий клиент online; explicit FQDN/SAN подключение подтверждено. Backend ux-id111/version1.0.0-test.id111, frontend ux-a11y101 прежний. State96/96, профильный IPsec/build/lint, live UI4/4 и cleanup13 коллекций×2 passed. Следующий112 — общие configured Remote IDs/коллизии aliases между identity и PSK; внешние 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).
@@ -1074,3 +1074,21 @@ Production aggregate GET /api/gre/tunnels и /api/wireguard вернули со
Границы: это сопоставление подтверждённой 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 отчётом выше.
## 12.5.111 — IPsec: буквальный CN, чужой DN и явно настроенный FQDN ID (2026-10-10)
Исправлены две ошибки атрибуции. При одном native active-peers.id=CN=alice приложение могло пометить online также сертификат с буквальным common-name=CN=alice. Bare-CN fallback теперь не используется, если эта строка совпадает с полным subject другого сертификата; full-DN match имеет приоритет. Для common-name=key-id:alice прежний findActive удалял type prefix и приписывал ему сессию alice. Буквальный CN теперь сравнивается буквально через exact lookup; нормализация key-id/fqdn/user-fqdn/address сохраняется только для явно настроенного identity.remote-id. Сетевые операции, certificate auth/PKI, DTO, UI и ReUI компоненты не менялись.
Red-before state test остановился на ложном online; после исправления state96/96. Семь новых assertions проверяют DN-looking CN, typed-looking CN, сохранение literal exact match, нормализацию explicit fqdn и отказ unsupported prefix. Полный test:ipsec (8 скриптов), backend/contracts production TypeScript build, ESLint двух изменённых файлов и diff check passed. Дополнительно actual compiled mapper ux-dn110 на synthetic alice/key-id:alice показывал обоих online; compiled ux-id111 показывает только alice. Это проверка mapper с подставленным снимком, не native допуск данного typed-looking CN как IKE ID.
[Native before/after](ux-ui/acceptance/ipsec-session-id-2026-10-10.json): на собственных CHR7.24.5 созданы CA/server/client сертификаты и второй signed client certificate с common-name=CN=<имя первого>. Второй сертификат не экспортировался/не использовался инициатором; server identity строго ссылается на первый remote-certificate. На ux-dn110 native одна established сессия/адрес198.18.111.250, каталог давал online=true/тот же адрес обоим сертификатам. Эта red-attempt и её successful cleanup сохранены. После deploy ux-id111 тот же сценарий даёт только original online и decoy offline/без activeAddress.
В той же собственной паре отдельно подтверждён explicit certificate FQDN ID: подписанный original cert имеет SAN DNS:<имя>.example; initiator my-id=fqdn:<имя>.example, responder remote-id=fqdn:<имя>.example. Отключён/включён только собственный client peer для нового handshake. Native established id содержит bare DNS value, lease198.18.111.250, production catalog originalOnline=true/decoyOnline=false. Это reserved test name в сертификате/ID, внешние DNS endpoints не использовались. Не утверждается независимый data-plane/throughput/SLA тест.
[Live UI4/4](ux-ui/acceptance/browser-ipsec-id-2026-10-10.json):1280/320×dark/light с проверкой actual root class; original online address, decoy offline/без чужого адреса, reload, no page overflow, pageErrors0/applicationWrites0. Свежие скриншоты сохранены; desktop light просмотрен. Helper повторно находит только read-only locator при refresh, mutations не повторяет. Frontend ux-a11y101 прежний, общая UI регрессия не повторялась.
[Source/runtime manifest](ux-ui/acceptance/ipsec-id-source-2026-10-10.json): build-id111 из audited build-dn110 +2 working overrides отHEAD2aa93ad, context byte hashes2/2 и changed compiled mapper byte hash совпали. Backend mmapp-test/backend:ux-id111/version1.0.0-test.id111/imagesha256:e9a5cf65433ed77b8c67991a556f3863a0e9609411a0e3e58d39463323c65414; labelid111 — stage marker, неGitSHA. Одна backend build, entrypoint/node check/pg_restore18.6/Compose wait passed; приватный pre-id111.env сохранён, прежний image доступен для rollback. Backend/PG healthy, frontend unchanged/HTTP/browser passed; миграции и DB test rows не создавались.
Обе native attempts сравнили baseline13 коллекций×2 после удаления собственных сертификатов, imported chain с уникальными именами, peer/identity/profile/proposal/group/template/mode-config/files. Cleanup passed, logging/default/public/metadata routes и исходный195.195.195.195/32CHR2 сохранены; passwords прежние, SSH/обаCHR доступны. Private P12/PEM/pass files удалены, приватные ключи/секреты не сохранены в evidence. Native helpers используют aggregate GET /api/ipsec, не selected observed-revision write.
Границы: shared configured Remote IDs, aliases нескольких identity/PSK с одинаковым bare value, arbitrary IKE ID types, custom DN/OIDs/client OS/full PKI/restore/IPv6 остаются открытыми. Этот блок принимает два конкретных CN fallback нарушения и одну real explicit-FQDN certificate сессию; не закрывает всю12.5. Следующий112 — коллизии configured Remote IDs между identity/PSK и безопасная атрибуция в этих случаях.