# ACME для certbot, acme.sh і Caddy

> Як сервер сам випускає й оновлює сертифікат: ACME-сервер ZRAZU для платних сертифікатів і acme-dns для безкоштовних, зокрема wildcard.

URL: https://zrazu.com/docs/ssl-acme/

ACME — це протокол, яким certbot, acme.sh, lego, Caddy, Traefik і cert-manager самі випускають і продовжують сертифікати. У ZRAZU є два способи використати його. Обидва налаштовуються в кабінеті: «SSL-сертифікати» → «ACME для certbot» ([кабінет](https://vse.zrazu.com/ssl/acme/)). Створювати записи можуть власник, адміністратор і технік.

| Що потрібно | Який спосіб |
| --- | --- |
| Платний сертифікат з підписки ZRAZU, що оновлюється сам | ACME-сервер ZRAZU |
| Безкоштовний Let’s Encrypt, особливо wildcard | acme-dns |
| Свій хостинг без certbot | [Посилання для сервера](https://zrazu.com/docs/ssl-auto.md) |

Закритий ключ в обох випадках лишається на вашому сервері.

## ACME-сервер ZRAZU

Це наш сервер сертифікатів для платної підписки. Адреса (Directory): `https://api.zrazu.com/acme/directory`. Клієнт реєструється на ньому через прив’язку EAB.

1. У блоці «Свій ACME-сервер для платних сертифікатів» введіть назву прив’язки, наприклад ім’я сервера, і натисніть «Створити».
2. Збережіть показані Directory, `kid` і ключ HMAC. Ключ показується один раз, його ніхто не відновить.
3. У майстрі «Налаштування під ваш сервер» оберіть програму (nginx з certbot, acme.sh, Caddy, Traefik, Kubernetes cert-manager, win-acme для IIS) і домен. Кабінет покаже готові команди.
4. Зареєструйте клієнт протягом 7 днів, інакше прив’язка втратить чинність. Для certbot це виглядає так:

```
certbot register --server https://api.zrazu.com/acme/directory \
  --eab-kid <kid> --eab-hmac-key <ключ HMAC> --agree-tos -m you@example.com
```

Прив’язка буває особиста (діє, поки ви в організації та можете перевипускати сертифікати) і організації (для сервера, що переживе зміни в команді; створюють власник і адміністратор). Вимкнути прив’язку можна в списку: випущені сертифікати лишаються.

Як ACME-сервер поводиться:

- Спершу шукає оплачену чинну підписку, імена якої покривають замовлення. Перевипуск у межах підписки без доплати.
- Першу видачу підписки треба зробити в кабінеті: перевипускати ще нічого, а купувати двічі не можна.
- Якщо підписки немає, certbot може купити сертифікат із балансу, але лише коли ви ввімкнули «Купувати нові сертифікати з балансу» в прив’язці та коштів вистачає. У борг ніколи. Про кожну купівлю ми пишемо власникам.
- Домен має бути на наших серверах імен: запис перевірки ми ставимо в зоні самі. Видача займає до кількох хвилин.
- Відкликання через ACME можливе лише з причиною keyCompromise та підписом ключем самого сертифіката. В інших випадках відкликайте в кабінеті ([Перевипуск і відкликання](https://zrazu.com/docs/ssl-reissue.md)).

Про кожен перевипуск, купівлю й відкликання ми надсилаємо лист власникам.

## acme-dns: безкоштовні сертифікати через DNS

Підходить для Let’s Encrypt через certbot, acme.sh, lego і Caddy зі звичайним плагіном acme-dns. Один запис покриває і домен, і `*.домен`, тож це шлях для wildcard. Ключа від усієї зони не потрібно.

1. У блоці «Новий обліковий запис» введіть домен. За бажання вкажіть дозволені IP-адреси чи мережі через кому.
2. Натисніть «Створити» і збережіть пароль. Його показують один раз.
3. Додайте CNAME `_acme-challenge.домен`, що веде в зону ZRAZU. Якщо домен на наших серверах імен або у вашому Cloudflare з ключем на правки, натисніть «Додати CNAME» (чи «Поставити CNAME у Cloudflare»). В іншому випадку додайте запис у свого DNS-провайдера.
4. Скопіюйте з кабінету файл `acmedns.json` або команди для вашого клієнта й випустіть сертифікат.

Пароль уміє тільки ставити TXT-перевірку для свого імені. Змінити зону, домен чи баланс він не може. Запис без жодного оновлення за 30 днів або без оновлень понад рік ми видаляємо самі разом зі своїм CNAME.

Якщо домен за проксі Cloudflare (помаранчева хмарка), відвідувач бачить сертифікат Cloudflare, а ваш сертифікат потрібен для сервера сайту (режим Full strict).

## Якщо не вийшло

- **ACME на цьому середовищі вимкнено.** У кабінеті такий напис, якщо функція тимчасово недоступна. Напишіть у підтримку.
- **«дочекайтеся першого випуску».** Підписку ще не випускали: зробіть перший випуск у кабінеті.
- **Видача зависла.** Перевірте, що домен на серверах імен ZRAZU.
- **Купівля не спрацювала.** Перевірте, що купівлю ввімкнено в прив’язці, на балансі вистачає коштів, а у власника прив’язки є право оплати.
- **Прив’язка «минула, не використана».** Ключ HMAC діє 7 днів: створіть нову прив’язку.
- **Wildcard через HTTP не вийде.** Для `*.` використайте перевірку DNS-01 і acme-dns: для acme.sh це `--dns dns_acmedns`.
- **Пароль acme-dns загубили.** Видаліть обліковий запис і створіть новий.
