This is an old revision of the document!
Всем привет!
Однажды администратор одного из внутренних сайтов предприятия попросил прописать TXT запись для получения Let's Encrypt сертификата, поскольку сайт не доступен снаружи и, нет возможности настроить проверку HTTP-01. Через три месяца попросил прописать еще раз, для продления, потом появился второй такой сайт, и, стало очевидно, что процесс пора автоматизировать. Уже перед публикацией нашлась отличная статья с полезными комментариями, автору понадобилась та же проверка DNS-01 и стандарт RFC 2136 для автоматизации выпуска wildcard сертификата
Так, что, постараюсь кратко, как “шпаргалку”, для тех, кто использует сервер 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 сервера, и укажите права на ее редактирование для созданного ключа
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
Для первого сайта стоит провести Проверки работоспособности
Если все работает, имя и значение ключа
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 …
Спасибо! ====
dns# journalctl | grep -i _acme-challenge.anysiteN … Nov 26 14:06:37 ns named[213146]: client @0x7f4711f3f898 172.19.32.16#60008/key certbot.anysiteN: view yourdomainnet: updating zone '_acme-challenge.anysiteN.yourdomain.ru/IN': adding an RR at '_acme-challenge.anysiteN.yourdomain.ru' TXT “7VqXPt5zZ36jRFe9A61om1OALWFloaI2Rz7_OGtFYpM” Nov 26 14:06:37 ns named[213146]: client @0x7f471200dc98 172.19.32.16#60020/key certbot.anysiteN: view yourdomainnet: updating zone '_acme-challenge.anysiteN.yourdomain.ru/IN': adding an RR at '_acme-challenge.anysiteN.yourdomain.ru' TXT “O67R1nFhhli0YaMQ2j-AtefRO0wr7mUwICbtzGnR_64” Nov 26 14:07:43 ns named[213146]: client @0x7f4711ab5498 172.19.32.16#36166/key certbot.anysiteN: view yourdomainnet: updating zone '_acme-challenge.anysiteN.yourdomain.ru/IN': deleting an RR at _acme-challenge.anysiteN.yourdomain.ru TXT Nov 26 14:07:43 ns named[213146]: client @0x7f4711f38898 172.19.32.16#36180/key certbot.anysiteN: view yourdomainnet: updating zone '_acme-challenge.anysiteN.yourdomain.ru/IN': deleting an RR at _acme-challenge.anysiteN.yourdomain.ru TXT … </code>