← Сеть: продвинутое
11 мин · средне · Урок 2 из 4

Сертификаты: Let's Encrypt и автообновление

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

Откуда берётся сертификат

В прошлом уроке сервер доказывал подлинность сертификатом, подписанным удостоверяющим центром (CA). Раньше такие сертификаты покупали за деньги и обновляли руками раз в год. Сейчас есть Let's Encrypt — CA, который выдаёт сертификаты бесплатно и автоматически.

Бесплатность поменяла подход. Сертификаты Let's Encrypt живут всего 90 дней, и обновлять их руками каждые три месяца нереально. Поэтому весь процесс автоматизируют.

Ручное обновление кончилось у всех

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

С какой датыМаксимальный срок
15 марта 2026200 дней
март 2027100 дней
март 202947 дней

Сертификат на 47 дней вручную не переоформишь: пропустил одно окно и сайт лежит. Так что автоматизация выдачи перестала быть удобством и стала обязательной, независимо от того, платный сертификат или нет.

ACME: как доказать, что домен твой

Прежде чем выдать сертификат на example.com, CA должен убедиться, что ты действительно управляешь этим доменом. Протокол проверки называется ACME. Самый частый способ — HTTP-01:

1. Клиент (certbot) просит сертификат на example.com.
2. Let's Encrypt даёт случайный токен.
3. Certbot кладёт токен по пути
   http://example.com/.well-known/acme-challenge/<токен>
4. Let's Encrypt сам ходит по этому адресу и проверяет токен.
5. Совпало — выдаёт сертификат.

Логика та же, что у проверки владения: только настоящий владелец домена может положить файл на сервер, на который этот домен указывает. Есть и DNS-01: вместо файла кладёшь TXT-запись в DNS. Он нужен для wildcard (*.example.com) и когда сервер недоступен снаружи по 80 порту.

certbot на практике

Получить сертификат для nginx одной командой:

certbot --nginx -d example.com -d www.example.com

Certbot пройдёт ACME-проверку, получит сертификат, пропишет пути в конфиг nginx и перезагрузит его. Файлы лягут в /etc/letsencrypt/live/example.com/:

$ ls /etc/letsencrypt/live/example.com/
cert.pem        # сертификат сервера
chain.pem       # промежуточный сертификат CA
fullchain.pem   # cert + chain вместе (его обычно и подключают)
privkey.pem     # приватный ключ

fullchain.pem отдают в ssl_certificate — он содержит и сам сертификат, и промежуточный, чтобы цепочка доверия не порвалась.

Автообновление обязательно

90 дней проходят быстро. Истёкший сертификат — это «ваше соединение не защищено» у всех посетителей сразу. Certbot ставит таймер (cron или systemd timer), который дважды в день проверяет, не пора ли обновлять, и обновляет заранее.

Проверить, что обновление вообще сработает, не трогая боевой сертификат:

certbot renew --dry-run

Эта команда прогоняет весь процесс в тестовом режиме. Если она прошла — автообновление настроено правильно, и сертификат не протухнет.

Что важно запомнить

Let's Encrypt выдаёт бесплатные сертификаты на 90 дней; владение доменом подтверждается через ACME (HTTP-01 кладёт файл, DNS-01 — TXT-запись).

Certbot получает сертификат и складывает в /etc/letsencrypt/live/<домен>/; в конфиг отдают fullchain.pem, чтобы цепочка была полной.

Короткий срок жизни делает автообновление обязательным; certbot renew --dry-run проверяет, что оно сработает.

В следующем уроке разберём reverse proxy, который этот сертификат и обслуживает, терминируя TLS перед приложением.

Прошли материал до конца? Отметьте урок пройденным.