Skip to content
EN
← Все статьи

Бесплатный SSL через Let's Encrypt: certbot за 10 минут

Коротко: Let's Encrypt — некоммерческий центр сертификации, выдающий SSL-сертификаты бесплатно: certbot по протоколу ACME сам подтверждает владение доменом, ставит и продлевает сертификат без человека. Ниже — как получить бесплатный SSL-сертификат за 10 минут, выпустить wildcard, настроить автопродление и обойти типовые ошибки.

Бесплатный сертификат Let's Encrypt с доверием браузеров
Let's Encrypt выдаёт бесплатные DV-сертификаты, которым доверяют все современные браузеры

Что такое Let's Encrypt и почему SSL-сертификат бесплатный

Let's Encrypt — проект некоммерческой Internet Security Research Group (ISRG) на взносы Mozilla, EFF, Cisco и других. Цель — полностью шифрованный веб, поэтому сертификат выдают бесплатно любому владельцу домена, без документов и менеджеров. Это DV-сертификат: подтверждает владение доменом, а не юрлицо — разница с OV и EV в статье о типах SSL-сертификатов; шифрование то же, что у платных.

Лимиты (актуальный список — на letsencrypt.org):

  • 50 сертификатов в неделю на домен.
  • 100 SAN-имён в сертификате.
  • 5 дублей одного набора имён в неделю.
  • 300 новых заказов за 3 часа на аккаунт.

Как работает ACME: почему выпуск автоматический

ACME (Automatic Certificate Management Environment, RFC 8555) — протокол общения клиента с центром сертификации: аккаунт, запрос сертификата и доказательство владения доменом одной из проверок:

  • HTTP-01 — CA запрашивает файл по http://домен/.well-known/acme-challenge/<токен>. Нужны публичный IP и открытый порт 80; wildcard так не выпустить.
  • DNS-01 — клиент публикует TXT-запись _acme-challenge.домен. Публичный IP не нужен; единственный способ для wildcard.
  • TLS-ALPN-01 — проверка в TLS-хендшейке на порту 443; используют прокси и балансировщики с закрытым портом 80.
Протокол ACME: автоматический выпуск сертификата
Протокол ACME: клиент подтверждает владение доменом и получает сертификат автоматически, без ручных шагов

Идея ACME — человек в выпуске не участвует. Если ради продления нужно идти в кабинет и скачивать архив руками, процесс построен неправильно и однажды сломается.

Установка certbot

Ubuntu/Debian:

sudo apt update
sudo apt install certbot python3-certbot-nginx
# или для Apache:
sudo apt install certbot python3-certbot-apache

CentOS/RHEL/AlmaLinux:

sudo dnf install certbot python3-certbot-nginx

Через snap (универсально):

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Проверка: certbot --version — 2.0+.

Как получить бесплатный SSL-сертификат для nginx

Проще всего — плагин nginx, он сам правит конфиг:

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

Certbot спросит email, согласие с условиями и выдаст сертификат. Файлы — в /etc/letsencrypt/live/example.com/, в конфиг добавятся строки:

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

Проверка: sudo nginx -t && sudo systemctl reload nginx — сайт откроется с замком. Для Apache: sudo certbot --apache -d example.com.

Ручной режим через webroot

Если certbot не должен трогать конфиг (свой шаблон, Ansible), возьмите только сертификат:

sudo certbot certonly --webroot -w /var/www/html \
    -d example.com -d www.example.com

Nginx должен отдавать /.well-known/acme-challenge/ из /var/www/html:

location /.well-known/acme-challenge/ {
    root /var/www/html;
}

Дальше пропишите пути в SSL-конфиге и перезагрузите nginx.

Standalone-режим (без веб-сервера)

Если веб-сервер ещё не настроен:

sudo systemctl stop nginx
sudo certbot certonly --standalone -d example.com
sudo systemctl start nginx

Certbot временно поднимет свой сервер на порту 80 — он должен быть свободен.

Wildcard-сертификат для поддоменов

Wildcard-сертификат *.example.com закрывает все поддомены первого уровня без перевыпуска под каждый новый. Выдаётся только через DNS-01: нужен контроль над DNS-зоной, HTTP-01 здесь не работает.

Wildcard-сертификат покрывает все поддомены
Wildcard-сертификат *.domain закрывает все поддомены, но выпускается только через DNS-01-проверку

Пример с Cloudflare:

# Установить плагин
sudo snap install certbot-dns-cloudflare

# Создать файл с API-токеном
sudo tee /etc/letsencrypt/cloudflare.ini <<EOF
dns_cloudflare_api_token = YOUR_TOKEN
EOF
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

# Выпустить wildcard
sudo certbot certonly \
    --dns-cloudflare \
    --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
    -d "*.example.com" -d example.com

Такие же плагины есть для Route 53, DigitalOcean, Google Cloud DNS. Без API остаётся --manual --preferred-challenges dns, но тогда и продление ручное. Когда wildcard оправдан — в статье о wildcard-сертификатах.

Альтернативные ACME-клиенты

Certbot — не единственный клиент:

