К основному содержимому

Wildcard SSL через Certbot: сертификат для всех субдоменов

VDS / VPS · 25.02.2026 · 6 мин чтения
Иллюстрация к статье «Wildcard SSL через Certbot: сертификат для всех субдоменов»

Обычный Let's Encrypt сертификат выдаётся на конкретный домен. Wildcard-сертификат (*.yourdomain.com) покрывает любое количество субдоменов — удобно для многосайтовых проектов.

Установка Certbot

sudo apt update && sudo apt install -y certbot python3-certbot-dns-cloudflare

Certbot + Cloudflare DNS (рекомендуется)

# Создать API токен Cloudflare:
# Dashboard → Profile → API Tokens → Create Token
# Permissions: Zone.DNS → Edit

# Сохранить токен
sudo mkdir -p /etc/letsencrypt
sudo nano /etc/letsencrypt/cloudflare.ini
dns_cloudflare_api_token = ВАШ_CLOUDFLARE_TOKEN
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

# Получить wildcard сертификат
sudo certbot certonly   --dns-cloudflare   --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini   -d "yourdomain.com"   -d "*.yourdomain.com"   --agree-tos --non-interactive

Без Cloudflare: ручной DNS challenge

sudo certbot certonly --manual   --preferred-challenges dns   -d "*.yourdomain.com" -d "yourdomain.com"

# Certbot выдаст TXT-запись для DNS:
# Добавьте: _acme-challenge.yourdomain.com TXT "xxx..."
# Подождите 60 сек и нажмите Enter

Подключение к Nginx

ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

Автопродление

sudo certbot renew --dry-run
# Добавить в cron:
0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
✅ Wildcard-сертификат Let's Encrypt выдаётся на 90 дней и автоматически обновляется через certbot renew.

Разбор типичных ошибок

Ошибка DNS problem: NXDOMAIN looking up TXT record при ручном DNS challenge означает, что TXT-запись _acme-challenge ещё не видна публичным DNS-серверам — либо она добавлена с опечаткой, либо не прошло достаточно времени на распространение.

Domain: yourdomain.com
Type:   dns
Detail: DNS problem: NXDOMAIN looking up TXT record for _acme-challenge.yourdomain.com

Проверьте запись независимо от certbot, прежде чем нажимать Enter: dig TXT _acme-challenge.yourdomain.com +short с другого сервера или через публичный резолвер вроде 8.8.8.8. Если запись не видна снаружи спустя несколько минут — проблема в самой DNS-панели, а не в тайминге.

Ошибка Error creating new order :: too many failed authorizations у Let's Encrypt появляется после нескольких неудачных попыток подряд для одного домена и блокирует новые попытки на час. Для отладки DNS-валидации без траты дневного лимита используйте флаг --staging, который выдаёт тестовые сертификаты без ограничений боевого окружения.

Сравнение DNS-плагинов Certbot

ПлагинАвтоматизацияКогда использовать
dns-cloudflareПолная, через API-токенDNS уже на Cloudflare
dns-route53Полная, через IAM-праваDNS в AWS Route 53
--manualНет, ручная вставка TXT-записиЛюбой DNS-провайдер без готового плагина

Без API-плагина автопродление wildcard-сертификата не сработает: certbot не может сам вставить новую TXT-запись при --manual, поэтому каждые 90 дней придётся повторять процесс руками, если DNS-провайдер не поддерживается напрямую.

Когда wildcard-сертификат не нужен

  • У вас один-два поддомена, а не десятки — проще и надёжнее выпустить обычный сертификат на конкретные имена через Certbot с HTTP-валидацией, без возни с DNS API.
  • DNS управляется через панель без API или через сторонний регистратор без поддержки в certbot — тогда каждое продление требует ручного вмешательства, и обычный сертификат с автопродлением через HTTP надёжнее.
  • Поддомены выпускаются динамически под каждого клиента (SaaS с произвольными именами) — DNS-01 для wildcard не подходит для доменов третьего уровня, создаваемых на лету; для этого случая нужна отдельная автоматизация выпуска сертификатов через ACME API при регистрации клиента.

