Бесплатный SSL-сертификат Let's Encrypt давно стал стандартом: им защищено больше половины сайтов в интернете, а по уровню шифрования он ничем не отличается от платных DV-сертификатов. В этой инструкции разберём, как установить certbot на Ubuntu 24.04 LTS официальным способом — через snap, выпустить сертификат для Nginx или Apache за одну команду, получить wildcard для поддоменов и убедиться, что автопродление действительно работает. На всё уйдёт не больше 10 минут.
Как работает Let's Encrypt
Let's Encrypt — некоммерческий удостоверяющий центр, который выдаёт DV-сертификаты (Domain Validation) автоматически по протоколу ACME. Схема простая:
- Клиент (certbot) запрашивает сертификат для вашего домена.
- Центр сертификации проверяет, что вы контролируете домен: просит разместить проверочный файл на сервере (HTTP-01) или TXT-запись в DNS (DNS-01).
- После проверки выпускается сертификат сроком на 90 дней.
- Certbot автоматически продлевает его, когда до истечения остаётся 30 дней.
Короткий срок жизни — осознанное решение: даже если приватный ключ утечёт, окно для злоупотребления минимально. При настроенном автопродлении вы об этих 90 днях вообще не вспоминаете.
Что нужно перед установкой
- VPS с публичным IPv4 и root-доступом. Подойдёт любой тариф с выделенным IP — например, Start у Cheap-Host (6 vCPU, 8 ГБ RAM, NVMe) за 450 ₽/мес.
- Домен с A-записью, указывающей на IP сервера. DNS-изменения должны успеть распространиться — проверьте командой
dig +short example.com. Подробности — в статье о привязке домена к VPS. - Работающий веб-сервер на порту 80. Если его ещё нет — начните с установки Nginx на Ubuntu.
- Открытые порты 80 и 443:
ufw allow 80/tcp && ufw allow 443/tcp.
Установка certbot на Ubuntu 24.04
Разработчики certbot рекомендуют ставить его именно через snap — так вы всегда получаете свежую версию, независимо от репозиториев дистрибутива. В Ubuntu 24.04 snap уже предустановлен:
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
Если раньше certbot ставился через apt, сначала удалите старую версию, чтобы не было конфликтов:
apt remove certbot
Проверяем установку:
certbot --version
Выпуск сертификата для Nginx
Самый простой сценарий — плагин Nginx. Certbot сам найдёт server-блок по имени домена, выпустит сертификат, пропишет пути к нему в конфиг и предложит настроить редирект с HTTP на HTTPS:
certbot --nginx -d example.com -d www.example.com
При первом запуске certbot спросит e-mail для уведомлений об истечении сертификата и попросит принять условия использования. После завершения проверьте сайт: https://example.com должен открываться с замком в адресной строке.
Для Apache всё аналогично, меняется только плагин:
certbot --apache -d example.com -d www.example.com
Режим webroot: сертификат без правки конфига
Если вы не хотите, чтобы certbot трогал конфигурацию веб-сервера (например, конфиг генерируется деплоем), используйте режим certonly с webroot-проверкой:
certbot certonly --webroot -w /var/www/example.com -d example.com -d www.example.com
Certbot положит проверочный файл в каталог сайта, пройдёт валидацию и сохранит файлы сертификата, не меняя ничего в Nginx. Пути к ним стандартные:
/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem
Останется подключить их в server-блоке самостоятельно:
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
...
}
Wildcard-сертификат для поддоменов
Один сертификат вида *.example.com закрывает все поддомены сразу. Wildcard выпускается только через DNS-01-проверку — нужно подтвердить контроль над доменом TXT-записью:
certbot certonly --manual --preferred-challenges dns \
-d example.com -d "*.example.com"
Certbot покажет значение TXT-записи _acme-challenge.example.com — добавьте её в панели DNS-провайдера, дождитесь распространения (проверяется командой dig TXT _acme-challenge.example.com) и продолжите.
Важный нюанс: ручной режим --manual не умеет продлеваться автоматически — каждые 90 дней запись придётся обновлять руками. Для полного автомата используйте DNS-плагины certbot (cloudflare, route53 и другие), которые сами создают TXT-записи через API вашего DNS-провайдера.
Автопродление: как проверить, что оно работает
Snap-версия certbot настраивает продление сама — systemd-таймер дважды в сутки запускает проверку и продлевает сертификаты, которым осталось меньше 30 дней. Убедимся, что таймер на месте:
systemctl list-timers | grep certbot
И прогоним тестовое продление без реального выпуска:
certbot renew --dry-run
Если в выводе Congratulations, all simulated renewals succeeded — всё настроено. Посмотреть список сертификатов и даты истечения можно так:
certbot certificates
Если вы выпускали сертификат в режиме webroot и правили конфиг вручную, добавьте хук, чтобы Nginx подхватывал новый сертификат после продления:
certbot renew --dry-run --deploy-hook "systemctl reload nginx"
После успешного теста хук сохраняется в конфигурации продления, и дальше всё происходит без вашего участия. Плагины --nginx и --apache перезагружают веб-сервер сами — им хук не нужен.
Типичные ошибки и лимиты
| Ошибка | Причина | Решение |
|---|---|---|
| Timeout during connect | Порт 80 закрыт файрволом или занят | ufw allow 80/tcp, проверить ss -tlnp |
| DNS problem: NXDOMAIN | A-запись не создана или не распространилась | Проверить dig +short example.com, подождать TTL |
| too many certificates | Превышен лимит: 5 одинаковых сертификатов в неделю | Отлаживать с --dry-run, дождаться конца окна |
| unauthorized 403 | Проверочный файл отдаёт не тот сайт | Проверить server_name и корень в конфиге |
Главное правило: любые эксперименты с командами проводите с флагом --dry-run — тестовый контур Let's Encrypt не считает запросы в основные лимиты.
Что настроить после установки SSL
- Редирект на HTTPS — плагин certbot предлагает его сам; проверьте, что
http://-версия отдаёт 301. - HTTP/2 — раз уж есть TLS, включите современный протокол: это бесплатное ускорение. Как — в статье про HTTP/2 и HTTP/3 в Nginx.
- Оценка конфигурации — прогоните сайт через SSL Labs (ssllabs.com/ssltest): рейтинг A получается уже на дефолтных настройках certbot.
- Мониторинг срока — certbot шлёт письма об истечении, но не помешает и внешняя проверка доступности сайта.
Отметим и требование к площадке: сертификат привязан к домену, а не к серверу, поэтому при переезде на другой VPS его можно просто выпустить заново — это займёт минуту. На серверах Cheap-Host с NVMe и выдачей за 45–60 секунд весь путь «новый сервер → сайт с HTTPS» реально пройти за полчаса, включая установку WordPress.
FAQ
Let's Encrypt действительно бесплатный? В чём подвох?
Да, полностью бесплатный. Let's Encrypt — некоммерческий центр сертификации, который существует на спонсорские взносы. Подвоха нет: шифрование такое же, как у платных DV-сертификатов. Отличия — срок 90 дней вместо года и отсутствие сертификатов с проверкой организации (OV/EV).
Чем сертификат за 90 дней хуже платного на год?
Ничем, если настроено автопродление: certbot обновляет сертификат сам, и короткий срок жизни даже безопаснее — скомпрометированный ключ быстрее выйдет из оборота.
Можно ли получить сертификат без своего сервера?
Certbot должен подтвердить контроль над доменом — через файл на сервере (HTTP-01) или DNS-запись (DNS-01). Для HTTP-01 нужен сервер с публичным портом 80, поэтому проще всего выпускать сертификат прямо на VPS, где размещён сайт.
Что делать при ошибке rate limit?
Let's Encrypt ограничивает выпуск: 50 сертификатов на домен в неделю и 5 повторных выпусков одинакового набора имён. Отлаживайте команды с флагом --dry-run — тестовые запросы в лимиты не попадают, затем подождите окончания недельного окна.
Работает ли Let's Encrypt на NAT VPS без выделенного IP?
HTTP-01 требует доступный снаружи порт 80, которого на NAT VPS обычно нет. Используйте DNS-01-проверку — она подтверждает домен через TXT-запись и не требует открытых портов. Либо возьмите VPS с выделенным IPv4, например Start у Cheap-Host за 450 ₽/мес.
Вывод
Let's Encrypt закрывает вопрос SSL раз и навсегда: одна команда на установку certbot, одна — на выпуск сертификата, и системный таймер дальше продлевает его без вас. Платить за DV-сертификат в 2026 году просто незачем. Если для сайта с HTTPS вам нужен сервер — у Cheap-Host тариф Start от 450 ₽/мес: выделенный IPv4, NVMe, KVM, безлимитный трафик и выдача сервера за минуту.