# Wildcard-сертификат

**URL:** <https://forum.samohosting.ru/t/wildcard-sertifikat/356>\
**Category:** NPM. Nginx Proxy Manager\
**Tags:** reverse-proxy\
**Created:** [30.Июнь.2025 07:29:05 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356 "2025-06-30T07:29:05Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![nab0y](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/nab0y/32/184_2.png) [@nab0y](https://forum.samohosting.ru/u/nab0y)\
**Post date:** [30.Июнь.2025 07:29:05 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/1 "2025-06-30T07:29:05Z")

</div>

Люди добрые расскажите с картинками или снимите видео как в NPM получить wildcard сертификат, ну тот который со звездочкой? Я знаю что так можно, но руки не дошли.

---

<div class="post-metadata">

**Author:** ![admin](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/admin/32/4_2.png) [@admin](https://forum.samohosting.ru/u/admin)\
**Post date:** [01.Июль.2025 10:11:10 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/2 "2025-07-01T10:11:10Z")

</div>

Особенность выпуска \*.domain.ru wildcard через NPM в том, что нужно использовать при его выпуске DNS челендж.  
И тут токность в том, что NPM должен поддерживать интеграцию c доменным регистратром, который вы используете.

Процедура ни чем не отличается от того, что мы делали для получения сертификата через днс челендж у duckdns

 ![image](https://forum.samohosting.ru/uploads/default/original/1X/565f2b1474c917c714411399cc680c9b12feaab4.jpeg) ![image](https://forum.samohosting.ru/uploads/default/original/1X/9b86b76f9c53e23c4ba6f549739104a1d4174edf.png)

[![](https://forum.samohosting.ru/uploads/default/original/1X/dd1032b4b706ff5d4d541e83b7aeacc00662a931.jpeg "ТВОЙ БЕСПЛАТНЫЙ DUCKDNS ДОМЕН И LET'S ENCRYPT SSL СЕРТИФИКАТ БЕЗ БЕЛОГО IP ЧЕРЕЗ DNS CHALLENGE") ](https://www.youtube.com/watch?v=1HHHhOxFRtg)

А тем, у кого с английским нормально - вот ролик [Christian Lempa](https://www.youtube.com/@christianlempa) через CF выпускает

[![](https://forum.samohosting.ru/uploads/default/original/1X/09c99ec1e27f3d64f500d3b651b5b3f869c39c97.jpeg "Nginx Proxy Manager - SSL Wildcard Certs for your entire domain") ](https://www.youtube.com/watch?v=TBGOJA27m_0)

PS  
не смотря на наличие [reg.ru](http://reg.ru) в списке, я последний раз трогал года полтора назад - не работало, разбираться не стал, мне wild был не критичен.

---

<div class="post-metadata">

**Author:** ![KRom](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/krom/32/362_2.png) [@KRom](https://forum.samohosting.ru/u/KRom)\
**Post date:** [01.Июль.2025 13:22:15 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/3 "2025-07-01T13:22:15Z")

</div>

Добавлю свои 2 копейки:

Для неподдерживаемых регистраторов я поднял [AcmeDNS](https://github.com/joohoi/acme-dns) и уже через эту штуку делал автообновление LE сертификатов. Есть и не self hosted решение, там еще проще

---

<div class="post-metadata">

**Author:** ![nab0y](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/nab0y/32/184_2.png) [@nab0y](https://forum.samohosting.ru/u/nab0y)\
**Post date:** [01.Июль.2025 15:15:49 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/4 "2025-07-01T15:15:49Z")

</div>

> **Я сделаль!!!**
>
> ![image](https://forum.samohosting.ru/uploads/default/original/1X/d387f44db6ed08a1928d3bdcfac6442fc0237bab.jpeg)

Рассказываю про [reg.ru](http://reg.ru)  
Идем в Настройки → Настройки API

 ![image](https://forum.samohosting.ru/uploads/default/original/1X/c81d3a33a4f44137ee9b438680c469b214bcd03f.png)

И там прописываем пароль API, можно не прописывать, а ходить своим логином и паролем от [reg.ru](http://reg.ru), но мне ссыкотно, поэтому я прописал. Пароль пишем длинный и складываем в менеджер паролей.  
Так же прописываем IP адрес с которого придет certbot в нашем случает Nginx Proxy Manager, я указал свой белый IP

 ![image](https://forum.samohosting.ru/uploads/default/original/1X/49e8fcecafcf0db492876e50c3abe80963d0bcb3.png)

В NPM дальше все по инструкциям что выше, выбираем из списка [reg.ru](http://reg.ru), логин - ежу понятно от админки, а пароль тот который установили в настройках API

 ![image](https://forum.samohosting.ru/uploads/default/original/1X/2b284e42bc649d1e698d4b191ed3cfa9827e2f83.png)

Как и предупреждалось в видео, может не сработать с первого раза, я на второй раз чет психанул и таймаут выставил на 5 минут и все получилось.

Спасибо, всем причастным.

---

<div class="post-metadata">

**Author:** ![admin](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/admin/32/4_2.png) [@admin](https://forum.samohosting.ru/u/admin)\
**Post date:** [01.Июль.2025 16:10:01 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/5 "2025-07-01T16:10:01Z")

</div>

Круто! спасибо, что поделился.  
Другим будет полезно.

---

<div class="post-metadata">

**Author:** ![Snipset](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/snipset/32/487_2.png) [@Snipset](https://forum.samohosting.ru/u/Snipset)\
**Post date:** [03.Июль.2025 11:51:23 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/6 "2025-07-03T11:51:23Z")

</div>

Я для себя пришел к решению выпуска и перевыпуска сертификатов через [acme](https://github.com/acmesh-official/acme.sh), выше уже упоминали как раз)  
Он и для классического веб-сервера удобен и для случаев когда запрос сертификата происходит на одном сервере, а его фактическое использование на другом (как раз мой случай), еще умеет работать с api популярных хостеров для dns челленджа  
[Список API](https://github.com/acmesh-official/acme.sh/wiki/dnsapi)  
При желании можно и телеграм бота прикрутить.

---

<div class="post-metadata">

**Author:** ![qazard](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/qazard/32/2057_2.png) [@qazard](https://forum.samohosting.ru/u/qazard)\
**Post date:** [21.Октябрь.2025 18:54:43 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/7 "2025-10-21T18:54:43Z")

</div>

Может видео или пост сделать как работать с [AcmeDNS] или [Аcme] для локального использования, и когда есть свое доменное имя. Я с [reg.ru](http://reg.ru) запыхался. Вроде и TXT записи к домену подтянулись, а сертификат никак не получается выпустить

---

<div class="post-metadata">

**Author:** ![qazard](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/qazard/32/2057_2.png) [@qazard](https://forum.samohosting.ru/u/qazard)\
**Post date:** [21.Октябрь.2025 19:09:24 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/8 "2025-10-21T19:09:24Z")

</div>

Получилось выпустить по инструкции (ниже ссылка) для [reg.ru](http://reg.ru/) доменного имени:

> **[dnsapi2](https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_regru)**
>
> A pure Unix shell script ACME client for SSL / TLS certificate automation - acmesh-official/acme.sh

```auto
./acme.sh --set-default-ca --server letsencrypt
./acme.sh --issue --dns dns_regru -d example.com -d *.example.com --debug

```

–debug добавил чтобы видеть что происходит. Минут 20 прошло, пока получил сертификаты

---

<div class="post-metadata">

**Author:** ![Amofess](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/amofess/32/826_2.png) [@Amofess](https://forum.samohosting.ru/u/Amofess)\
**Post date:** [27.Октябрь.2025 01:38:39 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/9 "2025-10-27T01:38:39Z")

</div>

А как быть, если у меня серый IP (у меня интернет мобильный)?

---

<div class="post-metadata">

**Author:** ![KRom](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/krom/32/362_2.png) [@KRom](https://forum.samohosting.ru/u/KRom)\
**Post date:** [27.Октябрь.2025 06:14:17 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/10 "2025-10-27T06:14:17Z")

</div>

> [@Amofess](#):
>
> А как быть, если у меня серый IP

Для [reg.ru](http://reg.ru) или получения wildcard сертификата?

Для [reg.ru](http://reg.ru) либо

1. Открыть доступ из всей сети провайдера
2. Проксировать запросы через какой-то внешний сервер со статическим IP
3. Использовать промежуточный сервис [acme-dns](https://github.com/joohoi/acme-dns)

Для wildcard сертификатов http challenge нельзя использовать, только dns challenge, а это значит, что IP адрес конечного получателя сертификата значения не имеет

---

<div class="post-metadata">

**Author:** ![Amofess](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/amofess/32/826_2.png) [@Amofess](https://forum.samohosting.ru/u/Amofess)\
**Post date:** [29.Октябрь.2025 02:49:14 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/11 "2025-10-29T02:49:14Z")

</div>

Ситуация у меня такая: сижу на мобильном интернет и, в силу этого, все входящие порты закрыты + мой IP-адрес постоянно меняется.  
Пробовал получить wildcard сертификат у Beget при помощи Nginx Proxy Manager, но проблемма в закрытом 443-порту(

---

<div class="post-metadata">

**Author:** ![KRom](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/krom/32/362_2.png) [@KRom](https://forum.samohosting.ru/u/KRom)\
**Post date:** [29.Октябрь.2025 06:35:55 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/12 "2025-10-29T06:35:55Z")

</div>

Так, еще раз

1. wildcard сертификаты получаются только правкой dns записей, никаких обращений к сайту не происходит
2. при стандартной проверке через https challenge используется обращение на 80. а не 443 порт (читал, что в тестовом режиме вводится 443, но там надо сначала указывать временный сертификат
3. Если 80 порт закрыт, то либо запрашивается не wildcard сертификат, либо не настроена валидация через файлы на сайте
4. если таки 443, то может нет доступа к регистратору?

---

<div class="post-metadata">

**Author:** ![Amofess](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/amofess/32/826_2.png) [@Amofess](https://forum.samohosting.ru/u/Amofess)\
**Post date:** [30.Октябрь.2025 14:08:50 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/13 "2025-10-30T14:08:50Z")

</div>

так у меня все входящие порты закрыты(

---

<div class="post-metadata">

**Author:** ![KRom](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/krom/32/362_2.png) [@KRom](https://forum.samohosting.ru/u/KRom)\
**Post date:** [30.Октябрь.2025 15:18:48 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/14 "2025-10-30T15:18:48Z")

</div>

![image](https://forum.samohosting.ru/uploads/default/original/2X/d/de30ce5590518ca183daca2736f8501d3de475bb.jpeg)

# Подробные шаги (пошагово)

1. **Запрос сертификата (Order)**

- Ваш ACME-клиент (например, `certbot`, `acme.sh`, `lego`, `win-acme`) создаёт **Order** у Let’s Encrypt, указывая имя(я) домена(ов) (например `example.com`, `*.example.com`).
- В ответ CA возвращает список challenge-ов для каждого домена; для DNS-01 CA просит доказать владение через TXT-запись.

1. **Клиент получает параметры challenge**

- Для DNS-01 CA обычно даёт `token` (challenge token) и / или `keyAuthorization` (в зависимости от протокола).
- Клиент вычисляет значение TXT-записи, которое нужно опубликовать. Формула (обобщённо):
  - value = base64url( SHA256( keyAuthorization ) ) — ACME-клиент делает это сам, вам обычно приходит уже готовое значение.

1. **Публикация TXT-записи в DNS**

- Запись должна иметь имя:  
`_acme-challenge.example.com` (если проверяется `example.com`)  
Для сабдоменов аналогично: `_acme-challenge.sub.example.com`.
- Значение записи — вычисленный token (строка).
- Способы публикации:
  - **Автоматически** через API провайдера DNS (рекомендуется для автоматизации и renew). Большинство клиентов имеют плагины: `certbot-dns-cloudflare`, `certbot-dns-route53`, `acme.sh --dns dns_cf`, `lego --dns`.
  - **Вручную** : вставить запись в веб-интерфейс провайдера (подходит только для разовых/ручных выписок).

1. **Ожидание репликации (propagation)**

- CA начнёт проверку только после того как TXT-запись доступна в публичной DNS-системе.
- Если автоматизированный клиент — обычно делает проверку сам через DNS-lookup; при ручной работе может потребоваться подождать — зависит от TTL и кэширования. Многие клиенты умеют делать несколько проверок/паузы.

1. **Проверка от Let’s Encrypt (validation)**

- Let’s Encrypt делает DNS lookup для `_acme-challenge.example.com` и сравнивает значение с ожидаемым.
- Если значения совпадают — challenge считается **valid**.

1. **Финализация заказа и выдача сертификата**

- После прохождения всех необходимых challenge-ов клиент отправляет CSR (Certificate Signing Request) или ключи, и CA формально **finalize** —итоговый шаг.
- CA выдаёт сертификат (PEM), который клиент загружает и устанавливает на сервер (web server, reverse proxy и т. п.).

1. **Cleanup**

- Клиент удаляет TXT-запись (если делал автоматически) — хорошая практика.
- Сертификат ставится и настраивается; клиент обычно обновляет записи о сроке жизни (renewal schedule).

# Примеры команд (практика)

**Certbot — автоматический DNS плагин (пример Cloudflare)**  
(примерный — для Cloudflare нужно установить `certbot-dns-cloudflare` и создать credentials файл)

```auto
# файл /etc/letsencrypt/cloudflare.ini
dns_cloudflare_email = user@example.com
dns_cloudflare_api_token = 0123456789abcdef

# команда
certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
  -d example.com -d '*.example.com' \
  --preferred-challenges dns-01 \
  --non-interactive --agree-tos -m admin@example.com

```

**acme.sh — пример для Cloudflare**

```auto
export CF_Token="0123456789abcdef"
export CF_Account_ID="..." # иногда требуется
acme.sh --issue --dns dns_cf -d example.com -d '*.example.com' --keylength 4096

```

**certbot — ручной (manual) способ**

```auto
certbot certonly --manual --preferred-challenges dns \
  -d example.com -d www.example.com
# certbot выдаст строку, которую нужно поместить в _acme-challenge.*

```

# Пример того, что увидите (TXT-запись)

- Имя: `_acme-challenge.example.com`
- Тип: `TXT`
- Значение: `X1a2B3cD...` (строка, сгенерированная ACME-клиентом)

# Особые случаи и пояснения

- **Wildcard сертификаты (`*.example.com`) требуют именно DNS-01.** HTTP-01 не подходит для wildcard.
- **TTL и propagation.** Если ваш DNS провайдер кэширует записи с большим TTL или использует CDN/Anycast, иногда нужно подождать; при автоматизации лучше уменьшать TTL заранее (например 60–300s) перед выпуском.
- **API vs ручная публикация.** Для автоматического продления (renew) необходимо API провайдера. Ручной метод потребует вмешательства при каждом renew.
- **Rate limits Let’s Encrypt.** Есть ограничения на количество запросов/ошибок; при отладке учитывайте их.
- **Безопасность API-ключей.** Храните креды для DNS-API в защищённом файле с правами 600 и в переменных окружения/секретах CI.
- **Проблемы с проверкой:** проверьте, что запись доступна публично (use `dig` или `nslookup`):

```auto
dig TXT _acme-challenge.example.com +short

```

Ответ должен содержать ваш token.

# Типичные причины ошибок и как их решать

- **Ошибка: TXT запись не найдена** — проверьте имя записи (включая точку в конце зоны), подождите репликацию, проверьте DNS-кэш/используйте `dig` к разным рекурсивным серверам.
- **Ошибка: несоответствие значения** — возможно, записали неправильное значение (старый токен) или запись содержит кавычки/лишние пробелы.
- **Проблемы с API:** неверные права токена, двухфакторная аутентификация, IP-блокировка API.
- **Wildcard и поддомены:** не добавляйте `_acme-challenge.www.example.com` для домена `example.com` — правило всегда такое: challenge имя — `_acme-challenge.<зона, для которой выписываете>`.

# Рекомендации (best practices)

- Автоматизируйте через DNS API и интегрируйте с CI/CD или cron для автоматического renew.
- Используйте плагины клиента, которые умеют ждать DNS-репликацию и автоматически убирать записи.
- Храните секреты API в безопасном хранилище (Vault, Secrets manager, CI secrets).
- Перед массовыми тестами пользуйтесь staging-сервером Let’s Encrypt (чтоб не испортить rate limits):
  - Certbot: `--staging` или указать `--server https://acme-staging-v02.api.letsencrypt.org/directory`.

---

<div class="post-metadata">

**Author:** ![Amofess](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/amofess/32/826_2.png) [@Amofess](https://forum.samohosting.ru/u/Amofess)\
**Post date:** [30.Октябрь.2025 16:37:17 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/15 "2025-10-30T16:37:17Z")

</div>

Я прошу прощение за навязчивость, но я хочу уточнить: то что имя куплено у Beget - ничего страшного?

---

<div class="post-metadata">

**Author:** ![KRom](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/krom/32/362_2.png) [@KRom](https://forum.samohosting.ru/u/KRom)\
**Post date:** [30.Октябрь.2025 17:04:19 UTC](https://forum.samohosting.ru/t/wildcard-sertifikat/356/16 "2025-10-30T17:04:19Z")

</div>

- [GitHub - Medan-rfz/certbot-dns-beget-api](https://github.com/Medan-rfz/certbot-dns-beget-api)
- [Beget.com :: Let’s Encrypt client and ACME library written in Go.](https://go-acme.github.io/lego/dns/beget/)
- [dnsapi2 · acmesh-official/acme.sh Wiki · GitHub](https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_beget)
