ACME (Automatic Certificate Management Environment) — открытый протокол автоматизации взаимодействия с центрами сертификации (CA). Разработан командой Let's Encrypt в 2015 году, стандартизован IETF в RFC 8555 (2019). Протокол позволяет клиентскому ПО автоматически запрашивать, продлевать и отзывать TLS-сертификаты без ручного участия человека, что особенно критично для сертификатов с коротким сроком действия (90 дней у Let's Encrypt и ZeroSSL).
Как работает ACME
ACME — REST-API поверх HTTPS с защитой через JWS (JSON Web Signatures). Типичный флоу:
- ACME-клиент создаёт аккаунт у CA (один раз, RSA или ECDSA ключ). После выдачи — SSL-сертификат доставляется клиенту в PEM-формате.
- Клиент запрашивает заказ (order) для домена.
- CA выдаёт challenge — задание для доказательства владения доменом.
- Клиент выполняет challenge.
- CA проверяет выполнение и выпускает сертификат.
Типы challenges (методов проверки):
- HTTP-01 — создать файл по пути
http://domain/.well-known/acme-challenge/TOKEN. CA делает HTTP-запрос и проверяет содержимое. Требует доступности порта 80. - DNS-01 — добавить TXT-запись
_acme-challenge.domainв DNS. Позволяет получать Wildcard-сертификаты. Требует DNS API или ручного управления. - TLS-ALPN-01 — специальный TLS-хендшейк на порту 443. Для балансировщиков и специализированных серверов.
Популярные ACME-клиенты: Certbot (EFF, Python, самый распространённый), acme.sh (shell-скрипт, широкая поддержка DNS API), Caddy (встроенный ACME-клиент, автоматическое продление), Traefik (встроенный для контейнерных сред), win-acme (Windows).
История
Let's Encrypt анонсирован в ноябре 2014 года и запустился в публичную бету в декабре 2015 года. ACME v1 (черновой стандарт) работал с 2015 по 2021 год. ACME v2 (RFC 8555) с поддержкой Wildcard запущен в марте 2018 года. Let's Encrypt отключил ACME v1 API в июне 2021 года. К 2024 году Let's Encrypt выпустил более 4 миллиардов сертификатов. Сертификаты ACME используют >350 млн доменов.
На что обращать внимание
Лимиты Let's Encrypt: 50 сертификатов на домен в неделю, 5 неудачных попыток валидации в час. При тестировании используйте staging-сервер (--staging в Certbot). Автоматическое продление: Certbot добавляет systemd-timer или cron-задачу автоматически. Certbot обновляет сертификат за 30 дней до истечения. Для Docker: используйте Traefik или nginx-proxy с acme-companion — они управляют сертификатами автоматически. При использовании CDN (Cloudflare) HTTPS-сертификат может управляться самим CDN без ACME на origin-сервере.
ACME и отзыв сертификатов
ACME поддерживает не только выпуск, но и отзыв сертификатов через команду certbot revoke. После отзыва CA обновляет OCSP-статус и CRL. Корневые промежуточные CA Let's Encrypt (R3, R10, R11, E5, E6) подписывают конечные сертификаты — их необходимо включать в fullchain.pem при установке на сервер. ACME-сервер Let's Encrypt предоставляет оба файла: cert.pem (только домен) и fullchain.pem (домен + промежуточные).