ACME (Automated Certificate Management Environment) — это протокол, который делает возможными бесплатные автоматизированные SSL-сертификаты. Именно так Let’s Encrypt — и ваш ACME-клиент (GetHTTPS, Certbot, acme.sh) — фактически взаимодействует с удостоверяющим центром.
Определенный в RFC 8555, ACME заменил старый ручной процесс (отправка CSR в CA по электронной почте, ожидание проверки человеком) полностью автоматизированным, криптографически защищенным протоколом.
Как работает ACME — 5 шагов
┌──────────┐ ┌──────────────┐
│ Client │ ① Account Registration │ CA Server │
│ (GetHTTPS)│ ──────────────────────────→ │ (Let's Encrypt)
│ │ ② New Order (domains) │ │
│ │ ──────────────────────────→ │ │
│ │ ③ Complete Challenges │ │
│ │ ←─────────────────────────── │ │
│ │ ──────────────────────────→ │ │
│ │ ④ Finalize (send CSR) │ │
│ │ ──────────────────────────→ │ │
│ │ ⑤ Download Certificate │ │
│ │ ←─────────────────────────── │ │
└──────────┘ └──────────────┘
Шаг 1: Регистрация аккаунта
Клиент генерирует пару ключей ACME-аккаунта и регистрирует открытый ключ в CA. Этот ключ идентифицирует вас в будущих запросах — каждое ACME-сообщение подписывается им.
Не требуется ни email, ни пароль, ни личная информация.
Шаг 2: Новый заказ
Клиент отправляет список доменных имен, для которых нужен сертификат. CA создает «заказ» и возвращает набор «авторизаций» — по одной на каждый домен — каждая с challenge-запросами для выполнения.
Шаг 3: Выполнение challenge-запросов
Для каждого домена клиент должен доказать контроль. CA предлагает типы challenge-запросов:
| Challenge | Как это работает | Случай использования |
|---|---|---|
| HTTP-01 | Разместите файл по адресу /.well-known/acme-challenge/ | Наиболее распространенный, простейший |
| DNS-01 | Добавьте TXT-запись к _acme-challenge.domain | Wildcard, нет порта 80 |
| TLS-ALPN-01 | Ответьте на порту 443 специальным TLS-сертификатом | Когда порт 80 заблокирован, нет доступа к DNS |
Клиент выполняет challenge, затем сообщает CA о проверке. CA проверяет со своих серверов — если challenge пройден, авторизация отмечается как действительная.
Шаг 4: Финализация (отправка CSR)
После авторизации всех доменов клиент отправляет CSR (Certificate Signing Request), содержащий открытый ключ для сертификата. CA подписывает его и создает сертификат.
Шаг 5: Загрузка сертификата
Клиент загружает подписанную цепочку сертификатов — ваш сертификат + промежуточный сертификат CA. Готово.
Модель безопасности ACME
Каждый ACME-запрос подписывается с помощью JWS (JSON Web Signature) ключом аккаунта. Это предотвращает:
- Атаки повторного воспроизведения — каждый запрос содержит уникальный nonce
- Подделку — подпись покрывает все тело запроса
- Имперсонацию — только владелец ключа аккаунта может делать запросы
Ключ аккаунта никогда не покидает клиент. В GetHTTPS он генерируется в вашем браузере через Web Crypto API.
Как GetHTTPS использует ACME
GetHTTPS реализует полный протокол ACME на JavaScript, выполняемом в вашем браузере:
- Ключ аккаунта генерируется с помощью
crypto.subtle.generateKey()(Web Crypto API) - Ключ сертификата генерируется таким же образом
- ACME-сообщения подписываются с помощью
crypto.subtle.sign() - CSR создается с помощью библиотеки pkijs
- Прямое HTTPS-взаимодействие с
acme-v02.api.letsencrypt.org
Без серверного прокси, без промежуточного ПО. Ваш браузер общается напрямую с ACME API Let’s Encrypt. Это уникально — большинство ACME-клиентов работают на сервере.
Сравнение ACME-клиентов
| Клиент | Где работает | ACME v2 | Автообновление | Язык |
|---|---|---|---|---|
| GetHTTPS | Браузер | ✅ | ❌ Вручную | JavaScript |
| Certbot | CLI сервера | ✅ | ✅ | Python |
| acme.sh | CLI сервера | ✅ | ✅ | Shell |
| Caddy | Веб-сервер | ✅ | ✅ | Go |
| Traefik | Обратный прокси | ✅ | ✅ | Go |
| Lego | CLI-библиотека | ✅ | ✅ | Go |
CA, поддерживающие ACME
ACME был создан Let’s Encrypt, но теперь это открытый стандарт, используемый несколькими CA:
| CA | URL директории ACME | Бесплатно? |
|---|---|---|
| Let’s Encrypt | acme-v02.api.letsencrypt.org/directory | ✅ |
| ZeroSSL | acme.zerossl.com/v2/DV90 | Ограниченно бесплатно |
| Buypass | api.buypass.com/acme/directory | ✅ |
| Google Trust Services | Через Google Cloud ACME | ✅ |
| DigiCert | Корпоративная ACME-конечная точка | Платно |
| Sectigo | Корпоративная ACME-конечная точка | Платно |
Часто задаваемые вопросы
ACME и Let’s Encrypt — это одно и то же?
Нет. ACME — это протокол (RFC 8555). Let’s Encrypt — это удостоверяющий центр, который использует ACME. Другие CA (ZeroSSL, Buypass, Google) также поддерживают ACME. Это похоже на HTTP и Google — HTTP — это протокол, Google — сервис, который его использует.
Могу ли я реализовать свой ACME-клиент?
Да. Протокол полностью описан в RFC 8555. GetHTTPS — пример реализации в браузере. Библиотеки существуют для большинства языков (certbot для Python, lego для Go, acme.js для JavaScript).
Что такое ACME v2?
ACME v2 — это текущая версия (RFC 8555), которая добавила поддержку wildcard-сертификатов и заменила черновой протокол v1. Все современные ACME-клиенты используют v2. Let’s Encrypt отключил конечную точку v1 в 2021 году.
Что произойдет, если сервер ACME недоступен?
Существующие сертификаты продолжают работать (они не обращаются к серверу). Вы просто не сможете выпустить или обновить сертификат до восстановления сервера. Let’s Encrypt имеет высокий аптайм и резервную инфраструктуру.