Сертификаты: Let's Encrypt и автообновление
Откуда берутся бесплатные сертификаты, как работает ACME-проверка домена и почему автообновление обязательно.
Откуда берётся сертификат
В прошлом уроке сервер доказывал подлинность сертификатом, подписанным удостоверяющим центром (CA). Раньше такие сертификаты покупали за деньги и обновляли руками раз в год. Сейчас есть Let's Encrypt — CA, который выдаёт сертификаты бесплатно и автоматически.
Бесплатность поменяла подход. Сертификаты Let's Encrypt живут всего 90 дней, и обновлять их руками каждые три месяца нереально. Поэтому весь процесс автоматизируют.
Ручное обновление кончилось у всех
Короткий срок теперь не особенность одного CA. Отраслевые требования режут максимальный срок жизни публичного TLS-сертификата по расписанию:
| С какой даты | Максимальный срок |
|---|---|
| 15 марта 2026 | 200 дней |
| март 2027 | 100 дней |
| март 2029 | 47 дней |
Сертификат на 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 перед приложением.
Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс