27 дек. 2025 г.·7 мин

Внутренний ACME для TLS-сертификатов: офлайн продление

Как построить внутренний ACME для TLS-сертификатов без интернета: архитектура, модель доверия, выпуск и автопродление, мониторинг сроков и аудит.

Внутренний ACME для TLS-сертификатов: офлайн продление

Проблема: сертификаты истекают и это останавливает сервисы

TLS-сертификаты почти всегда вспоминают в последний момент: когда пользователи видят предупреждение в браузере, API начинает отдавать ошибки, а клиенты VPN не подключаются. Причина простая - ручное продление держится на календаре, внимательности и доступе к нужным системам. Один пропущенный срок, один сотрудник в отпуске, одно забытое промежуточное звено в цепочке - и сервис «падает» не из-за кода, а из-за доверия.

В изолированных контурах проблема острее. «Без выхода в интернет» обычно означает, что узлы не могут:

  • обращаться к публичным центрам сертификации и их проверкам;
  • публиковать или обновлять записи во внешнем DNS;
  • принимать входящие проверки снаружи;
  • быстро ставить обновления и инструменты «как в облаке».

При этом сертификаты нужны везде, и чаще всего страдают самые заметные и критичные точки: веб-порталы и внутренние панели, API для интеграций, почтовые серверы, VPN-шлюзы, сервисы аутентификации и админки оборудования.

Когда таких сервисов десятки, ручная схема превращается в лотерею: где-то сертификат обновили, но забыли перезапустить балансировщик; где-то обновили только на одном узле кластера; где-то выдали сертификат с неверным именем. Поэтому внутренний ACME для TLS-сертификатов решает не «красоту процесса», а четыре практичные цели: непрерывность работы, единый контроль выдачи, предсказуемое продление по расписанию и аудит (кто, что, когда и на каких основаниях получил).

ACME в двух словах: роли и логика подтверждения владения

ACME - это протокол, который позволяет выпускать и продлевать TLS-сертификаты автоматически, по понятным правилам. Если говорить просто, есть три роли: клиент (агент на вашем сервере), ACME-сервер (точка, которая принимает запросы) и центр сертификации (CA), который в итоге подписывает сертификат. Клиент просит сертификат, ACME-сервер дает задание на проверку, клиент доказывает, что он правда владеет именем, и после этого CA выпускает сертификат.

Главное отличие ACME от «скрипта, который копирует сертификат» в том, что ACME привязывает выпуск к проверке владения доменом и к учетной записи (account) клиента. Плюс, протокол описывает весь цикл: запрос, проверку, выпуск, продление, отзыв. Это снижает риск «тихого» выпуска сертификатов не туда и помогает держать процесс под контролем.

Обычно используются такие проверки владения именем (challenge):

  • HTTP-01: разместить токен по HTTP на домене (удобно, если есть общий входной веб-доступ к сервису).
  • DNS-01: создать TXT-запись в DNS (часто самый практичный вариант внутри сегментированных сетей).
  • TLS-ALPN-01: отдать токен через TLS на 443 порту (подходит, когда проще поднять временный TLS-ответ).

Внутри закрытого контура чаще всего выигрывает DNS-01: не нужно пробивать HTTP-доступ до каждого сервиса, достаточно управляемого внутреннего DNS.

Где хранится ключ, зависит от политики. Чаще ключ создается и живет на сервере приложения (там же происходит ротация). Для более строгих требований ключ можно генерировать и хранить в HSM или в хранилище секретов, чтобы снизить риск утечки и ограничить доступ администраторов.

Архитектура: из чего состоит внутренний контур ACME

Внутренний ACME для TLS-сертификатов обычно строят как небольшой контур внутри сети: отдельный сервис выдает и продлевает сертификаты, а приложения только запрашивают их и ставят на свои endpoints. Так вы убираете ручной выпуск, но сохраняете контроль.

Базовый набор компонентов выглядит так:

  • ACME-сервер в локальной сети: принимает запросы на выпуск, запускает проверку владения именем и отдает готовый сертификат.
  • Частный центр сертификации (CA): корневой сертификат хранится максимально изолированно, а выпуск выполняет промежуточный CA.
  • DNS и DHCP: помогают держать порядок в именах и IP, а DNS часто используется для подтверждения доменов.
  • Хранилище секретов: место, где безопасно хранить ключи аккаунтов ACME, токены автоматизации и, при необходимости, ключи для доступа к DNS.
  • Точки интеграции: те места, где сертификат реально нужен.

Разделение CA на корневой и промежуточный важно: если промежуточный ключ утечет, вы можете отозвать и перевыпустить только его, не перестраивая доверие во всей организации. Корень при этом лучше держать офлайн или в сильно ограниченном сегменте.

DNS и DHCP становятся частью доверия: если кто-то может самовольно создавать записи, он сможет проходить проверку и получать сертификаты. Поэтому права на зоны, обновления и журналы изменений должны быть понятны и ограничены.

Интеграции обычно делаются через стандартные клиенты ACME и автоматическую перезагрузку конфигурации, например для:

  • веб-серверов и API
  • балансировщиков
  • Kubernetes ingress
  • reverse proxy
  • почтовых и внутренних порталов

В закрытых контурах (например, в дата-центрах госорганизаций или банков) такой подход помогает поддерживать короткие сроки сертификатов без зависимости от интернета.

Доверие и контроль: как не превратить внутренний CA в "печатный станок"

Внутренний ACME для TLS-сертификатов снимает ручную работу, но добавляет риск: если правила выпускa слабые, любой сервис сможет получить сертификат на чужое имя. Поэтому в центре внимания не скорость, а доверие и контроль.

Начните с простого принципа: корневой центр (Root CA) должен быть максимально недоступен. Его держат офлайн, включают только для выпуска или ротации промежуточных центров, а доступ дают узкому кругу администраторов по регламенту. Закрытый сейф, отдельная машина без сети, журнал действий и двух человек на критические операции часто дают больше безопасности, чем сложные схемы.

Рабочей лошадкой становится промежуточный CA. Он подписывает сертификаты для ACME, живет короче (например, 1-3 года) и проще отзывается при инциденте. Важно заранее продумать ротацию: новый intermediate выпускается заранее, доверие обновляется на клиентах, затем старый выводится из обращения.

Доверие к внутреннему корню нужно раздать управляемо: на ПК и серверы через доменные политики, на мобильные через MDM, на тонкие клиенты через базовый образ или централизованную конфигурацию. Отдельно проверьте устройства в медицине и производстве, где обновления могут быть редкими.

Политики, которые держат систему в руках

Хорошая политика выпуска обычно отвечает на пять вопросов:

  • Кто имеет право запрашивать выпуск (группы, сервисные аккаунты, сетевые сегменты).
  • Какие имена разрешены: только ваш внутренний DNS-зонный список, запрет внешних доменов.
  • Разрешены ли wildcard и какие именно (часто их стоит ограничить).
  • Какие SAN допустимы (например, только внутри конкретного проекта или подразделения).
  • Максимальные сроки и частота перевыпуска, чтобы не плодить "вечные" сертификаты.

Аудит: что должно оставаться в следах

Логи должны показывать цепочку: кто запросил сертификат, каким способом подтвердил владение именем, что именно выдано (CN/SAN, срок, отпечаток), и кто одобрил, если у вас есть ручной шаг. В закрытой сети, например у госзаказчика или банка, это помогает быстро ответить на вопрос "почему этот сервис получил сертификат" и вовремя остановить неправильные заявки.

Как подтверждать домены внутри: DNS, HTTP и особенности сегментации

Внутренний ACME для TLS-сертификатов упирается в одно: как доказать, что сервис действительно владеет именем, если сеть изолирована и правила доступа жесткие. Внутри контура чаще всего побеждает DNS-01, потому что он не требует прямого HTTP-доступа к сервису и хорошо работает через сегменты.

DNS-01 обычно становится базовым вариантом: ACME-клиент кладет временную TXT-запись в вашу внутреннюю DNS-зону, а ACME-сервер проверяет ее через корпоративный DNS. Это удобно, если у вас много сервисов, балансировщики, NAT и закрытые порты.

HTTP-01 тоже возможен в изолированном контуре, но он капризнее. Он подходит, когда ACME-сервер может дойти по HTTP до конкретного хоста и пути проверки, а маршрутизация и прокси не меняют запрос. Он мешает, если сервисов много, адреса плавают, все сидит за одним reverse proxy, или доступ из зоны ACME к DMZ закрыт.

Полезная развилка выглядит так:

  • DNS-01: лучший выбор для закрытых сетей, DMZ, балансировщиков и wildcard
  • HTTP-01: проще для одиночных сервисов, где есть прямой маршрут и стабильный URL
  • Wildcard: удобно для микросервисов, но требует строгого контроля прав на выпуск

Wildcard-сертификаты (например, для *.corp.local) сокращают количество выпусков, но снижают точность контроля: один ключ может открыть доступ сразу ко многим именам. Поэтому их обычно дают только платформенным командам и только для отдельных зон.

Сегментация важна: для DMZ и внутренних зон задайте разные политики (кто может запрашивать, на какие домены, с каким сроком). Хорошая практика - отдельные аккаунты ACME и разные профили выдачи для сетей с разным уровнем риска.

