До 10%Рекомендуйте нас и получайте процент за каждого приведённого клиента

Wildcard SSL и DNS для региональных поддоменов: техническая настройка шаг за шагом

Wildcard SSL-сертификат и DNS-записи для региональных поддоменов сайта на 1С-Битрикс: схема DNS-01 challenge и конфигурация веб-сервера

Сайт запускает региональные поддомены — moskva.example.ru, spb.example.ru, ekb.example.ru — и с каждым новым городом повторяется одна и та же рутина: заказать SSL-сертификат, дождаться выпуска, прописать в конфиге веб-сервера, добавить DNS-запись. При пяти городах это терпимо, при пятидесяти — превращается в узкое место, которое тормозит запуск каждого нового региона на дни, а иногда провоцирует ошибки: забытую DNS-запись, просроченный сертификат на одном из поддоменов, разъехавшийся конфиг vhost.

Технически задача решается один раз: wildcard SSL-сертификат на *.example.ru и wildcard DNS-запись, после чего добавление нового города — это одна строка в конфиге веб-сервера, без повторного выпуска сертификата и без правки DNS. Ниже — пошаговая техническая настройка от DNS до автопродления, применимо к серверу с 1С-Битрикс на Nginx или Apache. Материал опирается на нашу практику системы региональных поддоменов на 1С-Битрикс и настройки Nginx/Apache под Битрикс.

Коротко

  • Wildcard-сертификат для *.example.ru можно получить только через DNS-01 challenge — HTTP-01 для него не подходит технически.
  • Wildcard-запись * A ... в DNS-зоне избавляет от добавления отдельной A/CNAME-записи на каждый новый город.
  • Сертификат *.example.ru не покрывает сам example.ru — апекс-домен нужно добавить в SAN сертификата отдельно.
  • Let's Encrypt выдаёт сертификаты на 90 дней — без автоматического продления через DNS API это гарантированный инцидент.
  • Веб-сервер конфигурируется один раз с одним server-блоком на wildcard-имя — новый город не требует правки vhost.

Задача: один сертификат на все города вместо десятков

Прежде чем переходить к настройке, стоит явно сформулировать, какую проблему решает wildcard-подход. Без него для каждого регионального поддомена нужен собственный сертификат (или все поддомены нужно перечислять как SAN в одном мультидоменном сертификате и перевыпускать его при каждом добавлении города), собственная DNS-запись и, если поддомены обслуживаются разными server-блоками — правка конфигурации веб-сервера.

При десятке городов это управляемо вручную. При масштабировании до полусотни и больше регионов — а именно к этому стремится бизнес с мультирегиональной структурой на 1С-Битрикс — ручной процесс начинает давать сбои: то забыли добавить DNS-запись перед запуском, то сертификат для одного города просрочен, потому что его выпускали отдельно и не включили в общий процесс продления. Wildcard-сертификат и wildcard DNS-запись переносят всю эту инфраструктурную работу с «на каждый город» на «один раз на весь домен».

Важно: wildcard-подход — это инфраструктурное решение уровня DNS и веб-сервера. Он не заменяет логику самого сайта на 1С-Битрикс, которая определяет, какой регион обслуживает конкретный поддомен (об этом — в разделе «Реализация в 1С-Битрикс» ниже).

Wildcard DNS-запись: A и CNAME для *.example.ru

Первый шаг — не сертификат, а DNS: без записи, которая резолвит региональные поддомены на IP-адрес сервера, ни один способ выпуска сертификата не имеет смысла — браузер посетителя просто не найдёт сервер, к которому предъявлять этот сертификат.

Wildcard DNS-запись создаётся в панели управления DNS-зоной домена одной из двух типовых форм:

Тип записиПримерКогда уместна
Wildcard A-запись* A 203.0.113.10Все поддомены ведут на один и тот же IP-адрес сервера
Wildcard CNAME-запись* CNAME example.ru.Поддомены должны следовать за основным доменом (например, при смене IP или использовании CDN)

Символ * в имени записи означает «любое имя первого уровня перед основным доменом», то есть запись * A 203.0.113.10 в зоне example.ru автоматически резолвит moskva.example.ru, spb.example.ru, любой-новый-город.example.ru — без необходимости создавать отдельную запись под каждое имя. Важное ограничение: wildcard-запись покрывает только один уровень вложенности — она резолвит moskva.example.ru, но не test.moskva.example.ru (для второго уровня понадобится собственная wildcard-запись вида *.moskva).

