This is an old revision of the document!
Всем привет!
Однажды администратор одного из внутренних сайтов предприятия попросил прописать TXT запись для получения Let's Encrypt сертификата, поскольку сайт не доступен снаружи и, нет возможности настроить проверку HTTP-01. Через три месяца попросил прописать еще раз, для продления, потом появился второй такой сайт, и, стало очевидно, что процесс пора автоматизировать. Уже перед публикацией нашлась отличная статья с полезными комментариями, автору понадобилась проверка DNS-01 и стандарт RFC 2136 для выпуска wildcard сертификата от Let`s Encrypt
Так, что кратко, может приводиться для тех, кто использует сервер DNS сервер bind, и хочет делегировать выпуск/проверку Let`s Encrypt для внутренних сайтов сторонних подразделений
Назначаем IP адрес для очередного внутреннего сайта и описываем зону, для будущей DNS-01 проверки
dns# nano 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"; ...
Указываем местоположение файла зоны, и права на ее редактирование, для созданного ключа
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;
};
};
...
Создаем минимальный файл зоны, с нужным владельцем, на всякий случай, устанавливаем TTL и время кэширования отрицательных ответов в 30 секунд
dns# sudo -u bind nano /var/lib/bind/_acme-challenge.anysiteN.yourdomain.ru
$TTL 30
_acme-challenge.anysiteN.yourdomain.ru. IN SOA ns.yourdomain.ru. noc.yourdomain.ru. 1 1d 12h 1w 30
NS ns.yourdomain.ru.
dns# named-checkconf -z | less
dns# rndc reload
dns# nsupdate -k /etc/bind/certbot.anysiteN.key
> server 127.0.01
dns# less /etc/bind/certbot.anysiteN.key
dns# scp /etc/bind/certbot.anysiteN.key user@anysiteN:
user@anysiteN:~$ nsupdate -k certbot.anysiteN.key
> server <IP адрес dns сервера>
> zone _acme-challenge.anysiteN.yourdomain.ru
> update add _acme-challenge.anysiteN.yourdomain.ru. 30 IN TXT "test_txt_record 1"
> send
> update del _acme-challenge.anysiteN.yourdomain.ru. 30 IN TXT "test_txt_record 1"
> send
> quit
# any-any-site# nslookup -q=TXT _acme-challenge.anysiteN.yourdomain.ru
# any-any-site# host -t TXT _acme-challenge.anysiteN.yourdomain.ru
# any-any-site# dig TXT _acme-challenge.anysiteN.yourdomain.ru
====
Что необходимо сделать:
1. Установить плагин certbot-dns, в debian/ubuntu делается так:
anysiteN# apt install python3-certbot-dns-rfc2136
2. Создать файл конфигурации с таким содержимым:
anysiteN# cat /etc/certbot-credentials.ini
dns_rfc2136_server = 195.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
5. Для автоматического продления убедиться в создании файла конфигурации и, наличии таймеров и сервисов
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 195.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 195.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 195.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 195.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
...