Чтобы не получить "шторм" продления, введите лимиты:

  • ограничение частоты выпуска на домен и на команду
  • джиттер (случайный сдвиг) в расписании продлений
  • блокировку массового выпуска при аварии DNS
  • обязательное подтверждение для wildcard в чувствительных зонах

Например, в закрытой сети больницы сервисы в DMZ подтверждают имена через DNS-01, а внутренние панели админов получают отдельную зону и более строгие лимиты, чтобы один сбой автоматизации не остановил всю инфраструктуру.

Варианты развертывания без интернета: полностью офлайн и полуофлайн

Подобрать серверы под PKI
Подберем серверы GSE для CA и ACME с учетом изоляции, отказоустойчивости и роста.
Запросить расчет

Для внутреннего ACME для TLS-сертификатов чаще всего выбирают один из двух режимов: полностью офлайн, когда весь контур живет внутри закрытой сети, или полуофлайн, когда есть строго контролируемый "мост" только для обновлений и политик.

Полностью офлайн

В этой схеме внутри периметра находятся: частный центр сертификации (root и чаще всего отдельный intermediate), ACME сервер, база данных ACME, DNS (если вы делаете DNS-01), а также клиенты на сервисах (например, Certbot или встроенные ACME-клиенты в прокси). Никаких внешних проверок, никаких обращений к публичным DNS и никакой зависимости от внешних репозиториев.

Главный плюс - предсказуемость и безопасность. Главный минус - обновления и исправления вы делаете сами и по плану.

Полуофлайн с "мостом"

Здесь контур выпуска сертификатов остается изолированным, но появляется выделенный узел или процесс, который по расписанию привозит внутрь: обновления ОС и пакетов, новые версии ACME, списки отзыва, шаблоны конфигураций и изменения политик. Этот "мост" должен быть односторонним по смыслу: он доставляет внутрь, а не "публикует наружу".

Обновления лучше проводить окнами и сначала на стенде. Не меняйте одновременно CA, ACME и клиентов: так сложнее понять, что сломалось.

Для резервного копирования заранее решите, что восстанавливается быстро, а что перевыпускается:

  • конфигурации CA и ACME, политики, профили сертификатов
  • база данных ACME (аккаунты, заказы, статусы)
  • журналы аудита и события выпуска и отзыва
  • конфиги DNS и HTTP-челленджей (если они ваши)
  • хранилища ключей только в защищенном виде (HSM, зашифрованные бэкапы)

План восстановления должен включать минимум три сценария: утечка ключа intermediate, компрометация узла ACME, ошибочный массовый выпуск. В каждом случае заранее определите, кто дает команду на отзыв, как быстро распространяются CRL/OCSP внутри, и как организован форсированный перевыпуск на критичных сервисах (например, в закрытой сети предприятия или дата-центра, который интегратор вроде GSE.kz обслуживает по SLA).

Пошагово: как внедрить внутренний ACME и включить автопродление

Начните с простого: какие имена вы будете выпускать и как долго должен жить сертификат. Зафиксируйте доменные зоны (например, *.corp.local, *.svc.intra), список критичных сервисов и правила: срок действия, минимальный остаток до продления, требования к ключам (RSA или ECDSA), где хранить ключи.

Дальше важно построить цепочку доверия. Создайте root CA (лучше держать офлайн) и intermediate CA для повседневной выдачи. В политиках задайте: какие имена разрешены, какие поля обязательны, кто имеет право запрашивать сертификаты, и как вы будете отзывать их при компрометации.

Когда CA готов, разверните внутренний ACME для TLS-сертификатов: ACME-сервер в локальной сети, который принимает запросы от клиентов, проверяет владение именем и выпускает сертификат через ваш intermediate CA. Отдельно продумайте журналирование и аудит: кто запросил, для какого имени, с какого хоста.

Практический план внедрения обычно выглядит так:

  • Описать доменные зоны, стандарты имен и требования по срокам.
  • Поднять root и intermediate CA и утвердить политики выпуска.
  • Развернуть ACME-сервер и подключить его к intermediate CA.
  • Настроить DNS-автоматизацию для DNS-01: какой сервис меняет записи и под какой учеткой.
  • Настроить ACME-клиенты на серверах приложений и безопасную перезагрузку сервисов после обновления.

Завершите тестом: выпустите сертификат для одного непубличного сервиса, проверьте цепочку доверия на клиентах, затем дождитесь планового продления (или сократите порог) и убедитесь, что обновление проходит без простоя. После этого включайте регулярное продление для остальных сервисов по группам, начиная с менее критичных.

