User Tools

Site Tools


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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
let_s_encrypt_для_внутренних_сайтов [2025/12/21 12:20]
val
let_s_encrypt_для_внутренних_сайтов [2025/12/26 17:08] (current)
val
Line 8: Line 8:
 Всем привет! ​ Всем привет! ​
  
-Однажды администратор одного из внутренних сайтов предприятия попросил прописать TXT запись для получения Let's Encrypt сертификата,​ поскольку сайт не доступен снаружи и, нет возможности настроить проверку [[https://​letsencrypt.org/​ru/​docs/​challenge-types/#​проверка-http-01|HTTP-01]]. Через три месяца попросил прописать еще раз, для продления,​ потом появился второй такой сайт, и, стало очевидно,​ что процесс пора автоматизировать. Уже перед публикацией нашлась [[https://​habr.com/​ru/​articles/​925358/​|отличная статья]] с полезными комментариями,​ автору понадобилась ​проверка ​[[https://​letsencrypt.org/​ru/​docs/​challenge-types/#​проверка-dns-01|DNS-01]] и стандарт RFC 2136 для выпуска [[https://​ru.wikipedia.org/​wiki/​Wildcard-сертификат|wildcard сертификата]] ​от Let`s Encrypt+Однажды администратор одного из внутренних сайтов предприятия попросил прописать TXT запись для получения Let's Encrypt сертификата,​ поскольку сайт не доступен снаружи и, нет возможности настроить проверку [[https://​letsencrypt.org/​ru/​docs/​challenge-types/#​проверка-http-01|HTTP-01]]. Через три месяца попросил прописать еще раз, для продления,​ потом появился второй такой сайт, и, стало очевидно,​ что процесс пора автоматизировать. Уже перед публикацией нашлась [[https://​habr.com/​ru/​articles/​925358/​|отличная статья]] с полезными комментариями,​ автору понадобилась ​та же [[https://​letsencrypt.org/​ru/​docs/​challenge-types/#​проверка-dns-01|проверка ​DNS-01]] и стандарт RFC 2136 для ​автоматизации ​выпуска [[https://​ru.wikipedia.org/​wiki/​Wildcard-сертификат|wildcard сертификата]]
  
-Так, что кратко, может приводиться ​для тех, кто использует сервер DNS сервер bindи хочет делегировать выпуск/​проверку Let`s Encrypt для внутренних сайтов сторонних подразделений+Так, что, предлагаю ​краткую "​шпаргалку с заменой ​по Ctrl+H", ​для тех, кто использует сервер DNS сервер bind и хочет делегировать выпуск/​проверку Let`s Encrypt ​сертификатов ​для внутренних сайтов сторонним подразделениям.
  
-Назначаем IP адрес для очередного внутреннего сайта и описываем зону, для будущей DNS-01 проверки+Инструкция для администратора DNS сервера:​ 
 + 
 +Назначьте IP адрес для очередного внутреннего сайта и опишите зону, для будущей DNS-01 проверки ​с единственным DNS сервером (не забудьте увеличить номер версии зоны:)
 <​code>​ <​code>​
-dns# nano yourdomain.ru+dns# nano /etc/bind/yourdomain.ru
 ... ...
 anysiteN ​                ​A ​      ​A.B.C.D anysiteN ​                ​A ​      ​A.B.C.D
Line 22: Line 24:
 </​code>​ </​code>​
  
-Создаем имя и файл ключа, назначаем права и добавляем его к конфигурации DNS сервера+Создайте файл ключа ​с соответствующим именем, назначьте права и добавьте его к конфигурации DNS сервера
 <​code>​ <​code>​
 dns# rndc-confgen -a -A hmac-sha512 -k "​certbot.anysiteN"​ -c /​etc/​bind/​certbot.anysiteN.key dns# rndc-confgen -a -A hmac-sha512 -k "​certbot.anysiteN"​ -c /​etc/​bind/​certbot.anysiteN.key
Line 32: Line 34:
 include "/​etc/​bind/​certbot.anysiteN.key";​ include "/​etc/​bind/​certbot.anysiteN.key";​
 ... ...
 +</​code>​
 +
 +Создайте минимальный файл зоны, в каталоге и, с правами,​ которые,​ в дальнейшем,​ позволят редактировать его через сервис named 
 <​code>​ <​code>​
 +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.
 +</​code>​
  
-Указываем местоположение файла зоны, и права на ее редактированиедля созданного ключа+Добавьте поддержку ​зоны в настройки DNS сервера, и укажите ​права на добавление в нее TXT записей для созданного ключа
 <​code>​ <​code>​
 dns# nano /​etc/​bind/​named.conf.local dns# nano /​etc/​bind/​named.conf.local
Line 42: Line 53:
         file "/​var/​lib/​bind/​_acme-challenge.anysiteN.yourdomain.ru";​         file "/​var/​lib/​bind/​_acme-challenge.anysiteN.yourdomain.ru";​
         update-policy {         update-policy {
-          grant certbot.anysiteN name _acme-challenge.anysiteN.yourdomain.ru. ​txt;+          grant certbot.anysiteN name _acme-challenge.anysiteN.yourdomain.ru. ​TXT;
         };         };
 }; };
 ... ...
-</​code>​+</​code>​
  