КлиентЧто этоКогда выбирать
certbotОфициальный клиент EFF, плагины nginx/Apache и DNSКлассический VPS; максимум документации
acme.shShell-клиент без зависимостей, 150+ DNS-провайдеровКонтейнеры, роутеры, хостинг без root
CaddyВеб-сервер со встроенным ACMEНовые проекты: HTTPS «из коробки»
TraefikReverse-proxy для Docker/Kubernetes с ACMEDocker-стек и микросервисы

Как продлить SSL-сертификат и почему 90 дней

Сертификат живёт 90 дней: украденный ключ полезен максимум квартал, а короткий срок принуждает к автоматизации. Certbot продлевает сам — таймер systemd или cron запускает certbot renew дважды в сутки; реальное обновление — за 30 дней до истечения.

Автопродление сертификата каждые 90 дней
Срок жизни сертификата — 90 дней: продление обязан выполнять таймер или cron, а не человек по памяти
sudo systemctl status certbot.timer
# либо cron:
cat /etc/cron.d/certbot

Прогон вхолостую (staging, лимиты не тратятся):

sudo certbot renew --dry-run

Deploy-хук, чтобы nginx подхватил новый сертификат:

# /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
#!/bin/bash
systemctl reload nginx
chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Просроченный сертификат — самая частая причина «сайт не работает»: таймер тихо умирает после переезда или заполнения диска, ошибку первыми видят посетители.

Подстрахуйтесь: проверьте домен в SSL-чекере, поставьте напоминание и включите мониторинг срока действия. Срок уже вышел — план в статье про просроченный сертификат.

Типовые ошибки выпуска

  • «DNS problem: NXDOMAIN» — домен не резолвится: проверьте A/AAAA и опечатки в -d.
  • «Invalid response from http://...» — порт 80 закрыт или неверный webroot: /.well-known/acme-challenge/ должен отдаваться наружу.
  • «too many certificates already issued» — лимит 50/неделю; тестируйте со --test-cert.
  • «...for exact set of domains» — лимит 5 дублей в неделю; переиспользуйте выпущенный (certbot certificates).
  • «CAA record prevents issuance»dig example.com CAA: запись должна разрешать letsencrypt.org или отсутствовать.
  • DNS ещё не обновился — дождитесь TTL; для DNS-01 есть --dns-<плагин>-propagation-seconds.
  • «unable to get local issuer certificate» — неполная цепочка; разбор в статье про ошибку проверки сертификата.
  • Android < 7.1.1 не доверяет ISRG Root X1 — старым устройствам нужна cross-signed цепочка.

Работает ли Let's Encrypt в России

Работает: ограничений по географии нет, сертификаты для .ru/.рф и российских IP выпускаются и продлеваются штатно. Для госсистем есть альтернатива — НУЦ Минцифры: корень предустановлен в российских браузерах, в остальные добавляется вручную. Коммерческому сайту практичнее Let's Encrypt: доверие всех браузеров без действий пользователя.

Часто задаваемые вопросы

Подходит ли Let's Encrypt для коммерческих сайтов?

Да: его используют Cloudflare, WordPress.com, Mozilla. Ограничение одно — нет OV/EV с проверкой юрлица.

Почему 90 дней, а не год?

Короткий срок снижает ущерб от кражи ключа и вынуждает автоматизацию продления.

Как выпустить сертификат за NAT или без публичного IP?

Через DNS-01 — входящий HTTP не нужен, сервер может вообще не смотреть в интернет.

Работает ли Let's Encrypt на Windows Server?

Да, для IIS есть win-acme: тот же ACME, автовыпуск и продление.

Как проверить, что сертификат установлен правильно?

Проверьте домен внешним инструментом — см. как проверить SSL-сертификат.

Чеклист: от выпуска до автопродления

  • Домен резолвится (A/AAAA), порт 80 открыт.
  • certbot --version показывает 2.0+.
  • Сертификат выпущен (certbot --nginx / certonly --webroot); для поддоменов — wildcard через DNS-01.
  • nginx -t проходит, https открывается чисто.
  • sudo certbot renew --dry-run без ошибок.
  • systemctl status certbot.timer — таймер активен.
  • Deploy-хук перезагружает nginx после продления.
  • Мониторинг срока настроен, домен проверен в SSL-чекере.

Заключение

Let's Encrypt + certbot — самый быстрый путь к валидному SSL: 10 минут, бесплатно, автопродление. Прогоните renew --dry-run, проверьте таймер, добавьте контроль срока — и о сертификате можно забыть.

Документация: certbot.eff.org и letsencrypt.org/docs.

Проверьте ваш сайт прямо сейчас

Проверить SSL своего сайта →
Другие статьи: SSL/TLS
SSL/TLS
Сертификат Минцифры: как установить и вернуть доступ к банкам
31.08.2026 · 3 393 просм.
SSL/TLS
SSL Handshake Failed: причины ошибки и пошаговая диагностика
15.04.2026 · 2 133 просм.
SSL/TLS
ERR_CERT_AUTHORITY_INVALID: причины и как исправить
13.07.2026 · 1 100 просм.
SSL/TLS
Как проверить SSL-сертификат сайта — 3 способа за 2 минуты
12.04.2026 · 797 просм.