Контроль сроков: мониторинг, оповещения и отчетность

Настроить подтверждение доменов
Поможем выбрать DNS-01 или HTTP-01 и настроить безопасные права на зоны.
Получить консультацию

Автопродление не отменяет контроля. Внутренний ACME для TLS-сертификатов снимает ручную работу, но добавляет новую задачу: быстро замечать сбои в цепочке (ACME сервер, challenge, выпуск, доставка, перезапуск сервиса) до того, как сертификат истечет.

Что стоит измерять и держать на одном экране:

  • Дни до истечения по каждому имени (и отдельно по критичным сервисам)
  • Процент успешных продлений за 24 часа и за 7 дней
  • Частые причины провалов: DNS/HTTP challenge, недоступность ACME, ошибки прав
  • Возраст сертификатов и доля тех, что обновились не по графику
  • Время от запроса до установки сертификата на узле

Проверять лучше в двух местах. Централизованно - чтобы видеть общую картину по всем сегментам. И локально на узлах - чтобы поймать ситуацию, когда сертификат выпущен, но не применился (файл не обновился, сервис не перезапустился, перепутан путь к хранилищу).

Оповещения задайте простыми порогами: 30/14/7/1 день до истечения. На 30 дней достаточно уведомления владельцу сервиса. На 7 и 1 день - дежурной смене и тем, кто отвечает за DNS/прокси, чтобы не терять время на согласования.

Для разборов нужны журналы: выпуск и отзыв сертификата, попытки challenge, изменения DNS-записей, перезапуски веб-серверов и балансировщиков. Раз в месяц делайте аудит: список активных сертификатов, где установлены, кто владелец, и какие имена больше не нужны. Это снижает риск, что внутренний CA превратится в неконтролируемую выдачу "на все подряд".

Частые ошибки и ловушки при внутреннем ACME

Внутренний ACME для TLS-сертификатов часто внедряют «как в интернете», а потом удивляются, что стало даже опаснее. Ниже ошибки, которые встречаются чаще всего, и почему они реально бьют по безопасности и стабильности.

Ошибки, которые ломают управляемость

Самая популярная ловушка - выпускать слишком долгоживущие сертификаты «на всякий случай». Кажется, что так меньше шансов на простой, но на деле вы теряете контроль: компрометация ключа становится проблемой на годы, а не на недели.

Еще одна крайность - один wildcard на все сервисы. Это удобно, пока не утек приватный ключ. Тогда под угрозой сразу весь контур, и вы не можете ограничить ущерб по сегментам или командам.

Проблемы часто начинаются и с доверия: root CA раздают «кому надо» без учета мобильных ноутбуков, изолированных рабочих мест и временных подрядчиков. В итоге где-то доверие не установлено (сервисы падают), а где-то установлено слишком широко (растет риск подмены).

Ошибки в хранении и эксплуатации

Технически внутренний ACME сервер в локальной сети работает, но процессы вокруг него хромают:

  • приватные ключи попадают в общие папки, артефакты сборки или CI-логи
  • нет плана отзыва и быстрой замены при компрометации
  • автопродление включили, но не проверили, что сервис перечитывает сертификат (нужен reload или перезапуск)

Простой пример: сертификат обновился ночью, а утром часть клиентов видит старый, уже просроченный цепочкой, потому что прокси не перечитал файлы. Поэтому автопродление всегда дополняют тестом перезагрузки и проверкой «что реально отдает сервис».

Короткий чек-лист перед запуском в эксплуатацию

Перед тем как включать автопродление в проде, проверьте не только сам ACME сервер, но и организационные вещи. Ошибки чаще всего не в криптографии, а в том, что никто не понимает, где живут сертификаты и кто за них отвечает.

5 проверок, которые экономят недели

  • Соберите инвентаризацию всех TLS-точек: веб и API, reverse proxy, ingress, брокеры очередей, базы данных, почта, внутренние панели. Если что-то забыть, оно и упадет первым.
  • Определите владельцев доменов и правила выдачи: какие имена разрешены, кто может запрашивать wildcard, какие команды или сервис-аккаунты имеют право выпускать сертификаты.
  • Разведите роли CA: Root CA держите изолированным (и используйте редко), а intermediate CA сделайте ротационным, с коротким сроком жизни и минимальными правами. Проверьте, что ключи защищены и есть понятный порядок замены.
  • Выберите один основной challenge и отработайте его до автоматизма. В закрытых сетях обычно выигрывает DNS challenge, но важно заранее проверить права на изменение зон, задержки обновления и сегментацию между ACME, DNS и клиентами.
  • Настройте контроль сроков: метрики, оповещения, отчеты, плюс тест аварийного продления (например, искусственно сократить срок тестового сертификата и убедиться, что цепочка продления работает).