-Создаем минимальный файл зоны, ​с нужным владельцем,​ на всякий случай, устанавливаем TTL и время ​кэширования отрицательных ответов в 30 секунд+Протестируйте и обновите конфигурацию
 <​code>​ <​code>​
-dns# sudo -u bind nano /​var/​lib/​bind/​_acme-challenge.anysiteN.yourdomain.ru +dns# named-checkconf -z
- +
-$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# rndc reload
 +</​code>​
  
-dns# nsupdate -k /etc/bind/​certbot.anysiteN.key +Для первого сайта стоит провести [[https://habr.com/​ru/​articles/​925358/​|Проверки работоспособности]]
-> server 127.0.01+
  
-dns# less /etc/bind/​certbot.anysiteN.key+Процесс выпуcка/​обновления сертификатов будет сопровождаться появлением в журнале записей вида: 
 +<​code>​ 
 +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 
 +... 
 +</​code>​ 
 +Если все работает,​ извлекаем имя и значение ключа из файла
  
-dns# scp /​etc/​bind/​certbot.anysiteN.key ​user@anysiteN:​+<​code>​ 
 +dns# less /​etc/​bind/​certbot.anysiteN.key 
 +</​code>​
  
-user@anysiteN:​~$ nsupdate -k certbot.anysiteN.key +и "подставляем" в инструкцию для администратора сайта
-> server <IP адрес dns сервера>+
  
 +Инструкция для администратора сайта:
  
-> zone _acme-challenge.anysiteN.yourdomain.ru +1. Установите плагин certbot-dns,​ в debian/​ubuntu делается так: 
-> update add _acme-challenge.anysiteN.yourdomain.ru. 30 IN TXT "​test_txt_record 1" +<​code>​
-> 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 anysiteN# apt install python3-certbot-dns-rfc2136
- +</​code>​ 
-2. Создать файл конфигурации с таким содержимым:​ +2. Создайте файл конфигурации с таким содержимым:​ 
 +<​code>​
 anysiteN# cat /​etc/​certbot-credentials.ini anysiteN# cat /​etc/​certbot-credentials.ini
-dns_rfc2136_server = 195.19.32.2+dns_rfc2136_server = 172.19.32.2
 dns_rfc2136_port = 53 dns_rfc2136_port = 53
 dns_rfc2136_name = certbot.anysiteN dns_rfc2136_name = certbot.anysiteN
 dns_rfc2136_secret = d+P0fg32FsGV0CYOTmWBkQLjG4KnUNNNNNNNNNNNNNNNNNNNNNNNNNNNNN9QF5pzH+MpbYqGa1WB/​yh1Q== dns_rfc2136_secret = d+P0fg32FsGV0CYOTmWBkQLjG4KnUNNNNNNNNNNNNNNNNNNNNNNNNNNNNN9QF5pzH+MpbYqGa1WB/​yh1Q==
 dns_rfc2136_algorithm = HMAC-SHA512 dns_rfc2136_algorithm = HMAC-SHA512
- +</​code>​ 
-3. Назначить права доступа к нему: +3. Назначьте права доступа к нему: 
 +<​code>​
 anysiteN# chmod 640 /​etc/​certbot-credentials.ini anysiteN# chmod 640 /​etc/​certbot-credentials.ini
- +</​code>​ 
-4. Запросить сертификаты и убедиться в их создании +4. Запросите сертификаты и убедитесь в их создании 
 +<​code>​
 anysiteN# certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /​etc/​certbot-credentials.ini -d '​anysiteN.yourdomain.ru'​ -d '​*.anysiteN.yourdomain.ru'​ anysiteN# certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /​etc/​certbot-credentials.ini -d '​anysiteN.yourdomain.ru'​ -d '​*.anysiteN.yourdomain.ru'​
 ... ...
Line 113: Line 112:
    Your key file has been saved at:    Your key file has been saved at:
    /​etc/​letsencrypt/​live/​anysiteN.yourdomain.ru/​privkey.pem    /​etc/​letsencrypt/​live/​anysiteN.yourdomain.ru/​privkey.pem
- +</​code>​ 
-5. Для автоматического продления убедиться в создании файла конфигурации иналичии таймеров и сервисов +6. Для автоматического продления убедитесь в создании файла конфигурации и наличии таймеров и сервисов 
 +<​code>​
 anysiteN:~# cat /​etc/​letsencrypt/​renewal/​anysiteN.yourdomain.ru.conf anysiteN:~# cat /​etc/​letsencrypt/​renewal/​anysiteN.yourdomain.ru.conf
  
Line 127: Line 126:
 TriggeredBy:​ ● certbot.timer TriggeredBy:​ ● certbot.timer
 ... ...
 +</​code>​
 +
 +На этом все, но, если хотите посмотреть с самого начала,​ что такое сертификаты Let's Encrypt и как с ними работать,​ приглашаю посмотреть мой вебинар:​ [[https://​rutube.ru/​video/​61ae7d137f22c4180c186e32683f731f/​|"​Все,​ что нужно знать про Let's Encrypt: от localhost до Kubernetes"​]]
  
 Спасибо! Спасибо!
-==== 
  
  
- 
-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 
-... 
-</​code>​ 
  
let_s_encrypt_для_внутренних_сайтов.1766308827.txt.gz · Last modified: 2025/12/21 12:20 by val