Одна запись — любое число поддоменов DNS-зона example.ru * A 203.0.113.10 moskva.example.ru spb.example.ru ekb.example.ru новый город — без правки DNS Сервер: 203.0.113.10
Схема: одна wildcard-запись в DNS-зоне резолвит любое имя первого уровня перед доменом, включая ещё не созданные — новый город появляется без изменений в DNS.

Почему wildcard-сертификат требует именно DNS-01 challenge

Чтобы удостовериться, что вы действительно владеете доменом, прежде чем выпустить сертификат, центр сертификации (Let's Encrypt и аналогичные) проводит challenge — проверку владения. Для обычного (не wildcard) сертификата на конкретное имя чаще всего используется HTTP-01 challenge: ACME-клиент размещает специальный файл по определённому пути на сайте, и центр сертификации обращается по HTTP именно к этому имени, чтобы файл найти.

Для wildcard-сертификата этот механизм принципиально не работает: HTTP-01 подтверждает владение одним конкретным именем, а wildcard-сертификат покрывает потенциально бесконечное множество ещё не существующих имён (любой будущий город). Проверить каждое из них по HTTP физически невозможно — часть из них ещё не существует на момент выпуска сертификата. Поэтому центры сертификации требуют для wildcard DNS-01 challenge: ACME-клиент создаёт TXT-запись определённого вида (_acme-challenge.example.ru) в DNS-зоне домена, а центр сертификации проверяет её через DNS. Успешное создание такой записи доказывает контроль над всей DNS-зоной целиком — а значит, и над любым её поддоменом, включая ещё не созданные.

HTTP-01 vs DNS-01: почему wildcard требует DNS HTTP-01 challenge Файл на site.ru/.well-known/ проверяется по HTTP Подтверждает: одно имя Не годится для wildcard — будущие поддомены не проверить DNS-01 challenge TXT _acme-challenge.example.ru проверяется через DNS Подтверждает: всю зону Подходит для wildcard — любой будущий поддомен покрыт
Схема: HTTP-01 доказывает владение одним конкретным адресом, DNS-01 доказывает владение всей DNS-зоной — только второе достаточно для выпуска сертификата на неограниченный набор поддоменов.

Выпуск wildcard-сертификата через certbot пошагово

На практике для Let's Encrypt чаще всего используется клиент certbot с плагином под конкретного DNS-провайдера (или универсальный ручной режим, если API провайдера не поддерживается плагином напрямую). Общая последовательность одинакова независимо от конкретного провайдера:

  1. Установите certbot и DNS-плагин под вашего провайдера. Для популярных DNS-хостингов существуют готовые плагины (certbot-dns-*), которые умеют создавать TXT-записи через API провайдера автоматически.
  2. Получите API-ключ DNS-провайдера. Плагину нужны права на создание/удаление TXT-записей в зоне — обычно отдельный API-токен с ограниченными правами, а не полный доступ к аккаунту.
  3. Запустите выпуск сертификата с указанием wildcard-имени и апекс-домена. Команда вида certbot certonly --dns-provider -d example.ru -d *.example.ru — важно указать оба имени явно, апекс-домен не подставляется автоматически.
  4. Дождитесь прохождения DNS-01 challenge. Плагин создаёт TXT-запись, центр сертификации проверяет её (с учётом пропагации DNS, см. раздел про типичные ловушки), затем плагин удаляет временную запись.
  5. Проверьте выпущенные файлы сертификата. Полная цепочка (fullchain.pem) и приватный ключ (privkey.pem) появляются в стандартной директории certbot, готовые к подключению в конфиг веб-сервера.
  6. Настройте автопродление до того, как перейдёте к следующему шагу. Это не «сделаем потом» — без автопродления вся конструкция рассчитана только на первые 90 дней (подробнее — в разделе про автопродление).
Важно: если DNS-провайдер не имеет готового плагина certbot, можно использовать ручной режим --manual с ручным добавлением TXT-записи по инструкции при каждом выпуске — но тогда автоматическое продление без участия человека невозможно, и придётся либо переходить на API-совместимого провайдера, либо строить собственный скрипт-обёртку над API провайдера.

Конфигурация веб-сервера под все поддомены сразу

После получения сертификата второй шаг — настроить веб-сервер так, чтобы он принимал соединения по HTTPS для любого регионального поддомена, используя один и тот же сертификат, и передавал запрос в 1С-Битрикс с сохранением исходного имени хоста (для дальнейшего определения региона на уровне приложения).

В Nginx это типично решается одним server-блоком с wildcard-именем сервера вместо перечисления каждого города отдельно:

ДирективаЗначениеНазначение
server_name*.example.ru example.ruОдин блок обслуживает все поддомены и апекс-домен
ssl_certificateпуть к fullchain.pemПолная цепочка сертификата, единая для всех поддоменов
ssl_certificate_keyпуть к privkey.pemПриватный ключ сертификата
proxy_set_header Host$hostПередаёт исходное имя поддомена в приложение Битрикс для определения региона

Для Apache аналогичная логика реализуется через ServerAlias *.example.ru в связке с VirtualHost, использующим тот же сертификат. Ключевой принцип один и тот же независимо от веб-сервера: конфигурация не должна перечислять города по одному — добавление нового региона должно требовать изменений только на уровне данных 1С-Битрикс (запись о новом городе), а не в конфиге веб-сервера или в сертификате.

Автопродление: cron, systemd timer и DNS API

Сертификаты Let's Encrypt действуют 90 дней — короткий срок выбран намеренно, чтобы вынудить автоматизацию продления, а не ручное разовое действие раз в год, которое легко забыть. Автопродление реализуется одним из двух штатных механизмов планировщика на сервере:

Критичное условие для wildcard-сертификатов: продление должно проходить тот же DNS-01 challenge, что и первичный выпуск, а значит без доступа certbot к API DNS-провайдера автопродление технически невозможно — challenge пришлось бы проходить вручную каждые 60–90 дней (продление обычно запускают заранее, не дожидаясь истечения срока). Именно поэтому выбор DNS-провайдера с поддерживаемым certbot-плагином — не второстепенная деталь, а условие, без которого вся схема с wildcard-сертификатом не автоматизируется до конца.

Планировщик (cron/timer) certbot renew + DNS-плагин API DNS- провайдера Веб-сервер reload
Схема: без ручного участия планировщик запускает certbot, тот через API DNS-провайдера проходит DNS-01 challenge заново и обновляет сертификат, веб-сервер подхватывает новый файл.

Реализация в 1С-Битрикс: сайты и обработка поддоменов

Wildcard SSL и DNS решают транспортный уровень — «как соединение вообще доходит до сервера по HTTPS». Дальше 1С-Битрикс должен понять, какой регион обслуживать по имени хоста запроса, и это уже уровень модуля «Многосайтовость»: каждый региональный поддомен привязывается к своему SITE_ID (или к одному сайту с определением региона по домену через дополнительную таблицу соответствия), чтобы вывести нужные цены, контакты филиала и локальный контент.

Настройки → Система → Сайты → «Москва» Домен (поддомен) moskva.example.ru SITE_ID msk SSL-сертификат Wildcard *.example.ru — действителен Срок действия сертификата До 08.12.2026 · автопродление активно · последняя проверка сегодня
Схема: региональный сайт в админке привязывается к своему поддомену; статус общего wildcard-сертификата удобно выводить рядом как единую точку контроля для всех городов сразу.

Типичные ловушки: apex-домен, опечатки, propagation delay

Даже при технически верной схеме на практике встречается несколько повторяющихся проблем, специфичных именно для wildcard-конфигурации:

Мониторинг срока действия сертификата

Автопродление снижает риск, но не исключает его полностью: сбой cron-задачи, истёкший API-ключ DNS-провайдера, изменение политики центра сертификации — любая из этих причин может остановить автопродление незаметно, и о проблеме станет известно только когда сертификат уже просрочен и все поддомены одновременно показывают пользователям предупреждение браузера.

Способ мониторингаЧто даёт
Внешний мониторинг срока действия SSLНезависимая от сервера проверка «снаружи», не зависит от исправности cron на самом сервере
Уведомления Let's Encrypt на e-mailШтатное письмо-предупреждение за 20 и 7 дней до истечения непродлённого сертификата
Лог certbot renewПоказывает, реально ли отработало последнее плановое продление и с каким результатом
Мини-FAQ. Достаточно ли настроить cron-задачу один раз и больше не проверять? Нет — cron-задача может годами молча падать (сменился API-ключ, изменился путь к скрипту после обновления системы), и без независимого мониторинга срока действия сертификата об этом узнают только по жалобе пользователей на «небезопасное соединение».

Безопасность: приватный ключ wildcard-сертификата

У wildcard-сертификата есть оборотная сторона, о которой часто забывают: компрометация одного приватного ключа означает компрометацию TLS для всех поддоменов сразу, а не одного города. Это следствие самой природы wildcard-сертификата — один ключ обслуживает неограниченное число имён.

Частые ошибки настройки

Чек-лист внедрения

  1. Wildcard DNS-запись настроена. * A или * CNAME резолвит любой будущий поддомен без ручных правок.
  2. Сертификат выпущен с апекс-доменом в SAN. Покрыты и *.example.ru, и example.ru.
  3. DNS-01 challenge проходит через API-плагин, а не вручную. Автопродление технически возможно без участия человека.
  4. Веб-сервер настроен одним wildcard server-блоком. Новый город не требует правки vhost/конфига.
  5. Cron/systemd timer автопродления работает и проверен. Плановый прогон certbot renew отработал успешно хотя бы раз.
  6. Настроен независимый мониторинг срока действия. Уведомление приходит до истечения, а не после.
  7. Приватный ключ защищён. Права доступа ограничены, план на случай компрометации существует.
  8. Первый новый город протестирован end-to-end. DNS, сертификат, редирект HTTPS и привязка SITE_ID в Битрикс проверены на реальном поддомене, а не только «в теории».

Вывод

Wildcard SSL и DNS переводят добавление регионального поддомена из инфраструктурной задачи «на каждый город заново» в задачу «один раз настроили — дальше только данные». Ключевые технические решения — wildcard-запись в DNS, выпуск сертификата через DNS-01 challenge с API-доступом к DNS-провайдеру и один server-блок веб-сервера на все поддомена — принимаются один раз, но требуют аккуратности: забытый апекс-домен, невозможность автопродления или незащищённый приватный ключ обходятся дороже, чем время, потраченное на правильную настройку с первого раза.

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

Почему wildcard-сертификат для *.example.ru нельзя получить через обычный HTTP-01 challenge?

HTTP-01 challenge подтверждает владение доменом, размещая файл по конкретному URL на конкретном хосте — это работает для одного известного имени, но не может доказать владение сразу всеми возможными поддоменами. Wildcard-сертификаты центры сертификации выдают только через DNS-01 challenge: нужно создать TXT-запись в DNS зоны домена, что доказывает контроль над всей зоной целиком, а значит и над любым её поддоменом.

Покрывает ли сертификат для *.example.ru сам apex-домен example.ru?

Нет. Wildcard-шаблон *.example.ru покрывает только поддомены первого уровня (moskva.example.ru, spb.example.ru), но не сам example.ru и не поддомены второго уровня вида a.b.example.ru. Апекс-домен нужно явно добавить в тот же сертификат как дополнительное Subject Alternative Name (SAN) при выпуске.

Нужна ли wildcard DNS-запись, если поддоменов пока всего 5–10?

Технически можно обойтись явными A/CNAME-записями на каждый поддомен — это тоже рабочий вариант при небольшом и редко меняющемся списке городов. Wildcard-запись (* A ...) оправдана, когда список городов растёт часто и без неё пришлось бы каждый раз вручную добавлять DNS-запись перед запуском нового города — она снимает эту ручную операцию.

Как часто нужно продлевать сертификат Let’s Encrypt и что будет, если пропустить продление?

Сертификаты Let’s Encrypt действуют 90 дней — короткий срок закладывался разработчиками намеренно, чтобы автопродление было нормой, а не исключением. Если продление не сработало и срок истёк, браузеры посетителей всех поддоменов начнут показывать предупреждение о недействительном сертификате — это полноценный инцидент, который нужно мониторить отдельно, а не полагаться только на факт настройки cron-задачи в прошлом.

Может ли DNS-провайдер сам обновлять TXT-запись для автопродления без участия человека?

Да, если DNS-провайдер поддерживает API управления записями (большинство современных регистраторов и DNS-хостингов это умеют) — тогда ACME-клиент (certbot и аналоги с DNS-плагином) создаёт и удаляет нужную TXT-запись автоматически при каждом продлении через API, без ручного вмешательства. Без API-доступа DNS-01 challenge пришлось бы проходить вручную каждые 60–90 дней, что на практике почти всегда приводит к пропущенным продлениям.

Что делать, если после добавления нового города домен не открывается несколько часов?

Это почти всегда пропагация DNS — время, за которое изменение записи расходится по кэширующим DNS-серверам провайдеров интернета по всему миру, обычно от нескольких минут до нескольких часов в зависимости от TTL предыдущей записи. Если используется wildcard-запись, этот шаг проходится один раз при первичной настройке, а не при каждом новом городе — что и есть основное практическое преимущество wildcard DNS над точечными записями.

Поделиться: Telegram ВКонтакте WhatsApp

Запускаете региональные поддомены и не хотите разбираться с SSL вручную?

Настроим wildcard-сертификат, DNS и веб-сервер под все текущие и будущие города, свяжем с логикой региональных сайтов 1С-Битрикс и настроим мониторинг продления.

Игорь Воскресенский

Основатель студии B2Bsite. С 2014 года команда разрабатывает и поддерживает интернет-магазины и корпоративные сайты на 1С-Битрикс, настраивает каталоги, умный фильтр и обмен с 1С для среднего и крупного бизнеса.

← Все статьи блога