Проверка результата

  1. Проверьте, что сертификат реально wildcard: openssl x509 -in /etc/letsencrypt/live/yourdomain.com/cert.pem -noout -text | grep DNS должен показать и yourdomain.com, и *.yourdomain.com.
  2. Откройте любой случайный поддомен в браузере, который раньше не существовал в конфиге Nginx явно, — замок должен быть закрытым без предупреждений.
  3. Проверьте автопродление сухим прогоном: certbot renew --dry-run должен завершиться без ошибок DNS-плагина.
  4. Если используете --manual, отметьте в календаре дату следующего продления за неделю до истечения — автоматика здесь не сработает сама.

Обычный (не wildcard) выпуск и автопродление сертификата через Nginx-плагин разобраны в статье про Certbot и Nginx. Если сайт стоит за Cloudflare, сначала посмотрите статью про режимы SSL/TLS в Cloudflare — она влияет на выбор способа валидации.

Метод 1: Ручной DNS challenge

sudo certbot certonly   --manual   --preferred-challenges dns   -d "*.example.com"   -d "example.com"

# Certbot попросит добавить TXT-запись:
# _acme-challenge.example.com → указанное значение
# 
# Добавьте запись в DNS и дождитесь propagation (1–5 мин)
# Затем нажмите Enter

Метод 2: Автоматический через Cloudflare API

# Создать файл с токеном Cloudflare
sudo nano /etc/letsencrypt/cloudflare.ini
# Содержимое:
dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN

sudo chmod 600 /etc/letsencrypt/cloudflare.ini

# Получить сертификат
sudo certbot certonly   --dns-cloudflare   --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini   -d "*.example.com"   -d "example.com"   --email admin@example.com   --agree-tos   --non-interactive
✅ С Cloudflare API автопродление работает полностью автоматически — certbot timer в systemd обновит сертификат за 30 дней до истечения.

Настройка Nginx с wildcard SSL

server {
    listen 443 ssl http2;
    server_name *.example.com 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 certbot certificates

# Тест автообновления
sudo certbot renew --dry-run

# Принудительное обновление
sudo certbot renew --force-renewal
⚠️ Cloudflare API токен должен иметь только разрешение Zone → DNS → Edit для вашего домена. Не используйте Global API Key — он даёт полный доступ к аккаунту.

Частые вопросы

Можно ли получить wildcard-сертификат через обычную HTTP-валидацию, без обращения к DNS?

Нет, протокол ACME требует именно DNS-валидацию для wildcard-сертификатов — HTTP-01 challenge подтверждает владение конкретным именем через файл на веб-сервере, а для произвольного поддомена такой файл физически невозможно разместить заранее. Поэтому Certbot при выпуске wildcard-сертификата всегда запрашивает TXT-запись в DNS, независимо от того, автоматизирован процесс через API или выполняется вручную.

Покрывает ли сертификат *.domain.com сам голый домен domain.com без поддомена?

Нет, запись wildcard покрывает только поддомены первого уровня и не включает сам голый домен автоматически — её нужно указывать отдельным именем при выпуске сертификата, как показано в примерах команд certbot с двумя флагами -d. Если забыть добавить голый домен отдельно, браузер будет показывать предупреждение именно при заходе без поддомена.

Что произойдёт, если сертификат истечёт, а автопродление не было настроено?

Браузеры посетителей начнут показывать предупреждение о недействительном сертификате на всех поддоменах сразу, а не только на одном сайте — ведь один wildcard-сертификат обслуживает их все одновременно. Избежать этого помогает именно настройка автопродления через DNS API, а при ручном способе дата следующего продления должна быть отмечена заранее и не оставлена на последний момент.

Можно ли использовать один и тот же wildcard-сертификат сразу на нескольких серверах?

Да, один и тот же файл сертификата и приватного ключа можно скопировать и использовать на нескольких серверах одновременно — ограничений по числу машин для одного сертификата нет. Важно только синхронизировать продление: если сертификат обновляется на одном сервере, обновлённые файлы нужно распространить на остальные, иначе часть серверов продолжит отдавать устаревший сертификат.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке