Монитор с журналом Certificate Transparency и предупреждением об ошибке выдачи, рядом аппаратный модуль HSM с янтарным индикатором. Светлый рабочий стол у окна, кофе и рукописный чеклист на бумаге.


Понедельник, ранее утро. Grafana заливается красным - 502-е на балансировщике, клиенты не проходят авторизацию, бизнес теряет деньги каждую минуту. Через 40 минут причина найдена: wildcard-сертификат на основном домене протух двое суток назад. Никто не заметил, потому что ротация была ручной, а ответственный инженер уволился в прошлом квартале.

Знакомо? Тогда дальше - практический разбор: как выстроить управление сертификатами PKI через Certificate Transparency, ACME-протокол и HSM так, чтобы подобный инцидент стал невозможным.

Certificate Transparency - мониторинг сертификатов и detection аномалий​

Certificate Transparency (CT) - открытая система логирования всех публично выпущенных цифровых сертификатов X.509. По политикам корневых программ Chrome, Apple и Mozilla, публично доверенные TLS-сертификаты должны включать SCT (Signed Certificate Timestamp) минимум из двух квалифицированных CT-логов - иначе браузеры им не доверяют. CA де-факто записывают каждый сертификат в несколько CT-логов. Логи открыты для всех - и это даёт SOC-командам рабочий инструмент обнаружения.

Три сценария для SOC​

CT-мониторинг сертификатов критичен в трёх случаях:
  1. Misissuance - CA выпустил сертификат на ваш домен без вашего ведома. Причина: компрометация DNS-записей или ошибка валидации на стороне CA. Без CT-мониторинга вы узнаете об этом, когда сертификат всплывёт в фишинговой кампании.
  2. Shadow IT - разработчики заказали wildcard на поддомен, о котором security-команда не знала. Сертификат в CT-логе - первый и часто единственный сигнал.
  3. Фишинг через тайпосквоттинг - злоумышленник получил DV-сертификат на домен-двойник (например, c0deby.net вместо codeby.net). CT-лог покажет это в течение минут после выпуска.

Практика: настройка CT-мониторинга​

Базовый инструмент - crt.sh (поддерживается Sectigo, данные из CT-логов в открытом доступе). Запрос всех сертификатов для домена:
Bash:
curl -s "https://crt.sh/?q=%25.example.com&output=json" \
  | jq '.[] | {id, name_value, not_after, issuer_name}' \
  | head -50
Для непрерывного мониторинга crt.sh подходит как точка входа, но не как production-решение: нет webhook, нет гарантий SLA. Для автоматизации - Certspotter (SSLMate, активно поддерживается): отправляет webhook или email при появлении нового сертификата для заданного домена. Альтернатива - Facebook CT Monitoring или самописные скрипты, опрашивающие CT-логи через API.

CT-алертинг в SIEM

Интеграция строится просто: скрипт или коннектор опрашивает CT API по расписанию, нормализует данные, отправляет в SIEM как события. Корреляционное правило:
  • Условие: появление сертификата для домена из watchlist, где issuer не входит в утверждённый список CA организации.
  • Severity: High.
  • Действие: алерт в SOC + уведомление PKI-команды.
Для Elastic SIEM и Splunk - scheduled search по индексу с CT-событиями. Для MaxPatrol SIEM - пользовательский коннектор с маппингом полей issuer, domain, not_after. В KUMA - кастомный коллектор с нормализацией.

Ограничение, которое часто упускают: CT-логи покрывают только публично доверенные сертификаты. Внутренние CA (Microsoft ADCS, EJBCA с приватным корнем) в CT-логи не попадают - для них нужна отдельная инвентаризация через сканирование сети и аудит CA.

ACME-протокол - автоматизация выпуска и обновления сертификатов​

1781686722715.webp

ACME (Automated Certificate Management Environment), определённый в RFC 8555, - протокол для автоматического взаимодействия между ACME-клиентом и удостоверяющим центром. Изначально ISRG (Internet Security Research Group) проектировали его для Let's Encrypt, позже он стал полноценным стандартом IETF. Текущая версия - RFC 8555 (март 2019). Предыдущая, ACME v1, deprecated.

Как работает ACME​

