fix(certificates): заменять сертификат уникальным поколением
This commit is contained in:
1 parent
c683e1b2c1
commit
8c5cfa0706
11 files changed
+220
-19
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# Тестовый сервер UX/UI — 2026-10-10
|
||||
|
||||
Актуальное продолжение 2026-10-15: 257 — post-import guard проверяет unique name/X509 SHA-256/private-key и оба SSL assignments; REST pools ограничивают запросы/закрывают idle sessions. Профили9 certificates/2 ros-file и общая backend regression прошли; backend ux-certificates257/source530/dist1084 healthy. Actual duplicate payload256 rejected applyCalls0. Controlled live parallel read12 на2CHR без login errors. Следующий258 — безопасная unique replacement без duplicate logical names; реальная повторная выдача после guard ещё не принята. Этап12.5 открыт.
|
||||
Актуальное продолжение 2026-10-15: 258 — реализована unique generation rotation с проверкой нового leaf/SSL до архивации старого, сохранением прежнего ключа и финальным logical name. Profile9/build/lint passed, image ux-certificates258 source530/dist1084 prepared, ещё не активирован; runtime backend257/frontend251. Следующий259 — согласованный real first issue + scheduler renewal, trusted TLS, unique logical name/old archive и полный откат; разрешение сохраняется. Этап12.5 открыт.
|
||||
|
||||
| Параметр | Проверенное состояние |
|
||||
| --- | --- |
|
||||
@@ -34,6 +34,18 @@ OSPF84: real GRE Full adjacency/private routes/Ping3/3 и4 live PC/320px URL/bro
|
||||
|
||||
BFD85: Up/Full/own route/Ping,4 live UI и loss/withdrawal/recovery приняты; exact own cleanup8 коллекций×2 passed. Withdrawal5,245ms не подтверждает sub-second BFD timing; этот вопрос открыт. Runtime routing83 без новой сборки. [Отчёт](ux-ui/acceptance/ospf-bfd-loss-2026-10-09.json).
|
||||
|
||||
## 12.5.258 — уникальное новое поколение и сохранение старого сертификата (2026-10-15)
|
||||
|
||||
После256/257 issuer проверяет duplicate logical name ещё до CA order. Leaf/key получают случайное уникальное имя <base>_new_<12hex>, signed X509 fingerprint вычисляется до native upload. rotateCertificateGeneration требует подтверждённые разные native IDs и свободное archive name; сначала проверяет новый leaf/private-key и назначения обоих SSL сервисов на него. Только после этого прежний logical объект переносится в <base>_old_<12hex>, новый получает прежнее logical name и повторно проверяются fingerprint/private-key/services. Старый объект/ключ не удаляется, данные jobs/requestId остаются совместимыми.
|
||||
|
||||
Перед архивацией re-read обнаруживает изменение old ID/fingerprint; после ACK проверяется освобождение logical name, сохранение old ID/fingerprint в archive и неизменность new native ID. Shared IDs, occupied archive, missing ID, external modification или false rename ACK не дают successful receipt. При поздней ошибке возможен частично применённый state с services на проверенном generation; auto-delete/слепого rollback/повторного PATCH нет. Old key сохраняется для reconciliation, остальные его потребители не объявляются автоматически проверенными. Нет обещания нулевого TLS reload или защиты нескольких issuers.
|
||||
|
||||
Сценарии first issue/no previous и renewal/previous оставляют ровно один logical name и old key; четыре apply/rename failure checkpoints сохраняют старый материал; initial3 conflicts не вызывают apply. Дополнительно shared native ID, external fingerprint change и false archive ACK отвергаются. Все9 certificate scripts прошли, contracts/backend build и scoped ESLint passed; общая25-profile regression257 не повторялась, транспорт не менялся. Новых CA/DNS/native операций258 не было.
|
||||
|
||||
Production image ux-certificates258 собран; source530/compiled1084 matched, missing/different0. Образ подготовлен, НЕ активирован: тестовый runtime остаётся backend ux-certificates257/frontend ux-certificates251 healthy. [Prepared image](ux-ui/acceptance/certificates258-preparation.json). Реальная rename/binding семантика ещё не принята по mocks. Signed certificate name изменяем по [официальной документации](https://help.mikrotik.com/docs/spaces/ROS/pages/2555969/Certificates), но фактические native/TLS postconditions проверяются отдельно.
|
||||
|
||||
[TEST-ACME](../deploy/TEST-ACME.md) дополнен поколениями и cleanup правилами. Следующий259 — активировать258 только для согласованного exact mmt253-8e62a941.pngs.top/server2, свежий baseline, real first issue + one scheduler renewal. Требовать new trusted TLS fingerprint, один logical leaf, архив с исходными native ID/fingerprint/private-key и0 unfinished new names; затем убрать все только собственные поколения/root/files/jobs/DNS и восстановить settings/services/export. Старый cleanup256 нужно адаптировать к generated names, не применять вслепую. Разрешение того же сценария уже получено254, новый вопрос не нужен. Этот внешний цикл не начат на малом остатке недельного лимита, чтобы оставить запас на обязательный откат/коммит. Real renewal остаётся открытым.
|
||||
|
||||
## 12.5.257 — достоверный импорт сертификата и ограничение REST-сессий (2026-10-15)
|
||||
|
||||
После реального256 ACME issuer больше не считает HTTP ACK достаточным. applyVerifiedCertificateToServices перед назначением читает raw /certificate, требует unique logical name, SHA-256 ожидаемого выданного X509 leaf и private-key; после применения повторяет проверку leaf и читает configured /ip/service, подтверждая www-ssl/api-ssl enabled с нужным сертификатом. Missing/ambiguous/wrong fingerprint/private-key и неизвестное/ошибочное назначение приводят к failed через existing runner, не к done. Auto-delete импортированных объектов или rollback неизвестной частичной операции не добавлялся; operator видит ошибку и должен учитывать фактические изменения.
|
||||
|
||||
Reference in new issue
Block a user