3.9 KiB
Реальная приёмка ACME — 2026-10-14
Принят блок 12.5.250: mmt250-c22a9715.pngs.top, CHR 104.165.244.7, production Let's Encrypt DNS-01 / Cloudflare. Пользователь разрешил только собственные поддомены mmt* и подтвердил назначение сертификата сервисам с последующей очисткой. Звёздочка обозначает разрешённый префикс; в заявке использовалось точное обычное имя.
Временные credentials только в ignored private fixture; ключи/почта/account ID в Git не публикуются. Перед запуском проверить token/zone/account и отсутствие записей на точном FQDN и _acme-challenge.FQDN. Снять приватный native export, сертификаты/файлы и исходные www-ssl/api-ssl; сохранить исходную строку acme_settings, включая ключ ACME-аккаунта и дату. После окончания восстановить её полностью.
Текущий issuer создаёт TXT, выполняет ACME, синхронизирует A-запись с IPv4 сервера, импортирует leaf/key/chain и назначает сертификат обоим www-ssl/api-ssl, включая их. Переключатели trust-store не отключают назначение. Поэтому исходные параметры сервисов обязательны для отката. HTTP REST80 используется для управления во время проверки.
Ручной helper: backend/scripts/acceptance/acme-live-issue.mjs, private fixture через MMAPP_ACME_FIXTURE (по умолчанию ignored tmp/acme250-private.json). Требуется отдельно разрешённый тест, baseline, Portal fixture и SSH-туннель. Helper не заменяет native/DNS очистку; при уже сохранённом jobId новый выпуск блокируется. Неподтверждённый запрос сначала проверять по тому же ID, не отправлять новую задачу. Не запускать этот helper повторно без свежей подготовки: временные credentials после блока удалены.
Проверено: реальный Portal/UI, один POST issue, terminal done; trusted TLS/SNI/SAN, DNS A → 104.165.244.7, REST HTTPS200 с обычной проверкой сертификата; RouterOS private key и назначение обоим сервисам. После теста сервисы восстановлены, собственные leaf/chain/files/job удалены, первоначальные коллекции/экспорт/settings совпали. Приложение удалило TXT; собственная A-запись удалена по проверенным имени/типу/content/ID. Даты PostgreSQL сравниваются после JSON-нормализации; неверное сравнение Date со строкой не должно повторять очистку.
Выданный публичный сертификат CA не объявляется отозванным: экземпляры и ключевые файлы на CHR удалены, DNS очищен; запись о выпуске сохраняется у CA. Это не тест автоматического renewal, CA revocation или нескольких backend.
Протоколы: UI, TLS, DNS, native/cleanup.