Процесс автоматического обновления SSL-сертификатов через ACME:
  1. Регистрация аккаунта - клиент создаёт учётную запись на ACME-сервере с помощью ключевой пары.
  2. Заказ сертификата - клиент отправляет JSON-запрос по HTTPS с указанием доменных имён (SAN).
  3. Challenge - CA проверяет, что клиент контролирует домен.
  4. Выпуск - после успешной валидации CA подписывает и возвращает сертификат.
Весь обмен - JSON-сообщения поверх HTTPS с подписанными запросами и защитой от replay-атак. Ручное вмешательство не нужно.

HTTP-01 vs DNS-01: выбор challenge​

КритерийHTTP-01DNS-01
МеханизмCA запрашивает файл по http://domain/.well-known/acme-challenge/CA проверяет TXT-запись в DNS
ТребуетОткрытый порт 80 на сервереAPI-доступ к DNS-провайдеру
Wildcard-сертификатыНетДа
Применимость за NATОграниченаПолная
Основной рискКомпрометация веб-сервераКомпрометация DNS-учётных данных

Для внутренних сервисов за NAT или в Kubernetes-кластерах DNS-01 - единственный рабочий вариант. Для standalone веб-серверов с прямым доступом из интернета HTTP-01 проще и не требует интеграции с DNS API. DNS-propagation может занимать время - ACME-сервер периодически повторяет проверку, пока challenge в состоянии pending, конкретные интервалы зависят от реализации CA (например, Boulder у Let's Encrypt).

Сравнение Let's Encrypt ACME-клиентов​

ИнструментПреимуществаОграниченияКогда использовать
certbot (EFF, активно поддерживается)Плагины для Apache/Nginx, крупное сообщество, автоматическая настройкаЗависимость от Python, нет нативного Windows-клиентаStandalone Linux-серверы с веб-трафиком
acme.sh (активно поддерживается)Чистый POSIX shell, DNS API для 150+ провайдеров, нулевые зависимостиНет GUI, требует shell-доступCI/CD-пайплайны, DNS-01 автоматизация, системы без Python
cert-manager (CNCF, активно поддерживается)Нативная интеграция с Kubernetes через CRD, множественные issuerРаботает только в KubernetesКонтейнерная оркестрация, service mesh, mTLS-ротация

Типовая команда для автоматизации через certbot с DNS-challenge для Cloudflare:
Bash:
certbot certonly --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cf.ini \
  -d "*.example.com" -d "example.com" \
  --deploy-hook "systemctl reload nginx"
--deploy-hook перезагружает nginx после успешного обновления - сертификат подхватывается без простоя. Для acme.sh аналог: acme.sh --issue --dns dns_cf -d '*.example.com' с последующим --deploy-hook.

47-дневные сертификаты: почему ACME становится обязательным​

CA/Browser Forum последовательно сокращает максимальный срок действия публичных сертификатов. Let's Encrypt уже работает в режиме 90 дней. По CA/Browser Forum Ballot SC-081v3 (апрель 2025) максимальный срок поэтапно сокращается: 200 дней (март 2026), 100 дней (март 2027) и 47 дней (март 2029). При таких сроках ручное обновление в масштабе - операционное самоубийство.

Для организаций с сотнями или тысячами сертификатов ACME-протокол перестаёт быть оптимизацией - без него просто не выжить. По данным Palo Alto Networks, сертификаты, просроченные из-за ручного процесса, "чаще всего обнаруживаются в самый неподходящий момент - во время релизов, пикового трафика или incident response".

Финансовый контекст: для организаций под PCI DSS или регуляторными требованиями ЦБ РФ просроченный сертификат на платёжном шлюзе - это не просто простой, а compliance-инцидент с оборотными штрафами.

Threat model: атаки на ACME-инфраструктуру​

По анализу Palo Alto Networks, два основных вектора:
  1. Компрометация ACME-клиента - злоумышленник получает доступ к серверу с ACME-агентом и выпускает легитимный сертификат для подконтрольного домена через учётную запись организации. Detection: мониторинг списка доменов в ACME-ордерах (логи ACME-клиента), алерт на SAN, не входящие в утверждённый перечень. В SIEM - корреляция событий из логов certbot/acme.sh с базой разрешённых доменов.
  2. Компрометация DNS - перехват DNS-записей позволяет пройти DNS-01 challenge от имени жертвы. Detection: мониторинг изменений TXT-записей через passive DNS или аудит-лог DNS-провайдера. Алерт: появление _acme-challenge TXT-записи, не инициированной из CI/CD-пайплайна.
В обоих случаях CT-мониторинг работает как вторая линия обороны: даже если атакующий успешно выпустил сертификат, он появится в CT-логе и сработает алерт на неожиданный issuer или SAN. Эшелон: ACME-логи + CT-мониторинг + DNS-аудит.

HSM - аппаратный модуль безопасности в PKI-инфраструктуре​

1781686763983.webp

HSM (Hardware Security Module) - специализированное устройство для генерации, хранения и использования криптографических ключей в изолированном аппаратном периметре. Закрытый ключ никогда не покидает HSM в открытом виде - все криптографические операции (подпись, расшифровка) выполняются внутри модуля.

Soft-token vs HSM: когда нужен аппаратный модуль безопасности​

КритерийSoft-token (файловое хранилище)HSM
Защита от извлечения ключаЗависит от ОС (файловые ACL, DPAPI)Аппаратная - ключ не экспортируется
Производительность крипто-операцийCPU сервераАппаратный ускоритель (RSA, ECDSA)
СтоимостьНулеваяОт ~$650–950 (YubiHSM 2) до $50,000+ (Thales Luna Network)
Соответствие FIPS 140-2/3НетLevel 2/3+
Типичное применениеDev/staging, leaf-сертификатыRoot CA, Intermediate CA, подпись кода, PCI DSS

Правило простое: HSM обязателен для корневого CA (Root CA) и настоятельно рекомендован для промежуточного (Intermediate CA). Для конечных сертификатов (leaf) HSM избыточен - ключи генерируются на целевом сервере и защищаются средствами ОС.

Интеграция HSM через PKCS#11​

HSM подключается к CA-софту (EJBCA, Microsoft ADCS, step-ca) через стандарт PKCS#11. На практике это: установка драйвера от вендора HSM, указание пути к библиотеке (libCryptoki2_64.so для Thales Luna, yubihsm_pkcs11.so для YubiHSM 2 - не путать с libykcs11.so, это модуль для YubiKey PIV) в конфигурации CA. После этого все операции подписи прозрачно уходят на аппаратный модуль. Для OpenSSL интеграция идёт через engine или provider (OpenSSL 3.x).

Ограничение, о котором забывают до первого инцидента: HSM - это single point of failure. Для production-PKI нужен кластер HSM или схема с резервированием. Thales Luna поддерживает HA-группы нативно; для YubiHSM 2 кластеризация требует внешней оркестрации. На одном проекте мы потеряли четыре часа, когда единственный HSM ушёл в ребут по питанию, а промежуточный CA не мог подписать ни одного сертификата.

Чеклист: автоматизация жизненного цикла сертификатов​

Готовый чеклист для передачи инфраструктурной команде или включения в playbook. Покрывает полный цикл: инвентаризация, мониторинг, автоматизация, отзыв сертификатов через OCSP и CRL.
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Чеклист покрывает требования NIST SP 800-53 (семейства IA - Identification and Authentication, CM - Configuration Management) и NIST CSF v2.0 (PR.AA-01 - управление идентификаторами и учётными данными, ID.AM-01 - инвентаризация, DE.AE-01 - baseline сетевых операций).

За последние три года я внедрял подобную автоматизацию в четырёх организациях разного масштаба - от 200 до 15 000 сертификатов. Вывод один: проблема управления PKI на предприятии не техническая. certbot настраивается за 15 минут, CT-мониторинг через crt.sh - за час. Проблема организационная: сертификаты нередко оказываются ничьей землёй между DevOps, security и сетевой командой. Никто не владеет процессом, никто не отвечает за инвентарь.

Переход на 47-дневные сертификаты обнажит это в полной мере. Организации, которые воспринимают PKI-инфраструктуру как infrastructure-as-code с CI/CD-пайплайном для ротации, пройдут переход без простоев. Остальные будут тушить пожары по понедельникам.

И я замечаю закономерность: команды, у которых CT-мониторинг настроен и интегрирован в SIEM, почти всегда имеют и ACME-автоматизацию - потому что одно без другого создаёт ложное чувство безопасности. Вы видите, что чужой сертификат выпущен на ваш домен, но не можете оперативно выпустить замену, потому что процесс ручной. Или наоборот: автоматизация работает, но вы слепы к тому, что кто-то параллельно выпускает сертификаты от вашего имени. Если у вас другой стек детекции - на форуме codeby обсуждаем, как адаптировать алертинг на сертификатные аномалии под конкретные платформы.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab