User Tools

Site Tools


let_s_encrypt_для_внутренних_сайтов

Let's Encrypt для внутренних сайтов

Всем привет!

Однажды администратор одного из внутренних сайтов предприятия попросил прописать 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# cat /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"

Спасибо!

let_s_encrypt_для_внутренних_сайтов.txt · Last modified: 2025/12/26 17:08 by val