407 lines
100 KiB
Markdown
407 lines
100 KiB
Markdown
# Оставшаяся внешняя приёмка — 2026-10-11
|
||
|
||
Это актуальная матрица после 12.5.138. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
|
||
|
||
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-log133`, frontend `ux-log133`; production lab использует AUTH_REQUIRED=false. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
|
||
|
||
| Раздел | Подтверждено | Осталось / условие завершения |
|
||
| --- | --- | --- |
|
||
| PostgreSQL | Bootstrap, backup/restore, SQL rollback, concurrency, writer drain одного экземпляра, JWT guards и unknown commit: блоки14–24 | Несколько backend/worker экземпляров и координация всех writers; физическая потеря соединения отличается от введённого отказа подтверждения |
|
||
| Speed/uptime | TCP transmit/receive/both32–33, короткий UDP34, auth failure25, transport timeout27, интерфейс after-ping28–29, snapshot/history race23–24 | Busy/abort/physical WAN disconnect; HTTP receipt socket disconnect принят97; независимое доказательство multi-WAN source/path; Home→JH/JH↔Exit с асимметричными каналами ; ROS-10 POST/SQL/GET и три часовых пояса приняты96. Короткие тесты не доказывают maximum throughput |
|
||
| Outbox | Production PG claim/dedupe/settlement/retry/JWT/browser checkpoint/a11y35–49 | Настоящий Telegram API/чат, физический timeout после возможной отправки, несколько sender процессов. Нужны тестовый бот/чат и прямое разрешение на конкретное сообщение; подменённый ответ не доказывает доставку |
|
||
| GRE | Native lifecycle, metadata, live формы/меню/URL/Ping53–57; GRE используется в OSPF/BGP/IPsec последующих блоков; native IPv6 ULA inner109 | IPv6 outer и application IPv6 interface address lifecycle, независимые WAN, масштаб и длительное восстановление; принятие GRE не означает приёмку всех сценариев автоматического расписания |
|
||
| WireGuard | Native handshake/data plane58, deletion60, live create/peer/disable/enable/delete62, mobile64, export/import67–74; native IPv6 ULA inner/allowedIps/handshake109 | Клиентские ОС и произвольные конфигурации, IPv6 outer/scale и application IPv6 interface address lifecycle, физический lost ACK и устойчивое восстановление; `.conf` с placeholders — шаблон, не принятый клиентский tunnel |
|
||
| VXLAN | Собственная пара/private Ping/catalog/URL/export75–76; bridge/FDB/port loss/recovery107; IPv6 ULA inner по IPv4 outer108 | API приложения read-only: create/delete проверены native. IPv6 outer, масштаб/производительность, профильные mutation RBAC/concurrency отдельно не приняты |
|
||
| IPsec | PSK и сертификатное шифрование77–82, active peer/online/mode-config, scoped NAT/group, partial/unknown/applied receipts, restore conflicts, JWT; full DN/специальные символы/online110; literal CN namespace guards и explicit FQDN111; certificate/PSK shared ID unknown/recovery112; multiple sessions controlled snapshots113; shared certificate rows/target guards114; preserve-certificate UI/native DELETE115; explicit deletion binding/PSK collision116; legacy export binding118; real duplicate DN sessions/Linux Ping/UI119; DN DER/ASCII tag и FQDN SAN native120; implicit unique DNS SAN/mixed IDs/API/UI121; короткий CHILD/IKE rekey/reconnect122; server pin и unbound same-CA certificate refusal123; own RSA Root/Intermediate/client chain/CRLs/IKE/reauth138; external revoked CRL new-handshake refusal/existing-session boundary137; certificate-bound malformed/signed expired CRL IKE refusal/recovery136; certificate-bound missing-CDP404/IKE refusal and recovery135; external HTTP CRL download/404/cache preservation134; isolated diagnostic buffers132; own ECDSA P-256/Ping/API export131 and final18×2 inventory; isolated same-key/CA time boundary with explicit AUTH_FAILED130; valid-renewal control timeout/clock/log observation129; original/renewed controls and time-invalid timeout observation128; CRL-issued cert/CA no-write delete guards127; own CRL-enabled valid/revoked control126; local revoked flag/CRL-disabled reconnect observation125; certificate reauth/CHILD absence boundary/UI124 | Реальные duplicate certificate-derived DN sessions приняты119; arbitrary custom PKI/OIDs/policies/path-length and missing/intermediate-revoked chain; native intermediate chain accepted138; ECDSA P-256 accepted131;128/129 timeout cause still unknown,130 time boundary accepted; periodic refresh; existing IKE survives short external-revocation observation137, automatic termination not guaranteed; direct CHR-to-CHR CRL HTTP failure cause134; reauth/CHILD loss принят124; длительный rekey/переходная потеря пакетов; прочие ID типы/ADDR4/manual DN/custom PKI; native edit identical matching rules rejected; клиентские Windows/macOS/iOS/Android, прочие DN форматы/custom OIDs/IKE ID namespaces, полная PKI и policy/profile/proposal restore, физический disconnect, durable retry/multi-instance, IPv6/maximum throughput |
|
||
| OSPF/BFD | Real Full/own routes84–85, раздельные наблюдения BFD86, effective disabled/optimizer cost/partial/RBAC87, alternate path90 и CIDR91 | Sustained BFD-only gate не принят: в86 сосед мог вновь статьFull при доступныхHello. В90 переходный Ping18/40 с55% loss: бесшовность не принята. REST timing — наблюдаемая граница, не SLA; IPv6/scale/independent WAN открыты |
|
||
| BGP | Established83, exact /32 exchange/API/UI/administrative withdrawal92, BFD primary GRE loss/alternate/recovery93 | Hold timer/TCP loss безBFD принят104; packet loss в переходе, разные внешние peers/WAN policy, IPv6/scale. Два логических пути используют тот же public WAN; physical redundancy не принята |
|
||
| Recursive routes | Production PUT/change/own history restore88, disabled guards, partial/unknown/applied outcomes, live формы/контекст | Автоматический rollback/retry, durable receipts и несколько экземпляров отсутствуют; PUT не является idempotent noop. Полная произвольная legacy catalog миграция не принята |
|
||
| Diagnostics/terminal | Allowlist/native reads, Ping/trace/route/MTU/DNS, actual avg-rtt, disabled guards, JWT/live PC/mobile89; real default memory tail/log limits/API/UI133 | DNS использует backend resolver; MTU — ограниченная оценка, не гарантированный максимум. Stop ожидания не доказывает остановку RouterOS команды; arbitrary CLI и physical disconnect не приняты |
|
||
| Portal/интеграции | Локальные и isolated JWT guards; UI/API error states в границах журналов | Настоящий Portal issuer/login/отзыв прав; внешние RIPE/MaxMind/S3/container/certificate jobs и Gitea delivery требуют отдельных тестовых endpoints/аккаунтов. Не отправлять сообщения и не публиковать релиз без соответствующего поручения |
|
||
| Общая приёмка | Локальная12.3.83 и профильные build/E2E/live проверки последующих блоков | Итоговая согласованная версия, профильная проверка нового deployment, сквозная регрессия после последнего product изменения; scoped axe не означает полную WCAG сертификацию |
|
||
|
||
Доказательства и точные ограничения: [полная история этапа12](ux-ui-stage-12.md), [внешний протокол](ux-ui-external-acceptance.md), [BGP93](ux-ui/acceptance/bgp-failover-2026-10-10.json), [паспорт стенда](ux-ui-test-server.md). Невыполненные пункты не являются все блокерами данного лабораторного сценария: для выпуска необходимо явно определить требуемые конфигурации и принять их либо согласовать ограничение.
|
||
|
||
## Следующая последовательность
|
||
|
||
1. **12.5.95 завершён:** [source/context/compiled audit](ux-ui/acceptance/deployment-source-audit-2026-10-10.json), production source drift не выявлен; нормализация и исключения явно указаны.
|
||
2. **12.5.96 timezone завершён:** [6 live UI cases](ux-ui/acceptance/browser-speed-timezone-2026-10-10.json). 97 HTTP receipt disconnect принят: [протокол](ux-ui/acceptance/speed-disconnect-2026-10-10.json). 98 сообщение неизвестного native результата исправлено/развёрнуто. 99 main/context завершён с точной записью одного failure/delta;100 transport и101 accessibility исправлены/развёрнуты.102 malformed PATCH исправлен/принят.103 packet rows/public/GRE приняты в границах коротких samples; initial loss/root cause остаётся открытым.104 hold/TCP loss/recovery принят.105 source/runtime/evidence сверка passed.106 read-only readiness: auth disabled/Portal localhost/bot and chat unconfigured.107 — native bridge/FDB/loss/recovery принят.108 — IPv6 inner VXLAN принят, initial0/3 и1/3 остаются в протоколе;109 — native GRE/WireGuard IPv6 inner принят; readers /ip/address не показывают native IPv6 interface addresses.110 — полный native DN/online исправлен и принят;111 — literal CN guards/real explicit FQDN accepted;112 — certificate/PSK alias ambiguity marked unknown/recovery accepted;113 — repeated native ID groups исправлены на controlled snapshots; 114 — multiple refs/target guards/native conflict приняты в описанных границах. 115 — UI сохранения сертификата/native DELETE принят; 116 — name-based guessing удалён/live PSK collision принят;117 — main1243/1failed+delta1/context221/source runtime приняты в точных границах; 118 — legacy export binding/native409/explicit200 принят;119 — real certificate-derived DN/Linux sessions приняты; следующий120 — manual ID interop/encoding. Реальные интеграции требуют тестовых доступов и отдельного разрешения на сообщение.
|
||
3. **Заключительный профильный контроль:** после последнего исправления собрать только затронутую часть, проверить её live и обновить матрицу. Общую регрессию выполнить один раз на согласованном runtime.
|
||
4. **Внешние зависимости:** Telegram/Portal/client OS/multi-WAN/scale проходят отдельную приёмку при наличии нужных аккаунтов, устройств и разрешений. Лабораторный результат двух CHR не закрывает их автоматически.
|
||
|
||
Каждый блок: конкретный результат → профильные проверки → независимая сверка cleanup → датированная запись → локальный коммит без push. Не повторять уже принятые сценарии без изменения исходников или нового выявленного риска.
|
||
|
||
## 12.5.113 — IPsec: несколько сессий одного клиента без ложного офлайн (2026-10-10)
|
||
|
||
Исправлен mapper: ранее повторяющиеся established active-peers.id удалялись из индекса целиком, и даже единственный соответствующий клиент выглядел офлайн. Теперь индекс сохраняет группу сессий. Единственный клиент с совпадающим ID получает online=true; activeAddress/activeSince выдаются только при одной established сессии. При нескольких сессиях reader не выбирает произвольный lease/uptime. Claims считаются на группу: если её разделяют разные catalog clients, у них sessionAmbiguous и нет подтверждённого online/адреса, как в112. Начальные/завершающиеся сессии не подтверждают online.
|
||
|
||
Изменены backend/src/services/ipsec-live.ts, ipsec-state.test.ts и tests/e2e/ipsec-data.spec.ts. Контракт и существующие компоненты ReUI не менялись: таблица уже показывает «онлайн» без адреса. Проверены certificate/PSK, перестановка native rows, конфликт aliases, переход несколько→одна→нет established сессий. State108/108; все8 профильных скриптов, backend build, ESLint прошли. E2E16 unique passed33.6s: два новых сценария1280/320 и прежняя профильная регрессия IPsec.
|
||
|
||
На стенд собран/развёрнут только backend ux-sessions113/version1.0.0-test.sessions113. Source base cb6ec09/context build-alias112 плюс один явный override; source и compiled ipsec-live.js SHA256 совпали с локальными байтами. Label sessions113 не является Git SHA. Frontend ux-alias112-version/version1.0.0-test.alias112 сохранён, backend/PG healthy; у frontend нет healthcheck, подтверждены HTTP/browser. Rollback .env сохранён privately как pre-sessions113.env, прежний образ оставлен.
|
||
|
||
Оба CHR прошли реальный fetchIpsecState, aggregate GET /api/ipsec вернул200 без failures. В собранном reader проверены контролируемые snapshots с повторяющимися ID и aliases на базе прочитанных состояний; это НЕ создание нескольких реальных IKE подключений. Каталог live пустой: browser smoke1280/320 проверил API, пустое состояние, отсутствие ошибки и overflow; pageerrors0/APIwrites0. Первый browser запуск получил ECONNREFUSED: прежний localhost туннель отсутствовал; восстановлен согласованный SSH forward3000/8000, повтор passed. RouterOS writes0, acceptance DBwrites0, тестовых сетевых объектов не создавалось; пароли прежние.
|
||
|
||
Протокол: [ipsec-multiple-sessions](ux-ui/acceptance/ipsec-multiple-sessions-2026-10-10.json). Следующий114 — один сертификат с несколькими identity refs: текущий last-reference-wins ещё не исправлен, нужно проверить представление строк и выбор target для мутаций. Одновременные реальные подключения с одним ID, внешние интеграции, client OS, полнаяPKI и итоговая общая регрессия остаются отдельной приёмкой.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | ID → группа established → один клиент «онлайн» / разные клиенты «Не определено» |
|
||
| [ReUI Stats12](https://reui.io/preview/base/stats-12?ref=mcp) | Несколько сессий → один подтверждённый клиент → сводка без двойного счёта |
|
||
|
||
## 12.5.114 — IPsec: общий сертификат, разные identity и безопасный target (2026-10-10)
|
||
|
||
Устранён last-reference-wins: mapper хранит все ссылки на remote-certificate и выдаёт отдельную строку для каждой identity. У каждой строки свой identity:<native-id>, имя, peer, Remote ID, mode-config/static IP. Сертификат без ссылок сохраняет cert:<native-id>. Общая observed сессия не присваивается двум строкам: sessionAmbiguous и «Не определено»; независимые explicit ID проверены отдельно. Перестановка native identity rows не меняет состав/поля каталога.
|
||
|
||
Resolver помечает запрос по certificate target как неоднозначный при нескольких refs, поэтому PATCH/DELETE не выбирают первую identity. DELETE identity с removeCertificate=true проверяет другие identity/peer refs до первого удаления и возвращает409. Явный removeCertificate=false допускает удаление выбранной identity с сохранением сертификата; локальный HTTP тест подтверждает один delete/историю и отсутствие других writes. Интерфейс пока не предлагает этот отдельный вариант — следующий115 должен сделать его понятным. Прямой endpoint принудительного удаления сертификатов не менялся.
|
||
|
||
Изменены backend services/ipsec-live.ts, routes/ipsec.ts, state/mutation tests и UI HTTP fixture. Контракт и компоненты ReUI/base-nova не менялись; существующая таблица принимает отдельные DTO rows. State114/114, все8 профильных скриптов, backend build и scoped ESLint passed. E2E18 unique/35.9s: две новые проверки общего сертификата1280/320 плюс профильная регрессия.
|
||
|
||
Before на backend113: native established с адресом198.18.114.250, две certificate identities, но каталог сохранил только вторую и присвоил ей адрес; первая отсутствовала. After на ux-refs114 обе строки присутствуют и unknown без активного адреса, конфигурационные250/251 сохраняются. Certificate PATCH/DELETE и identity DELETE с общим сертификатом вернули409. PATCH выбранной identity при одинаковых match-by=certificate условиях вернул502 с native400 «a matching identity already exists»; обе identity остались неизменными. Это ограничение RouterOS, успешное редактирование одновременно существующих идентичных match rules НЕ принято. После удаления собственного дубля исходная identity восстановила online/250; её API PATCH имени и возврат исходного имени дали200, native readback совпал. Два успешных PATCH вызывают запись истории с dedupe; число вставленных revisions отдельно не заявляется.
|
||
|
||
Live browser4/4 без HTTP mocks: dark/light1280/320, обе реальные строки, unknown alert/сводка, decoy offline, reload, overflow0, pageerrors0/APIwrites0. Desktop light и mobile dark снимки просмотрены. Первичные helper ошибки сохранены: syntax до вызовов; DELETE с Content-Type без тела дал400 до guard; затем native matching conflict потребовал правильного критерия приёмки. Каждый запуск с сетевыми объектами завершил cleanup13 коллекций×2; предварительные отказы не выданы за passed.
|
||
|
||
Backend только: ux-refs114/version1.0.0-test.refs114, base60b2e09/context build-sessions113 плюс два overrides; source и compiled bytehashes совпали. Frontend ux-alias112-version/version1.0.0-test.alias112 сохранён. Backend/PG healthy; frontend подтверждён браузером, собственного healthcheck нет. Rollback .env pre-refs114.env сохранён privately, старый образ оставлен. Собственные certificates/keys/imports/peers/identities/mode-config/profile/proposal/groups/templates/files удалены; исходные13 коллекций×2 совпали, default/public/metadata/195.195.195.195/32/logging сохранены. Оба CHR доступны; пароли прежние.
|
||
|
||
Протокол: [shared certificate](ux-ui/acceptance/ipsec-shared-certificate-2026-10-10.json), [live UI](ux-ui/acceptance/browser-ipsec-refs-2026-10-10.json). Следующий115 — UI для удаления только выбранной identity с сохранением общего сертификата; затем согласовать оставшиеся native/внешние ограничения и итоговую регрессию. Множественные реальные сессии одного ID, клиентские ОС, полнаяPKI, интеграции и multi-WAN не закрыты этим блоком.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Сертификат → все identity → отдельные строки/настройки → выбор по identity ID |
|
||
| [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранная identity → проверка ссылок → API409 без записи либо подтверждённая операция |
|
||
|
||
## 12.5.115 — IPsec: удалить identity и сохранить общий сертификат через UI (2026-10-10)
|
||
|
||
В существующий AlertDialog добавлен Checkbox «Удалить также клиентский сертификат» только для certificate identity с явным identity:<id>. По умолчанию выбран для единственной привязки; при других rows того же certName на том же serverId выключен/disabled. Сертификаты с одинаковым именем на другом сервере не считаются общими. Подтверждение объясняет сохранение сертификата и остальных identity; запрос передаёт removeCertificate=false. При API ошибке диалог/выбор/данные сохраняются, блокировки повторного нажатия прежние. Для cert-only row без identity нет ложной возможности «удалить клиента, сохранив единственный объект».
|
||
|
||
Изменены app/(main)/ipsec/page.tsx и tests/e2e/ipsec-delete.spec.ts. ReUI/base-nova, установленный AlertDialog и Checkbox переиспользованы; vendor/theme не менялись. Scoped ESLint и source TypeScript passed; production frontend build passed. Приняты26 unique E2E: первая профильная серия22 passed/4 failed из-за проверки getByRole фона при открытом модальном диалоге; corrected includeHidden проверка сохранности DOM rows дала4/4 rerun9.8s. Это26 уникальных, не30 сценариев.
|
||
|
||
Frontend ux-keepcert115/version1.0.0-test.keepcert115 развёрнут; backend ux-refs114/version1.0.0-test.refs114 сохранён. Source base58f5c48/context build-alias112-front плюс один page override, bytehash совпал. Label keepcert115 — метка этапа, неGitSHA; compiled frontend reproducibility не заявлена. Backend/PG healthy, frontend HTTP/browser passed, healthcheck у frontend отсутствует. Private rollback pre-keepcert115.env и прежний образ сохранены.
|
||
|
||
На собственном signed-certificate IKE fixture проверены4 live диалога (dark/light1280/320) без mocks; первые3 отменены, в light320 выполнен ровно один DELETE identity с removeCertificate=false. Native readback подтвердил отсутствие выбранной identity и сохранение точного certificate ID и другой identity. Исходный клиент восстановил online/198.18.115.250, unknown alert исчез. Последующие PATCH имени/возврат200 подтвердили восстановление. Чужой для приложения mode-config API не удалял: helper очистил только собственный fixture объект. История вызывается API с dedupe; точное число вставленных revisions не заявляется.
|
||
|
||
Собственные native объекты и private exports/imports очищены, исходные13 коллекций×2 совпали; маршруты/default/logging сохранены. Оба CHR/SSH доступны, пароли прежние. Screens4, просмотрен light320. Протоколы: [native/deployment](ux-ui/acceptance/ipsec-preserve-certificate-2026-10-10.json), [live UI](ux-ui/acceptance/browser-ipsec-keepcert-2026-10-10.json).
|
||
|
||
Следующий116: default user DELETE ещё угадывает имя сертификата для identity без remote-certificate; проверить/исключить случай PSK + отдельный cert с совпавшим именем. После последнего исправления — единая общая регрессия. Внешние Portal/Telegram/client OS/multi-WAN/scale и множественные native IKE sessions остаются в матрице.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранная identity → прямой объём удаления → сохранить общий сертификат → подтверждённый API результат |
|
||
|
||
## 12.5.116 — IPsec: не удалять сертификат, угаданный по имени PSK (2026-10-10)
|
||
|
||
Устранена подтверждённая ошибка default DELETE: при пустом remote-certificate managed display name преобразовывалось в ipsec-user-<slug>, и несвязанный сертификат мог удаляться вместе с PSK identity. Теперь имя клиента не является доказательством связи: certificate deletion/preflight используют только явный remote-certificate либо выбранный cert target. Прямая одиночная certificate привязка по-прежнему допускает удаление; shared refs блокируются до записи как114. PSK диалог объясняет сохранение сертификатов; описания mode-config уточняют, что удаляются только неиспользуемые объекты приложения.
|
||
|
||
Изменены routes/ipsec.ts, mutation test, IPsec page и delete E2E. Все8 backend scripts, state114, backend build/source TypeScript/scoped ESLint passed. HTTP тест подтвердил PSK name collision: один identity DELETE, removeCertificate0; positive explicit binding: identity+certificate writes2. E2E28 unique passed39.6s, включая PSK описание/сохранение отдельной строки1280/320 и профильную регрессию. Vendor/ReUI/base-nova не менялись.
|
||
|
||
Before на backend114: создана собственная PSK identity с managed name, совпадающим со slug собственного unused signed decoy certificate. DELETE200 удалил оба объекта, хотя remote-certificate пуст. After на bound116: четыре live PSK диалога (dark/light1280/320), один DELETE через light320 UI, PSK удалён, тот же native ID/имя несвязанного сертификата сохранены. Browser не использовал mocks; APIwrites1, pageerrors0. Исходная certificate IKE сессия/online/198.18.116.250 сохранялись. Это не тест новой PSK сессии/throughput. Просмотрен light320 screenshot.
|
||
|
||
Обе части собраны последовательно и развёрнуты как ux-bound116/version1.0.0-test.bound116. Base d52c48e/context backend build-refs114, frontend build-keepcert115-front; по одному override для route/page, два source bytehash и compiled backend route bytehash совпали. Frontend compiled reproducibility не заявлена, label bound116 неGitSHA. Private rollback pre-bound116.env и прежние образы оставлены. Backend/PG healthy; frontend browser/HTTP подтверждён, healthcheck отсутствует. На VM25GB после сборок3.6GB свободно/86% занято; ресурсов достаточно для текущих проверок, production performance не оценивалась.
|
||
|
||
Оба native запуска очистили собственные fixtures, baseline13 коллекций×2 совпал; сохранены logging/default/public/metadata/195.195.195.195/32. Пароли прежние, оба CHR/SSH доступны. API DELETE вызывает history recording с dedupe; число новых revisions отдельно не заявляется. Протоколы: [binding](ux-ui/acceptance/ipsec-certificate-binding-2026-10-10.json), [live UI](ux-ui/acceptance/browser-ipsec-bound-2026-10-10.json).
|
||
|
||
Следующий117 уже запущен: единая основная UI-регрессия1244 сценария на текущем frontend source, затем контекстный набор и сверка source/build/runtime. Внешние аккаунты/Portal/Telegram/client OS/scale/multi-WAN и одновременные native IKE sessions остаются в матрице.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Выбранная identity → явная certificate связь → preflight → удаление выбранных объектов / сохранение несвязанных |
|
||
|
||
## 12.5.117 — общая UI-регрессия и сверка действующего source/runtime (2026-10-10)
|
||
|
||
Основной набор1244:1243 passed/1 failed за28.8m; контекстный221/221 за7.2m. Failed large-backups.spec.ts измерял кнопки сразу после изменения1440→320 viewport: размер43.796875px во время CSS-transition, после двух animation frames ровно44×44, границы viewport/pinned соблюдены. Исправлен только тест: expect.poll ждёт прежние44px/координаты без снижения порога. Scoped rerun1/1 за10.2s, полноценный поиск/refresh/error/page/file/focus/grid axe сценарий завершился. Итог1465 unique accepted (1243+1+221); основной первоначальный exit1/failure сохранён,1244 fresh whole-main pass НЕ заявляется. Production UI менять/пересобирать не требовалось, scoped ESLint passed.
|
||
|
||
Source audit базируется на057b530:905 tracked application/config inputs, frontend515 raw matched + preprocessing package + отсутствующий clean-context .dockerignore; backend405 raw matched + подготовленный root package + четыре test-source differences. Содержимое frontend package проверено: только исключён backend workspace; backend package: scripts omitted, dependencies/devDependencies empty, остальные поля совпадают. Production source drift0; различия ipsec-state/ipsec-mutation/recursive-routes/speed-test tests явно исключены из этого утверждения. Контексты не содержат non-example .env inputs. Git label bound116 — метка, неSHA.
|
||
|
||
Все984 emitted production backend/contracts outputs, построенные по текущим tracked non-test TS paths, совпали с actual backend container после CRLF→LF. Старые вложенные local dist/backend/src outputs не включались: они не текущие outputs и отсутствуют в контейнере. Это normalized equivalence, не обещание byte identity; отдельная frontend binary reproducibility не доказана. Runtime source contexts build-bound116/build-bound116-front, обе версии1.0.0-test.bound116; backend/PG healthy, frontend HTTP/browser принят116, собственного healthcheck нет.
|
||
|
||
Read-only stand: оба enabled CHR reachable/RouterOS7.24.5 stable;27 коллекций×2 не содержат собственных prefixes (критерии/пути сохранены в JSON), own speed runs/probes0, servers2/migrations9. Это scoped namespace scanner, не full export и не универсальное определение ownership; native session caches не удалялись. Проверка не меняла RouterOS/пароли. Отдельный118-before fixture после этого подтвердил legacy export bug и очистился по13 коллекциям×2; archive/passphrase остались в памяти и не попали в Git.
|
||
|
||
Автоматически переснятые120 ранее чистых PNG сохранены в ignored tmp/regression117-generated-screens и убраны из diff; восемь исходных dirty GRE/VXLAN снимков восстановлены из сохранённой копии с проверенными исходными размерами. В этот блок включён только relevant large-backups-320 screenshot; unrelated skills/AGENTS не коммитились. Протокол: [regression/source/runtime](ux-ui/acceptance/regression-current-source-2026-10-10.json).
|
||
|
||
Следующий118 — удалить name inference из legacy POST /ipsec/users/:serverId/:rosId/cert, отказать PSK до export и проверить прямую certificate binding. Before200 с архивом отдельного своего сертификата уже воспроизведён, не принят как верное поведение. UI fixtures не заменяют native/Portal/Telegram/client OS/multi-WAN/scale приёмку.12.5 остаётся открыт.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Viewport → окончание анимации → прежний touch target44px → keyboard/file/axe |
|
||
|
||
## 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.119 — две реальные IKE-сессии одного certificate principal (2026-10-10)
|
||
|
||
Контролируемая граница113 дополнена реальными сессиями: два Docker Linux клиента, official Debian trixie/strongSwan6.0.1-6+deb13u7, собственные namespace/bridge, NET_ADMIN только внутри clients. Один свой RSA2048 клиентский сертификат/ключ, свой CA и явно закреплённый server certificate. IKE/ESP AES256/SHA256/MODP2048, unique=never; чужие сетевые объекты/host networking приложения не перенастраивались. Docker создал и затем удалил собственную временную bridge/NAT сеть.
|
||
|
||
В принятой конфигурации local ID получен непосредственно из сертификата. RouterOS подтвердил две established с одинаковым ID CN=<имя>-client и разными198.18.119.249/248. Каждый клиент выполнил Ping3/3 до собственного encrypted endpoint198.18.119.1. Это short data-plane proof, не throughput/rekey/SLA. API: clientsTotal1/clientsOnline1, activeAddress/activeSince/sessionAmbiguous отсутствуют. Два live UI1280/320 без mocks: один зелёный «онлайн», VIP не присвоен произвольно, unknown alert отсутствует; writes0/pageerrors0. Mobile screenshot просмотрен. Application source не менялся, backend118/frontend116 сохранены.
|
||
|
||
Первый cleanup остановился: helper ошибочно ожидал comment у cert, который SDK/RouterOS не сохранил. До повторения scoped recovery проверил имя/CN/CA references/native IDs, удалил только свои объекты/credential files; Docker cleanup уже был завершён. Последующие retries сохранили baseline16×2. Первые FQDN/ADDR4, ручной DN и pinned server+ручной DN получили AUTH_FAILED; RouterOS сообщил identity not found/peer ID does not match certificate. Certificate-derived ID с тем же ключом/CA/server pin прошёл. Точная причина различий encoding не доказана; эти варианты не переименованы в success и остаются следующей120 приёмкой.
|
||
|
||
Final cleanup: labelled clients/network удалены после owner проверки, свои native logging/peer/identity/policy/group/profile/proposal/mode-config/pool/bridge/address/certificates удалены по ID;16 исходных коллекций×2 совпали, default/public/metadata/195.195.195.195/32 сохранены. Private P12/pass/PEM/config files удалены, пустые свои directories закрыты без recursive delete. Архивы/ключи не попали в Git. Оба CHR доступны, пароли прежние. Инструментальный image сохранён для повторения; приложение не пересобиралось. Протоколы: [native/отказы/cleanup](ux-ui/acceptance/ipsec-real-multiple-sessions-2026-10-10.json), [live UI](ux-ui/acceptance/browser-ipsec-multiple-2026-10-10.json).
|
||
|
||
References: [strongSwan configuration](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/). Два контейнера используют один public WAN/NAT, не являются независимыми площадками и не закрывают Windows/macOS/iOS/Android. Следующий120 — ID interop/encoding; остальные внешние зависимости сохранены в матрице.12.5 открыт.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Две подтверждённые сессии → один клиент онлайн → без произвольно выбранного VIP |
|
||
|
||
## 12.5.120 — кодирование DN и FQDN SAN в реальном IKE (2026-10-11)
|
||
|
||
На том же strongSwan6.0.1-6+deb13u7 последовательно проверены шесть вариантов с собственными CA/server/client certs, server certificate pin, RSA/AES256/SHA256/MODP2048. Certificate-derived DN, явный asn1dn с точными DER-байтами, FQDN из DNS SAN и FQDN с явным RouterOS remote-id установили tunnel и дали Ping3/3 каждый. Ручной текстовый DN и точный DER с единственным изменением тега CN 0x0c→0x13 отклонены AUTH_FAILED. Сертификат содержит UTF8String; парсер strongSwan6.0.1 выбирает PrintableString для этого ASCII CN. Это доказанная граница данной пары версий, не утверждение обо всех DN/PKI.
|
||
|
||
Обнаружено: FQDN SAN без явно заданного remote-id успешно аутентифицируется, но catalog API показывает offline. С remote-id=fqdn:… online=true. Первый helper остановился на ошибочном ожидании online; finally полностью очистил стенд. Уточнённый сценарий сохранил этот дефект отдельным результатом и завершил шесть вариантов. Он требует исправления в121, а не считается успешной приёмкой отображения. Ранее119 отказ FQDN включал requested IDr; новая конфигурация закрепляет точный server cert и не запрашивает IDr. Проверка сертификатов не отключалась.
|
||
|
||
Все свои containers/network/credentials и native objects удалены после проверки ownership. Baseline16 коллекций×2 совпал; оба CHR доступны, пароли и исходная конфигурация сохранены. Application source/runtime не менялись, UI заново не тестировался. [Протокол](ux-ui/acceptance/ipsec-id-interop-2026-10-11.json). Следующий121 — SAN matching с защитой неоднозначности и нескольких ID одного principal. Windows/macOS/mobile, независимые WAN, scale/rekey и интеграции остаются открыты.
|
||
|
||
References: [Identity parsing6.0](https://docs.strongswan.org/docs/6.0/config/identityParsing.html), [парсер6.0.1](https://github.com/strongswan/strongswan/blob/6.0.1/src/libstrongswan/utils/identification.c).
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Native established → точный ID/сертификат → подтверждённый online; неоднозначность → неизвестно |
|
||
|
||
## 12.5.121 — подтверждённый онлайн по DNS SAN и нескольким IKE ID (2026-10-11)
|
||
|
||
Исправлен обнаруженный120 дефект: RouterOS принимает FQDN SAN, но API сопоставлял только DN/CN/явный remote-id. Теперь точный DNS SAN учитывается при прямой привязке сертификата к identity и отсутствующем/auto remote-id. SAN должен быть уникален среди всех native certificates; DNS wildcard/IP/email/чужие namespaces и конфликты DN/CN не угадываются. Явный иной remote-id не подменяется SAN. Общие claims проверяются по каждой native session, поэтому пересечение с PSK или другой identity остаётся sessionAmbiguous, без присвоения её адреса.
|
||
|
||
Все наблюдаемые DN/CN/explicit ID/SAN сессии одного principal объединяются: online подтверждён, но при нескольких сессиях не выбираются произвольные VIP/uptime. Добавлены13 state scenarios: unique/duplicate SAN, explicit/auto, DN+SAN с перестановкой, PSK collision, неподдерживаемые SAN, CN shadow и отсутствие привязки. Прошли127 state checks и8 профильных scripts, backend production build и scoped ESLint. Общая регрессия117 не повторялась; DTO/frontend/vendor не менялись.
|
||
|
||
Backend ux-san121/version1.0.0-test.san121 собран из контекста118 с одним source override. Локальный и серверный SHA256 source/compiled ipsec-live совпали. Frontend116 сохранён; backup pre-san121.env/предыдущий image оставлены. Backend healthy. Первый native helper остановился на regex старого диапазона VIP; finally восстановил baseline, затем regex исправлен. Повторение: один certificate-derived DN и один FQDN SAN одного cert одновременно established, Ping3/3 каждый. Catalog online1, activeAddress/activeSince отсутствуют. Два live UI1280/320 без mocks/write/pageerrors, mobile screenshot просмотрен.
|
||
|
||
Все свои Docker clients/network/credentials/native configs удалены после ownership preflight; baseline16 коллекций×2 совпал, default/public/metadata/195.195.195.195/32 сохранены. Оба CHR доступны, пароли прежние. [Native/build/проверки](ux-ui/acceptance/ipsec-san-matching-2026-10-11.json), [live UI](ux-ui/acceptance/browser-ipsec-san-2026-10-11.json). Следующий122 — IKE/CHILD rekey/reconnect; клиентские ОС/длительные нагрузки/физические WAN/integrations остаются открыты.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Native DN+SAN → один клиент online → несколько сессий без случайного VIP |
|
||
|
||
## 12.5.122 — реальный rekey CHILD/IKE и повторное подключение (2026-10-11)
|
||
|
||
На собственном Linux strongSwan→CHR certificate tunnel приняты пять состояний: initial, CHILD rekey, IKE rekey, terminated, reconnected. CHILD rekey подтверждён новой парой native ESP SPI после ухода старых SA; IKE rekey — новым strongSwan IKE unique ID после ухода прежнего. В четырёх connected фазах native established1/API online и Ping3/3 с первой попытки; после terminate established0/API offline без activeAddress/uptime. Повторное подключение вернуло online/Ping. RSA/private CA/exact server certificate pin/AES256/SHA256/MODP2048 сохранены.
|
||
|
||
Первый прогон принял обе смены ключей/офлайн, но reconnect Ping failed. Сценарий не сохранил достаточно данных для доказательства причины. Повторение использовало именно выданный native VIP, записало все client addresses и ограниченные Ping attempts; каждая рабочая фаза прошла с первого Ping3/3. Это не превращает первый отказ в успех и не доказывает мгновенное/бесшовное восстановление. Оба протокола сохранены. Длительное обновление, packet loss в переходе, reauth и физический WAN/SLA ещё не приняты.
|
||
|
||
Application source/image не менялись, общая регрессия и UI повторно не запускались. Все собственные Docker clients/network, private P12/PEM/pass/config и native configs/certs/logging удалены с ownership preflight. Baseline16×2 совпал, оба CHR доступны/пароли прежние. Native installed-sa сохранялись только по whitelist public SPI/state/адресов, ключи не записывались. [Протокол с первоначальным отказом](ux-ui/acceptance/ipsec-rekey-reconnect-2026-10-11.json). Следующий123 — неправильный server pin и непривязанный клиентский certificate.
|
||
|
||
Reference: [strongSwan rekey6.0](https://docs.strongswan.org/docs/6.0/swanctl/swanctlRekey.html).
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Новые SA → подтверждённый online → terminate/offline → reconnect/online |
|
||
|
||
## 12.5.123 — server pin и привязка клиентского сертификата (2026-10-11)
|
||
|
||
Три реальные Linux strongSwan→CHR попытки без ослабления проверки сертификатов. Контрольный клиент с private CA/точным server pin/привязанным remote-certificate установил туннель и дал Ping3/3. Замена server pin на другой собственный certificate привела к отказу на клиенте. Второй RSA client certificate, подписанный тем же CA, но не указанный в remote-certificate identity, отвергнут RouterOS. Общий доверенный CA не подменяет точную native привязку. Отказы проверялись как ожидаемые, а не success tunnel.
|
||
|
||
После каждой попытки native established0 и catalog online0; неподключённые клиенты не получили active session. Все собственные Docker clients/network/private credentials и native objects удалены;16 исходных коллекций×2 совпали, пароли/default/public/metadata/195.195.195.195/32 сохранены. Оба CHR доступны. Source/runtime не менялись, профильная общая регрессия и UI не повторялись. [Протокол](ux-ui/acceptance/ipsec-certificate-auth-boundaries-2026-10-11.json).
|
||
|
||
Это ограниченная certificate authentication приёмка, не полная PKI: revocation/expiry, прочие client OS/custom OIDs/ID namespaces остаются открыты. Следующий124 — полноценный reauth и наблюдаемая граница IKE online при отсутствии CHILD SA.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Сертификат и привязка подтверждены → online; ошибка pin/привязки → отказ без ложного online |
|
||
|
||
## 12.5.124 — reauth и честная граница IKE онлайн (2026-10-11)
|
||
|
||
Реальный strongSwan certificate reauth завершился новой IKE SA и уходом старой; после initial/reauth/CHILD restore Ping3/3 каждый с первой попытки. При terminate только CHILD SA RouterOS сохранил established IKE1, installed-sa0; API продолжал online=true, Ping2/2 потерян. После нового CHILD SA Ping восстановился. Это подтверждает семантику текущего online: установленная IKE-сессия, не измерение передачи данных.
|
||
|
||
На странице добавлено краткое пояснение «Онлайн означает установленную IKE-сессию. Передачу данных проверяйте Ping». ReUI/Frame/base-nova и существующие компоненты сохранены. Production frontend build/typecheck и scoped ESLint прошли; source hash страницы совпал с Docker context. Frontend ux-ike124/version1.0.0-test.ike124 развёрнут, backend ux-san121 сохранён. Backup pre-ike124.env/прежний image оставлены. Два live UI1280/320 без writes/pageerrors/overflow: дождались API receipt и стабильного положения текста, screenshot mobile просмотрен. Empty catalog UI проверяет пояснение; активные DN/SAN строки уже приняты121.
|
||
|
||
Native objects/private credentials/Docker clients/network очищены с ownership preflight, baseline16×2 совпал. Оба CHR доступны, пароли/default/public/metadata/195.195.195.195/32 сохранены. Полная регрессия117 не повторялась для этой текстовой правки. [Native/build](ux-ui/acceptance/ipsec-reauth-child-status-2026-10-11.json), [браузер](ux-ui/acceptance/browser-ipsec-ike-status-2026-10-11.json). Длительный reauth/rekey, transition loss, физические WAN и клиентские ОС остаются открыты; следующий125 — отзыв/CRL.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Stats12](https://reui.io/preview/base/stats-12?ref=mcp) | IKE online → пояснение значения → отдельная проверка Ping |
|
||
|
||
## 12.5.125 — фактическая граница локального отзыва сертификата (2026-10-11)
|
||
|
||
Контрольный собственный certificate tunnel установился/Ping3/3. Первая попытка использовала неверный /certificate/revoke и получила400 no such command; finally очистил fixtures. По официальному CLI reference уточнена /certificate/issued-revoke. Повторение подтвердило native revoked=true у собственного leaf certificate. Уже установленная IKE-сессия осталась established. После terminate повторное подключение тем же отозванным certificate также установилось. Ожидание отказа не прошло; это сохранённое наблюдение, не успешная приёмка revocation blocking.
|
||
|
||
После cleanup чтение certificate/settings подтвердило на обоих CHR crl-use=false/crl-download=false; certificates0/crls0. Глобальные settings в этом блоке не изменялись. Документация описывает CRL проверку отдельной настройкой, поэтому native revoked flag не считается доказательством блокировки при нынешней конфигурации. Application source/API не менялись; вывод об API online после reconnect не делается — helper остановился раньше его чтения.
|
||
|
||
Все свои configs/certificates/logging/private credentials/Docker clients/network удалены. Baseline17 коллекций×2, включая certificate/crl, совпал; default/public/metadata/195.195.195.195/32 и пароли сохранены. [Протокол наблюдения и непройденное ожидание](ux-ui/acceptance/ipsec-local-revocation-observation-2026-10-11.json). Следующий126 — контроль валидного клиента и отказ отозванного при собственной CRL цепочке/временном crl-use, с обязательным возвратом исходных settings. Полная CRL/expiry/PKI приёмка остаётся открытой.
|
||
|
||
References: [issued-revoke](https://manual.mikrotik.com/docs/cli-reference/certificate/issued-revoke/), [CRL settings](https://manual.mikrotik.com/docs/authentication-authorization-accounting/certificates/).
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI List9](https://reui.io/preview/base/list-9?ref=mcp) | Метка revoked → отдельная CRL policy → реальная попытка соединения → подтверждённый результат |
|
||
|
||
## 12.5.126 — CRL-enabled отзыв и проверенная очистка цепочки (2026-10-11)
|
||
|
||
Создана собственная CA/серверная/клиентская цепочка с CRL URL. До control IKE временно включены crl-use/crl-download на CHR1, после проверки certificates0/CRLs0 baseline. Валидный клиент установился/Ping3/3. После issued-revoke подтверждён revoked=true; действующая IKE могла остаться established. После явного terminate новый IKE тем же cert отвергнут AUTH_FAILED, native established0/API offline. Это закрывает отличие от125 для данной local CA конфигурации, не полную PKI и не мгновенный разрыв существующих SA.
|
||
|
||
Все certificate/settings возвращены к точной исходной записи. Initial sign потребовал точный .id — добавлен по ответу REST. Первый cleanup остановился на удалении issued server leaf: RouterOS требует revoke для сертификата CA с CRL. Settings/Docker/network/configs к этому моменту уже восстановлены/удалены. Recovery проверил ровно три собственных имени/CN/issuer, отсутствие своих configs, исходные settings и удалил точный собственный CA ID с каскадом только этих проверенных детей. CRL/private files очищены. Повторение использовало preflight всех дочерних cert IDs/ссылок перед own CA cascade и прошло целиком; baseline17 коллекций×2, private credentials/Docker/settings restored.
|
||
|
||
Наблюдение показывает риск API удаления: identity может быть удалена до native отказа удаления CRL-issued certificate. Следующий127 —409 до любых writes для защищённого leaf и CA с issued children; сохранение cert при identity-only остаётся доступным. Production source/runtime в126 не менялись. Оба CHR доступны, пароли/default/public/metadata/195.195.195.195/32 сохранены. [Все результаты/отказ cleanup/recovery](ux-ui/acceptance/ipsec-crl-revocation-2026-10-11.json).
|
||
|
||
Reference: [Certificates/CRL](https://manual.mikrotik.com/docs/authentication-authorization-accounting/certificates/). Expiry, внешняя CRL загрузка/timeout, intermediate/custom PKI, клиентские ОС и долговременные нагрузки остаются открыты.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI List9](https://reui.io/preview/base/list-9?ref=mcp) | CA/CRL policy → валидный клиент → отзыв → reconnect отказ → возврат исходных settings |
|
||
|
||
## 12.5.127 — удаление CRL-issued сертификатов без частичных изменений (2026-10-11)
|
||
|
||
Исправлена выявленная126 последовательность: перед удалением identity API проверяет явно привязанный cert/issuer. Локально issued либо revoked certificate CA с crl=true получает409 до любых writes. Пользователь может удалить только identity с removeCertificate=false. В /ipsec/certs дополнительно запрещено отдельное удаление CA с дочерними certs: RouterOS каскадно удаляет цепочку, поэтому force=true это ограничение не обходит. Автоматический отзыв/удаление чужой цепочки не добавлялся. Imported non-issued/non-revoked leaf сохраняет прежний сценарий удаления.
|
||
|
||
Добавлены13 профильных HTTP cases с нулевыми writes/history при отказе, сохранением cert при identity-only, обеими issued/revoked формами native metadata, CA force guard и положительным imported случаем. Прошли8 IPsec scripts (state127), backend production build/scoped ESLint. Backend ux-crl127/version1.0.0-test.crl127 собран из121 с одним route override; локальные и серверные source/compiled SHA256 совпали. Frontend ux-ike124 сохранён, backup pre-crl127.env/прежний image оставлены. DTO/vendor не менялись.
|
||
|
||
Native собственная CRL chain: семь409 (user/cert targets, direct leaf/CA с/безforce и revoked leaf) сохранили certs; до identity-only identity также оставалась. Identity-only200 удалил выбранную identity, сохранил все3 certs. Первый control остановился на Ping3/3 без достаточной диагностики; cleanup прошёл, отказ сохранён. Повторение проверяло выданный native VIP и записывало bounded Ping attempts, затем завершило API-сценарии. Мгновенная связность/SLA не заявляется.
|
||
|
||
Settings восстановлены точно, own CA cascade после проверки всех детей/ссылок очистил только собственную цепочку; baseline17×2/Docker/private credentials restored. Оба CHR доступны, пароли/default/public/metadata/195.195.195.195/32 сохранены. UI и общая регрессия117 повторно не запускались: guards/backend-only, сохранение modal при API error уже принято предыдущими UI блоками. [Протокол](ux-ui/acceptance/ipsec-crl-delete-preflight-2026-10-11.json). Следующий128 — expired/not-yet-valid certs без изменения часов.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp) | Проверка cert/CA →409 без изменений → выбор сохранить cert → подтверждённое identity-only удаление |
|
||
|
||
## 12.5.128 — сроки сертификатов и неподтверждённая причина отказа (2026-10-11)
|
||
|
||
На OpenSSL3.5.7 созданы собственные same-key/same-CA сертификаты с явно заданными датами. Часы VM/CHR не менялись. Действующий original cert и перевыпущенный valid cert установили IKE/Ping3/3 каждый. Для renewed/invalid сертификатов временная собственная identity проверяла доверенный CA (remote-certificate=none/match-by=remote-id/auto), сохраняя pubkey auth/crypto и точный server certificate pin. Положительный renewed control доказывает работоспособность этой конфигурации с новым certificate DER.
|
||
|
||
Expired и not-yet-valid certificate не установили сессию за30s: IKE_INIT отвечал, затем IKE_AUTH retransmits, без явного AUTH_FAILED. Native established0/API online0. Это наблюдение тайм-аута, а не доказанный RouterOS expiry отказ. Журнал прочитан после cleanup, audit boundary уже не сохранился; точная причина остаётся открытой. Следующий129 должен захватить scoped auth logs сразу в каждой фазе.
|
||
|
||
Первый подход пытался импортировать expired cert: новых native rows оказалось0, точная причина импорта не записана. Cleanup остановился на принадлежности файла/ID. Scoped recovery проверил собственный namespace/CN/issuer/возраст, удалил только свои configs/certificate chain и точное имя созданного CRT (flash directory не удалялся), private files/CA key. Повторение не импортировало invalid certificates, держало их только в собственном client filesystem; cleanup baseline17×2/Docker/credentials passed. Оба CHR доступны/пароли/default/public/metadata/195.195.195.195/32 сохранены.
|
||
|
||
[Протокол и все ограничения](ux-ui/acceptance/ipsec-certificate-time-observation-2026-10-11.json). Полный первоначальный Ping failure127 дополнительно перенесён в репозиторий. Source/runtime не менялись, UI/общая регрессия не повторялись. Expiry reason и внешняя CRL/PKI приёмка не закрыты.
|
||
|
||
Reference: [OpenSSL x509 dates](https://docs.openssl.org/3.5/man1/openssl-x509/).
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI List9](https://reui.io/preview/base/list-9?ref=mcp) | Valid control → encoded dates → native establishment/API → тайм-аут без выдуманной причины |
|
||
|
||
## 12.5.129 — непройденный положительный контроль и изоляция диагностики (2026-10-11)
|
||
|
||
Повторение с чтением журнала во время фаз остановилось на valid-renewal control: original cert/Ping3/3 прошли, действующий новый cert получил IKE_AUTH timeout. Expired/future случаи не запускались. Поэтому предыдущие128 тайм-ауты не считаются доказанной expiry причиной. Phase authLogs оказались пусты; точная транспортная/сертификатная причина пока не определена.
|
||
|
||
Readonly clock проверка: VM20:13:44Z, CHR1 23:13:44/+03:00 (Moscow), CHR2 22:13:44/+02:00 (Warsaw), в пределах точности секунд совпали. Часы и timezone не менялись. Default memory:1000 entries/stop-on-full=false; CHR1 журнал содержит273 сообщения namespace129. Гипотеза о повторном использовании container IP/UDP tuple не выдаётся за установленную причину. Следующий130 использует отдельный netns/IP на вариант и собственный memory logging action с чтением только своего буфера; default logs не очищаются.
|
||
|
||
Final cleanup baseline17 коллекций×2/Docker/private files (включая собственный CA key) passed. Оба CHR доступны, passwords/default/public/metadata/195.195.195.195/32 сохранены. Source/runtime не менялись, UI/регрессия не повторялись. [Failure/control/clocks/log metadata](ux-ui/acceptance/ipsec-time-control-failure-2026-10-11.json).12.5 и time-validity diagnosis открыты.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI List9](https://reui.io/preview/base/list-9?ref=mcp) | Положительный контроль не прошёл → не принимать отрицательные случаи → изолировать транспорт/журнал |
|
||
|
||
## 12.5.130 — изолированная проверка сроков и исправление остатка cleanup (2026-10-11)
|
||
|
||
Каждый renewed/expired/future вариант получил отдельный Docker client namespace/IP (.3/.4/.5); прежние контейнеры удерживали адреса до общего cleanup. Original и renewed valid client установили IKE/Ping3/3. Expired и not-yet-valid client получили явный AUTHENTICATION_FAILED от CHR, native established0/API online0. Own key/CA/server pin/pubkey auth/crypto сохранены, часы не менялись. Это принимает local same-key/CA time-boundary после положительного renewed control; точная причина прежних128/129 тайм-аутов не доказана.
|
||
|
||
Созданы и затем удалены собственные memory action/rule без очистки штатного memory. Collector GET buffer query сохранил также исторические сообщения, поэтому строгая атрибуция этих логов не считается принятой; proof отрицательных случаев — прямой IKE AUTH_FAILED и состояние API/native. Полный диагностический buffer selector требует отдельной проверки через print query.
|
||
|
||
Обнаружено дополнительно: recovery128 удалял объекты по name/comment и пропустил logging rule, имеющее только prefix. Оно входило в последующие baseline128/129/130; их равенство не доказывало отсутствие этого остатка. Проверено точное имя namespace из recovery128, единственная rule с этим prefix, topics и action=memory; удалён только её native ID. Все остальные logging rows остались точно прежними, default журнал не очищался. Артефакты128/129 дополнены исправлением, исторические ограничения сохранены.
|
||
|
||
Итоговое повторение18 коллекций×2 прошло; после него отдельно удалён доказанный остаток128. Own custom logging action/clients/network/private files/CA key очищены, certificates/CRLs0, оба CHR доступны/пароли/default/public/metadata/195.195.195.195/32 сохранены. Source/runtime/UI не менялись. [Протокол и correction](ux-ui/acceptance/ipsec-isolated-certificate-time-2026-10-11.json). Следующий131 — ECDSA P-256 chain/Ping/экспорт. Full intermediate/custom PKI/external CRL/OS/scale остаются открыты.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI List9](https://reui.io/preview/base/list-9?ref=mcp) | Раздельные клиенты → valid control → explicit AUTH_FAILED → API offline → полная ownership очистка |
|
||
|
||
## 12.5.131 — ECDSA P-256 и итоговая очистка блока IPsec (2026-10-11)
|
||
|
||
Создана собственная ECDSA P-256 CA/server/client chain (prime256v1), без изменения existing certificates/passwords. strongSwan6.0.1 установил certificate-authenticated IKE/ESP tunnel с точным server certificate pin/private CA и AES256/SHA256/MODP2048; Ping3/3. Public client key проверен Node X509: ec/prime256v1. API online1 и конкретный VIP этой единственной сессии. Экспорт client cert через /api/ipsec/certs/1/export вернул200/archive; архив и passphrase не сохранены в evidence/Git.
|
||
|
||
Own logging/peer/identity/policy/group/profile/proposal/mode-config/pool/bridge/address/certificates/private files/Docker client/network удалены по ownership preflight; baseline16×2 совпал. Дополнительная итоговая readonly inventory18 коллекций на каждом CHR проверила все namespaces120–131: residue0, established0, crl-use/download=false, private directories0. Labelled Docker acceptance containers/networks0; backend ux-crl127 и PostgreSQL healthy, frontend ux-ike124 running/HTTP+UI уже подтверждены124. Source/runtime/UI в131 не менялись, тесты и регрессия не повторялись. Оба CHR доступны, пароли/default/public/metadata/195.195.195.195/32/flash directory сохранены.
|
||
|
||
За эту серию исправлены implicit DNS SAN online121, смысл подписи IKE online124 и no-write CRL certificate/CA deletion guards127. Native interop/rekey/reauth/authentication/CRL/time validity/ECDSA приняты только в описанных границах. Все initial failures/recovery сохранены; тайм-ауты128/129 не переименованы в success и не используются как proof expiry. [ECDSA/экспорт/final inventory](ux-ui/acceptance/ipsec-ecdsa-p256-2026-10-11.json).
|
||
|
||
Следующий132 — проверить scoped logger через POST print query (GET buffer collector130 содержит исторические сообщения), затем external CRL download/failure и оставшуюся матрицу. Windows/macOS/mobile, intermediate/custom PKI, независимые WAN/scale/долговременные нагрузки/реальные интеграции ещё не приняты. Этап12.5 открыт; новые native проверки начинать только с доступным бюджетом для cleanup и сохранения.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | EC cert/CA → native IKE/Ping → API online/VIP → подтверждённый экспорт → ownership cleanup |
|
||
|
||
## 12.5.132 — изоляция диагностических буферов RouterOS (2026-10-11)
|
||
|
||
На обоих CHR RouterOS7.24.5 созданы по два собственных RAM action/rule с разными prefix. Один script/info marker попал в оба буфера. POST /log/print с .query=[buffer=ownAction] и .proplist вернул только нужный prefix: один маркер, foreignRows0. Контроль другого буфера вернул другой prefix; несуществующий буфер —0 строк. Обычный POST параметр buffer отклонён400; это ожидаемый отрицательный контроль. В проекции поле buffer отсутствует, поэтому изоляция подтверждена независимыми маркерами/контролями, а не выдуманным значением поля.
|
||
|
||
GET /log?buffer=ownAction тоже изолирует корректно. Повторное чтение helper130 показало, что после initial scoped read его collector обращался к общему GET /log. Поэтому предыдущая формулировка о ненадёжности GET buffer уточнена: дефект был в диагностическом сборщике. Исторические записи130 остаются смешанными и не становятся доказательством конкретной причины отказа сертификата.
|
||
|
||
Все четыре собственных logger/action на каждом CHR удалены по exact-ID/name/prefix/action/topics preflight. Полные существующие logging/action rows до/после совпали на обоих устройствах; default buffer не очищался. Пароли и VPN-конфигурация не менялись. [Протокол и точный selector](ux-ui/acceptance/routeros-scoped-log-2026-10-11.json). Документация: [REST query](https://manual.mikrotik.com/docs/developer-guides/rest-api/), [раздельные memory buffers](https://manual.mikrotik.com/docs/diagnostics-monitoring-and-troubleshooting/log/).
|
||
|
||
Source/runtime/UI не менялись; build и регрессия не повторялись. Следующий133 — оставшиеся реальные сценарии и проверка расхождений API; external CRL distribution failures, другие ОС и независимые WAN остаются открыты.12.5 не завершён.
|
||
|
||
## 12.5.133 — реальные журналы в REST-терминале (2026-10-11)
|
||
|
||
Диагностика132 выявила продуктовый баг getLogs: GET /log?limit=N использовал limit как REST property filter. На обоих CHR default memory содержал1000 строк, но SDK возвращал0, а API log print limit=3 —200/(no log entries). Исправлен SDK: чтение default memory с проекцией полей, последние N строк в native chronological order, максимум200. Невалидный limit отклоняется до опроса. Это лимит вывода: native buffer читается целиком перед slice; лимит сетевой передачи не обещается.
|
||
|
||
Проверены реальные API limits3/50/500→3/50/200 на каждом CHR, own marker виден, latest native IDs совпадают; limit0→400. Live терминал1280/320 получил по3 реальные строки, очистил поле команды после успеха и не имеет document overflow. Уточнена исходная подпись: «REST: каждая команда — отдельный запрос. Результат появится после ответа API.»; постоянная фраза о непроверенном соединении больше не противоречит успешному результату. ReUI Frame/Button/Input и base-nova сохраняются, vendor/layout не менялись.
|
||
|
||
Профильный HTTP SDK test (tail/default50/cap200/short/empty/invalid limits/401) passed, включён в npm test:exec. HTTP route/empty-versus-error и signed JWT/RBAC passed; backend build passed; source-only TypeScript и frontend production build passed. Scoped ESLint страницы/тестов passed; SDK lint имеет две исходные prefer-const ошибки125/899, проверка с отключением только этой rule passed. Обычный root tsc захватил ignored historical tmp и failed; существующий source-only config passed. Initial SDK test sandbox EACCES исправлен разрешённым loopback запуском. Первый UI assertion сравнивал newline string с отдельными div и failed; исправлен только способ проверки, final2/2 passed. Эти initial failures не скрыты и не прибавлены к уникальным сценариям.
|
||
|
||
Развёрнуты production backend/frontend ux-log133; backend/PostgreSQL healthy, frontend running/live UI. SDK source и compiled output SHA256 совпали с Docker; source страницы совпал с build context. Сохранены private rollback env и предыдущие образы. Только script/info markers добавлены в default logs; журнал не очищался, новых конфигурационных/VPN fixtures нет, оба CHR доступны, пароли не менялись. [До/после и проверки](ux-ui/acceptance/terminal-log-limit-2026-10-11.json), [live UI](ux-ui/acceptance/browser-terminal-logs-2026-10-11.json).
|
||
|
||
Следующий134 — external CRL distribution/failure и оставшаяся матрица. Полная итоговая регрессия после последнего product изменения ещё требуется;12.5 открыт.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI App Shell12](https://reui.io/preview/base/app-shell-12?ref=mcp) | Устройство → log print limit=N → default memory tail → ответ API → реальные строки |
|
||
|
||
## 12.5.134 — внешняя загрузка CRL и отказ HTTP endpoint (2026-10-11)
|
||
|
||
Первый CHR выпустил собственные CA/client certificates с CDP; второй импортировал только public PEM, private-keys-imported0. Публичный DER CRL успешно разобран OpenSSL. Временный HTTP endpoint на Debian161.104.46.222:18084 отдавал только точный CRL path с Content-Length/Connection close. Фактические downloader GET от104.165.244.7 зафиксированы; dynamic CRL для CA и client в итоговом snapshot оба invalid=false/expired=false/revoked0.
|
||
|
||
Для независимого static CRL URL с отсутствующим path сервер вернул404 фактическому downloader. Строка осталась invalid=true/cert=none; ранее загруженные валидные CA/client CRL сохранились. Это принятие HTTP download/404/cache preservation, а не доказательство IKE refusal для сертификата с недоступным собственным CDP. Новый VPN tunnel здесь не создавался: проверяется инфраструктура распространения CRL. Отказ IKE, истёкший/повреждённый CRL, часовой refresh и немедленное завершение existing IKE остаются открыты.
|
||
|
||
Initial attempts сохранены полностью.1: manual download400/in progress и cleanup preflight failed, поскольку RouterOS потребил публичные файлы после импорта; exact scoped recovery убрал own chain/files/cache, остальные файлы сохранены.2: direct CHR-to-CHR CRL не загрузился за20s, cleanup10×2 passed.3: receiver /tool/fetch к direct CHR URL получил remote disconnected while in HTTP exchange, хотя Debian GET200; точная причина неизвестна, настройки HTTP/Firewall не менялись.4: временный endpoint дал valid CRL control, но повторный manual download во время automatic job вернул400/in progress; cleanup passed.5: busy receipt учтён отдельно, ожидается actual downloader request/status; valid+404/cache control и cleanup passed. Эти отказы не переименованы в success; direct distribution между CHR не принята.
|
||
|
||
CRL-use/download второго CHR восстановлены точным сравнением исходного settings object. Own logger/action, issuer chain, imported certificates, exports/uploads и CRL cache удалены после exact ownership preflight. Набор IDs10 коллекций на каждом CHR совпал с baseline итогового запуска; endpoint closed, порт18084 больше не слушается, Compose one-off завершён. Default buffer не очищался; flash directory/default/public/metadata/195.195.195.195/32 сохранены; пароли не менялись. Backend/PG healthy, frontend ux-log133 running; source/runtime/UI не менялись, build и регрессия не повторялись. [Все попытки и итоговый протокол](ux-ui/acceptance/ipsec-external-crl-download-2026-10-11.json).
|
||
|
||
Следующий135 — certificate-bound missing/expired/malformed CRL и IKE enforcement с новым успешным контролем.12.5 открыт.
|
||
|
||
| Референс | Схема |
|
||
| --- | --- |
|
||
| [ReUI List9](https://reui.io/preview/base/list-9?ref=mcp) | Own CA → public certificate/CDP → HTTP200 CRL → valid cache → own404 → invalid row → scoped cleanup |
|
||
|
||
## 12.5.135 — недоступный CRL привязанного сертификата и реальный IKE (2026-10-11)
|
||
|
||
Создан собственный certificate-authenticated tunnel на CHR2; client CA/certificate выпущены CHR1 и импортированы в responder только публично. Собственный responder CA/server key создан native на CHR2. Linux strongSwan использовал собственный client key/private CA и точный public server certificate pin. CRL-use/download=yes; distinct Linux containers/addresses сохранены для трёх фаз.
|
||
|
||
1. Валидный external CRL для CA/client загружен: IKE/ESP established, Ping3/3, API online=true.
|
||
2. Тот же certificate CDP endpoint отвечает404; own CRL cache сброшен только после проверки ownership всех сертификатов/URL, invalid caches подтверждены. Native RouterOS ответил AUTHENTICATION_FAILED в обоих запусках; scoped log первого запуска — «failed to validate path: CRL not found» для собственного client certificate. Established0/API online=false. Это явный PKI отказ, не inference по timeout.
|
||
3. Endpoint снова отдаёт signed valid CRL, оба cache valid; новый Linux container: IKE/Ping3/3/API online=true.
|
||
|
||
Первый запуск прошёл1–2, но recovered control получил IKE_INIT timeout без ответа и не был принят как восстановление. Его полный протокол сохранён, exact transport cause неизвестен. Повторный полный запуск прошёл три фазы; возможный bounded transport retry записывается отдельно, не увеличивает число уникальных сценариев. [Оба запуска и итог](ux-ui/acceptance/ipsec-external-crl-ike-2026-10-11.json).
|
||
|
||
CRL settings восстановлены точным сравнением. Own endpoint/logger/CA/certificates/private exports/credentials/Linux clients/network/IPsec identity/peer/policy/group/profile/proposal/mode-config/pool/bridge/address удалены по ownership checks.18 наборов IDs на каждом CHR совпали с baseline; private files removed, Docker cleanup, порт18084 закрыт. Existing/default/public/metadata/195.195.195.195/32/flash directory и пароли сохранены. Crypto dumps в evidence не включены, сохранены только выбранные auth/CRL сообщения.
|
||
|
||
Source/runtime/UI не менялись; действующий backend/frontend ux-log133. Следующий136 — повреждённый и подписанный истёкший CRL. Общая UI-регрессия после133 запущена отдельным процессом, её результат пока не заявляется. Немедленное завершение существующего IKE при отзыве, другие ОС и SLA ещё не приняты;12.5 открыт.
|
||
|
||
## 12.5.136 — повреждённый и подписанный истёкший CRL в IKE (2026-10-11)
|
||
|
||
В собственном external-CA tunnel проверены четыре payload на одном certificate-bound CDP: valid DER → HTTP200 malformed text → signed expired DER → original valid DER. Между фазами own cache сбрасывался после certificate/URL ownership preflight, CRL-use/download=yes. Private CA key использован только в0700/0600 временных файлах для подписания CRL, затем удалён. OpenSSL проверил подпись expired DER точным собственным CA; lastUpdate=now−2h, nextUpdate=now−1h. Часы CHR/Debian не менялись.
|
||
|
||
Оба positive controls установили IKE/ESP, Ping3/3 и API online=true. Malformed payload дал invalid=true caches, AUTHENTICATION_FAILED/established0/API offline. Signed expired payload был распознан RouterOS как invalid=false/expired=true, но новое IKE тоже получило явный AUTHENTICATION_FAILED/established0/API offline. Это четыре уникальные фазы без retry в итоговом запуске; отказ не выводится из сетевого timeout. Per-phase log сохраняет выбранную auth metadata; список expired может содержать earlier malformed reason и не выдаётся за отдельный точный текст причины expiry.
|
||
|
||
Own certificates/CA/exports/imports/private credentials/Linux containers/network/endpoint/loggers/tunnel config/pool/bridge/address удалены.18 наборов IDs×2 совпали с baseline, CRL settings restored exact, endpoint closed/порт18084 не слушается. Default/public/metadata/195.195.195.195/32/flash directory и пароли сохранены. [Четыре фазы, подпись и cleanup](ux-ui/acceptance/ipsec-malformed-expired-crl-2026-10-11.json); [OpenSSL CRL date options](https://docs.openssl.org/3.0/man1/openssl-ca/).
|
||
|
||
Source/runtime/UI не менялись, действуют backend/frontend ux-log133. Следующий137 — external revocation при existing IKE и новый handshake. Уже запущенная общая UI-регрессия после133 продолжается; её итог будет отдельным последующим блоком, без объявления успеха заранее. Другие ОС/SLA/часовой refresh/immediate active-session revocation остаются открыты;12.5 открыт.
|
||
|
||
## 12.5.137 — внешний отзыв сертификата и существующая IKE-сессия (2026-10-11)
|
||
|
||
Собственный external-CA tunnel подтвердил IKE/Ping3/3. Затем CHR1 отозвал собственный client certificate. Свежий CRL содержит его точный serial, подпись проверена собственным public CA; CHR2 загрузил CA/client cache valid с revoked count1. Новый Linux client получил AUTHENTICATION_FAILED; scoped RouterOS log — «revoked by CRL cert is revoked by crl».
|
||
|
||
Уже установленная IKE-сессия в коротком наблюдении сохранилась и продолжила Ping3/3. API online=true корректно отражал именно эту старую сессию, а не успех нового handshake. После явного terminate только собственного старого IKE API стал offline; ещё один новый revoked client также получил AUTHENTICATION_FAILED/established0/API offline. Поэтому отзыв/обновление CRL не выдаётся за гарантированное немедленное завершение уже установленного туннеля. [Подпись/serial, старый IKE, два отказа и cleanup](ux-ui/acceptance/ipsec-external-crl-revocation-2026-10-11.json).
|
||
|
||
Own logger/certificate chains/exports/imports/private credentials/Linux containers/network/tunnel config/pool/bridge/address/HTTP endpoint удалены.18 наборов IDs×2 restored, CRL settings object восстановлен точно, port18084 closed. Default/public/metadata/195.195.195.195/32/flash и пароли сохранены. Source/runtime/UI не менялись; действуют backend/frontend ux-log133. Ключи и crypto dumps в evidence не сохранялись.
|
||
|
||
Следующий138 — intermediate CA certificate chain. Общая UI-регрессия после133 продолжается и будет принята только по итоговому протоколу. Другие ОС, долгие нагрузки, periodic refresh и немедленное завершение existing sessions ещё не приняты как гарантии;12.5 открыт.
|
||
|
||
## 12.5.138 — промежуточный CA и повторная аутентификация (2026-10-11)
|
||
|
||
CHR1 выпустил собственную RSA2048 chain Root CA → Intermediate CA → client. Root/intermediate имеют CA BasicConstraints, leaf — CA=false; обе подписи проверены Node X509, полная цепочка/сроки/constraints прошли OpenSSL verify. CHR2 импортировал три public certificates и загрузил три valid/nonexpired CRL cache через два собственных CDP path. Отдельные native responder CA/server key созданы на CHR2.
|
||
|
||
Linux strongSwan с собственной client private key, explicit public Root/intermediate trust и точным server certificate pin установил IKE/ESP: Ping3/3/API online=true/конкретный VIP. Reauth завершился успешно, IKE id изменился1→2; новый IKE/ESP снова Ping3/3/API online/VIP. Профиль не менял auth algorithms/правила существующих сетевых операций. [Полная цепочка, CRL, IKE/reauth и cleanup](ux-ui/acceptance/ipsec-intermediate-ca-chain-2026-10-11.json).
|
||
|
||
Own issuer chain удалена только после доказательства ownership всех descendants/отсутствия references. Own responder/imports/exports/private credentials/Docker client/network/endpoint/loggers/cache/tunnel objects/pool/bridge/address удалены;18 наборов IDs×2 restored, CRL settings restored exact, порт18084 закрыт. Default/public/metadata/195.195.195.195/32/flash directory и пароли сохранены. Source/runtime/UI не менялись; backend/frontend ux-log133.
|
||
|
||
Принята именно описанная native RSA chain и один Linux client. Arbitrary custom OIDs/policies/path length/missing chain/intermediate revocation/прочие ОС и полная production PKI не приняты. Следующий139 — дождаться итогов текущей общей UI-регрессии, выполнить context/source series и сохранить точный итог с сохранением исходных evidence/screens.12.5 открыт.
|