Документы и аварийные действия

Зафиксируйте процесс отзыва и срочной замены сертификатов: кто принимает решение, как быстро обновляются trust stores, и как откатиться, если новый сертификат не принимается клиентами. Это должно быть понятно дежурной смене, а не только автору внедрения.

Пример сценария: закрытая сеть и десятки внутренних сервисов

Мониторинг сроков сертификатов
Настроим централизованный контроль сроков и оповещения по критичным TLS-точкам.
Оставить заявку

Представим банк или больницу с закрытым контуром: интернет на серверах приложений запрещен, доступ есть только через внутренние сегменты, а простои недопустимы. Внутри работают десятки сервисов: регистратура, личный кабинет, электронный документооборот, API для интеграций, панели администрирования.

Имена обычно живут в внутреннем DNS. Часто есть отдельная зона для приложений, чтобы не смешивать серверные имена и пользовательские: например, apps.corp для веб-сервисов и infra.corp для инфраструктуры. Это помогает и с политиками доступа, и с тем, кто имеет право менять записи.

Дальше включается внутренний ACME для TLS-сертификатов. В контуре поднимают частный центр сертификации и ACME-сервер в локальной сети, а на каждом сервисе ставят ACME-клиент. Для подтверждения владения доменом выбирают DNS-01: клиент создает временную TXT-запись в внутреннем DNS, ACME-сервер ее проверяет и выпускает сертификат.

Обычно процесс выглядит так:

  • ACME-клиент раз в сутки проверяет срок действия и запускает продление заранее.
  • При успехе он кладет новый сертификат в нужный каталог.
  • Сервис (например, веб-сервер) получает мягкий перезапуск, чтобы подхватить ключи без простоя.

Контроль сроков делают не вручную, а через дашборд в мониторинге: видно, сколько сертификатов истекает в 30, 14 и 7 дней. Алерты уходят дежурным, а раз в месяц формируется короткий отчет для ИБ и владельцев систем.

Для команды это заметная разница: меньше ночных аварий из-за просроченных сертификатов, меньше ручных заявок, больше предсказуемости. В таком сценарии CA и ACME-сервер часто размещают на выделенных локальных серверах (например, на стойке в ЦОД), чтобы все работало стабильно и без зависимости от внешних каналов.

Следующие шаги: пилот, масштабирование и поддержка

Начните не с установки ACME, а с учета. Соберите список сервисов, которые уже используют TLS, и тех, кто планирует включить HTTPS в ближайшие месяцы. Важно сразу назначить владельцев: кто отвечает за доменные зоны, кто за DNS, кто за балансировщики и кто будет получать уведомления.

Дальше выберите целевую модель: полностью офлайн (вся цепочка внутри) или полуофлайн (например, редкая синхронизация политик и обновлений через контролируемый шлюз). Решение влияет на план миграции: где хранить корневой ключ, как обновлять доверие на рабочих станциях и серверах, как выпускать сертификаты для старых приложений.

Перед пилотом проверьте, что инфраструктура готова к ежедневной эксплуатации:

  • Разделение ролей: CA, ACME и мониторинг не должны жить в одной точке без причин
  • Резервное копирование: ключи, конфигурации, журналы, база выданных сертификатов
  • Наблюдаемость: метрики выдачи, ошибки валидации, рост числа запросов
  • Контроль доступа: минимум прав для сервисных аккаунтов, аудит действий
  • План аварийных действий: что делать при компрометации ключа или сбое ACME

Пилот делайте на 2-3 сервисах с разной природой: один веб-сервис за балансировщиком, один внутренний API, один сервис в отдельном сегменте. Так быстрее выявятся проблемы с DNS, маршрутизацией и политиками. Зафиксируйте, сколько времени занимает выпуск, продление и раскатка сертификата, и кто реально участвует в процессе.

Масштабирование лучше вести волнами: по доменным зонам или по командам-владельцам. Для каждой волны заранее готовьте шаблоны политик (сроки, SAN, допустимые ключи, правила именования), а также критерии приемки: автопродление работает, мониторинг видит сроки, инциденты разбираются по логам.

Если нужна помощь в проектировании и внедрении, логично подключить системного интегратора. Например, GSE.kz может помочь собрать целевую схему под ваш контур, подобрать серверную платформу для CA и ACME (включая локально произведенные серверы), настроить мониторинг и организовать поддержку 24/7 с понятной зоной ответственности.

Внутренний ACME для TLS-сертификатов: офлайн продление | GSE