Всем привет!

Однажды администратор одного из внутренних сайтов предприятия попросил прописать TXT запись для получения Let's Encrypt сертификата, поскольку сайт не доступен снаружи и, нет возможности настроить проверку HTTP-01. Через три месяца попросил прописать еще раз, для продления, потом появился второй такой сайт, и, стало очевидно, что процесс пора автоматизировать. Уже перед публикацией нашлась отличная статья с полезными комментариями, автору понадобилась та же проверка DNS-01 и стандарт RFC 2136 для автоматизации выпуска wildcard сертификата

Так, что, предлагаю краткую “шпаргалку с заменой по Ctrl+H”, для тех, кто использует сервер DNS сервер bind и хочет делегировать выпуск/проверку Let`s Encrypt сертификатов для внутренних сайтов сторонним подразделениям.

Шедеврум видит это так )
Шедеврум видит это так )

Инструкция для администратора DNS сервера:

Назначьте IP адрес для очередного внутреннего сайта и опишите зону, для будущей DNS-01 проверки с единственным DNS сервером (не забудьте увеличить номер версии зоны:)

dns# nano /etc/bind/yourdomain.ru
...
anysiteN                 A       A.B.C.D
*.anysiteN               CNAME   anysiteN
_acme-challenge.anysiteN NS ns
...

Создайте файл ключа с соответствующим именем, назначьте права и добавьте его к конфигурации DNS сервера

dns# rndc-confgen -a -A hmac-sha512 -k "certbot.anysiteN" -c /etc/bind/certbot.anysiteN.key

dns# chmod 640 /etc/bind/certbot.anysiteN.key

dns# nano /etc/bind/named.conf
...
include "/etc/bind/certbot.anysiteN.key";
...

Создайте минимальный файл зоны, в каталоге и, с правами, которые, в дальнейшем, позволят редактировать его через сервис named

dns# sudo -u bind nano /var/lib/bind/_acme-challenge.anysiteN.yourdomain.ru

$TTL 1h
_acme-challenge.anysiteN.yourdomain.ru. IN SOA ns.yourdomain.ru. noc.yourdomain.ru. 1 1d 12h 1w 1h
                        NS      ns.yourdomain.ru.

Добавьте поддержку зоны в настройки DNS сервера, и укажите права на добавление в нее TXT записей для созданного ключа

dns# nano /etc/bind/named.conf.local
...
zone "_acme-challenge.anysiteN.yourdomain.ru" {
        type master;
        file "/var/lib/bind/_acme-challenge.anysiteN.yourdomain.ru";
        update-policy {
          grant certbot.anysiteN name _acme-challenge.anysiteN.yourdomain.ru. TXT;
        };
};
...

Протестируйте и обновите конфигурацию

dns# named-checkconf -z

dns# rndc reload

Для первого сайта стоит провести Проверки работоспособности

Процесс выпуcка/обновления сертификатов будет сопровождаться появлением в журнале записей вида:

dns# journalctl | grep -i _acme-challenge.anysiteN
...
Dec 22 12:48:40 ns named[213146]: client @0x7f47161dac98 195.19.40.42#45142/key certbot.anysite: view dmz: updating zone '_acme-challenge.anysiteN.yourdomain.ru/IN': adding an RR at '_acme-challenge.anysiteN.yourdomain.ru' TXT "JikZ0ZHCUv4Bdk5AQ7DimCHAf46xeBAOOEu_-PPbH2U"
Dec 22 12:49:44 ns named[213146]: client @0x7f4711727c98 195.19.40.42#33991/key certbot.anysite: view dmz: updating zone '_acme-challenge.anysiteN.yourdomain.ru/IN': deleting an RR at _acme-challenge.anysiteN.yourdomain.ru TXT
...

Если все работает, извлекаем имя и значение ключа из файла

dns# less /etc/bind/certbot.anysiteN.key

и “подставляем” в инструкцию для администратора сайта

Инструкция для администратора сайта:

1. Установите плагин certbot-dns, в debian/ubuntu делается так:

anysiteN# apt install python3-certbot-dns-rfc2136

2. Создайте файл конфигурации с таким содержимым:

anysiteN# nano /etc/certbot-credentials.ini

dns_rfc2136_server = 172.19.32.2
dns_rfc2136_port = 53
dns_rfc2136_name = certbot.anysiteN
dns_rfc2136_secret = d+P0fg32FsGV0CYOTmWBkQLjG4KnUNNNNNNNNNNNNNNNNNNNNNNNNNNNNN9QF5pzH+MpbYqGa1WB/yh1Q==
dns_rfc2136_algorithm = HMAC-SHA512

3. Назначьте права доступа к нему:

anysiteN# chmod 640 /etc/certbot-credentials.ini

4. Запросите сертификаты и убедитесь в их создании

anysiteN# certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /etc/certbot-credentials.ini -d 'anysiteN.yourdomain.ru' -d '*.anysiteN.yourdomain.ru'
...
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/anysiteN.yourdomain.ru/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/anysiteN.yourdomain.ru/privkey.pem

6. Для автоматического продления убедитесь в создании файла конфигурации и наличии таймеров и сервисов

anysiteN:~# cat /etc/letsencrypt/renewal/anysiteN.yourdomain.ru.conf

anysiteN# systemctl status certbot.timer
...
     Active: active (waiting) ...
...

anysiteN# systemctl show certbot.service
...
TriggeredBy: ● certbot.timer
...

На этом все, но, если хотите посмотреть с самого начала, что такое сертификаты Let's Encrypt и как с ними работать, приглашаю посмотреть мой вебинар: "Все, что нужно знать про Let's Encrypt: от localhost до Kubernetes"

Спасибо!

Комментарии (10)


  1. stantum
    20.01.2026 07:15

    Если это внутренний сайт, то зачем морочиться с letsencrypt вместо выпуска собственного корневого сертификата - для организации?


    1. valvalva Автор
      20.01.2026 07:15

      Не нужно устанавливать корневой сертификат предприятия на домашние компьютеры пользователей, подключающихся через корпоративный ВПН


      1. Dok_DD
        20.01.2026 07:15

        я бы сказал: "не нужно пускать домашние компьютеры пользователя в корпоративную сеть. и наоборот".


        1. valvalva Автор
          20.01.2026 07:15

          У всех разные условия, у нас 50К пользователей, многие работают/учатся удаленно, плюс корпоративный wifi, удобнее использовать LE. Про безопасность, важные сети не доступны ни через VPN ни через wifi


  1. dimsoft
    20.01.2026 07:15

    Если сайт внутрений, то у него и имя .local - как тогда быть ?


    1. valvalva Автор
      20.01.2026 07:15

      В этом случае LE использовать не получится, поскольку у него нет возможности валидировать владельца зоны .local, такой просто нет в интернете, НО, например, можно развернуть (и на курсах так и делаем) вот это: https://www.freeipa.org/page/V4/ACME


    1. darkside83
      20.01.2026 07:15

      Внутренний сайт может иметь любое доменное имя, не обязательно на .local оно должно заканчиваться


    1. BlackSCORPION
      20.01.2026 07:15

      Внутренние сайты рекомендуют использовать домен "home.arpa".

      Есть такая штука https://smallstep.com/docs/step-ca, умеет в ACME (протокол автовыпуска сертификатов, как Let's Encrypt). Использую вместе с Caddy для https для докер контейнеров на домашнем сервере, с self-signed CA добавленым в трастстор на девайсах


  1. c46fd3da
    20.01.2026 07:15

    Давно существует https://auth.acme-dns.io и бот в телеге @acmednsbot как раз для таких случаев.

    Зону можно держать на любом публичном DNS сервере, через CNAME все настраивается буквально за секунды.


  1. ki11j0y
    20.01.2026 07:15

    Есть acme.sh, есть dns api, работает великолепно, подключил настроил автопродление, профит, есть некоторое но, нужен хостер с поддержкой dns acme.