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/20 16:16]
val
let_s_encrypt_для_внутренних_сайтов [2025/12/26 17:08] (current)
val
Line 6: Line 6:
  
  
-Всем привет! Однажды администратоп ​+Всем привет! ​ 
 + 
 +Однажды администратор одного из внутренних сайтов ​предприятия попросил прописать 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 сертификата]] 
 + 
 +Так, что, предлагаю краткую "​шпаргалку с заменой по Ctrl+H",​ для тех, кто использует сервер DNS сервер bind и хочет делегировать выпуск/​проверку Let`s Encrypt сертификатов для внутренних сайтов сторонним подразделениям. 
 + 
 +Инструкция для администратора DNS сервера:​ 
 + 
 +Назначьте IP адрес для очередного внутреннего сайта и опишите зону, для будущей DNS-01 проверки с единственным DNS сервером (не забудьте увеличить номер версии зоны:)
 <​code>​ <​code>​
-dns# cat /etc/bind/anydomain.ru+dns# nano /etc/bind/yourdomain.ru
 ... ...
-anysite ​                A       N.N.N.N +anysiteN ​                A       A.B.C.D 
-*.anysite ​              CNAME   anysite +*.anysiteN ​              CNAME   anysiteN 
-_acme-challenge.anysite ​NS ns+_acme-challenge.anysiteN ​NS ns
 ... ...
 +</​code>​
  
-dns# cat /​etc/​bind/​named.conf.local+Создайте файл ключа с соответствующим именем,​ назначьте права и добавьте его к конфигурации DNS сервера 
 +<​code>​ 
 +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";​ 
 +... 
 +</​code>​ 
 + 
 +Создайте минимальный файл зоны, в каталоге и, с правами,​ которые,​ в дальнейшем,​ позволят редактировать его через сервис named  
 +<​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>​ 
 +dns# nano /​etc/​bind/​named.conf.local
 ... ...
-zone "​_acme-challenge.anysite.anydomain.ru" {+zone "​_acme-challenge.anysiteN.yourdomain.ru" {
         type master;         type master;
-        file "/​var/​lib/​bind/​_acme-challenge.anysite.anydomain.ru";+        file "/​var/​lib/​bind/​_acme-challenge.anysiteN.yourdomain.ru";
         update-policy {         update-policy {
-          grant certbot.anysite ​name _acme-challenge.anysite.anydomain.ru. txt;+          grant certbot.anysiteN ​name _acme-challenge.anysiteN.yourdomain.ru. TXT;
         };         };
 }; };
 ... ...
 +</​code>​
  
-dns# sudo -u bind nano /​var/​lib/​bind/​_acme-challenge.anysite.anydomain.ru+Протестируйте и обновите конфигурацию 
 +<​code>​ 
 +dns# named-checkconf ​-z
  
-$TTL 30 ; 30 seconds +dns# rndc reload 
-_acme-challenge.anysite.anydomain.ru. IN SOA ns.anydomain.ru. noc.anydomain.ru. ( +</code>
-                                1          ; serial +
-                                86400      ; refresh (1 day) +
-                                43200      ; retry (12 hours) +
-                                604800 ​    ; expire (1 week) +
-                                30         ; minimum (30 seconds) +
-                                ) +
-                        NS      ns.anydomain.ru. +
-  +
-dns# rndc-confgen -a -A hmac-sha512 -k "​certbot.anysite"​ -c /etc/bind/certbot.anysite.key+
  
-dns# chmod 640 /etc/bind/​certbot.anysite.key+Для первого сайта стоит провести [[https://habr.com/​ru/​articles/​925358/​|Проверки работоспособности]]
  
-dns# cat /​etc/​bind/​named.conf+Процесс выпуcка/​обновления сертификатов будет сопровождаться появлением в журнале записей вида: 
 +<​code>​ 
 +dns# journalctl | grep -i _acme-challenge.anysiteN
 ... ...
-include "/etc/bind/​certbot.anysite.key";+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# named-checkconf -z | less +<​code>​ 
- +dns# less /​etc/​bind/​certbot.anysiteN.key 
-dns# rndc reload +</code>
- +
-dns# nsupdate -k /​etc/​bind/​certbot.anysite.key +
-server 127.0.01+
  
-dns# less /​etc/​bind/​certbot.anysite.key+и "​подставляем"​ в инструкцию для администратора сайта
  
-dns# scp /​etc/​bind/​certbot.anysite.key user@anysite:+Инструкция для администратора сайта:
  
-user@anysite:​~$ nsupdate -k certbot.anysite.key +1. Установите плагин certbot-dns,​ в debian/​ubuntu делается так: 
-> server <IP адрес dns сервера>​ +<​code>​ 
- +anysiteN# apt install python3-certbot-dns-rfc2136 
- +</​code>​ 
-> zone _acme-challenge.anysite.anydomain.ru +2. Создайте файл конфигурации с таким содержимым:​ 
-> update add _acme-challenge.anysite.anydomain.ru. 30 IN TXT "​test_txt_record 1" +<​code>​ 
-> send +anysiteN# cat /​etc/​certbot-credentials.ini 
-> update del _acme-challenge.anysite.anydomain.ru. 30 IN TXT "​test_txt_record 1" +dns_rfc2136_server = 172.19.32.2
-> send +
-> quit +
- +
-# any-any-site#​ nslookup -q=TXT _acme-challenge.anysite.anydomain.ru +
-# any-any-site#​ host -t TXT _acme-challenge.anysite.anydomain.ru +
-# any-any-site#​ dig TXT _acme-challenge.anysite.anydomain.ru +
- +
-==== +
-Что необходимо сделать:​ +
- +
-1. Установить плагин certbot-dns,​ в debian/​ubuntu делается так: +
- +
-anysite# apt install python3-certbot-dns-rfc2136 +
- +
-2. Создать файл конфигурации с таким содержимым:​ +
- +
-anysite# cat /​etc/​certbot-credentials.ini +
-dns_rfc2136_server = 195.19.32.2+
 dns_rfc2136_port = 53 dns_rfc2136_port = 53
-dns_rfc2136_name = certbot.anysite+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>​ 
-anysite# chmod 640 /​etc/​certbot-credentials.ini +anysiteN# chmod 640 /​etc/​certbot-credentials.ini 
- +</​code>​ 
-4. Запросить сертификаты и убедиться в их создании +4. Запросите сертификаты и убедитесь в их создании 
- +<​code>​ 
-anysite# certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /​etc/​certbot-credentials.ini -d 'anysite.anydomain.ru' -d '*.anysite.anydomain.ru'+anysiteN# certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /​etc/​certbot-credentials.ini -d 'anysiteN.yourdomain.ru' -d '*.anysiteN.yourdomain.ru'
 ... ...
 IMPORTANT NOTES: IMPORTANT NOTES:
  - Congratulations! Your certificate and chain have been saved at:  - Congratulations! Your certificate and chain have been saved at:
-   /​etc/​letsencrypt/​live/​anysite.anydomain.ru/​fullchain.pem+   /​etc/​letsencrypt/​live/​anysiteN.yourdomain.ru/​fullchain.pem
    Your key file has been saved at:    Your key file has been saved at:
-   /​etc/​letsencrypt/​live/​anysite.anydomain.ru/​privkey.pem +   /​etc/​letsencrypt/​live/​anysiteN.yourdomain.ru/​privkey.pem 
- +</​code>​ 
-5. Для автоматического продления убедиться в создании файла конфигурации иналичии таймеров и сервисов +6. Для автоматического продления убедитесь в создании файла конфигурации и наличии таймеров и сервисов 
- +<​code>​ 
-anysite:~# cat /​etc/​letsencrypt/​renewal/​anysite.anydomain.ru.conf+anysiteN:~# cat /​etc/​letsencrypt/​renewal/​anysiteN.yourdomain.ru.conf
  
-anysite# systemctl status certbot.timer+anysiteN# systemctl status certbot.timer
 ... ...
      ​Active:​ active (waiting) ...      ​Active:​ active (waiting) ...
 ... ...
  
-anysite# systemctl show certbot.service+anysiteN# systemctl show certbot.service
 ... ...
 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.anysite 
-... 
-Nov 26 14:06:37 ns named[213146]:​ client @0x7f4711f3f898 195.19.32.16#​60008/​key certbot.anysite:​ view anydomainnet:​ updating zone '​_acme-challenge.anysite.anydomain.ru/​IN':​ adding an RR at '​_acme-challenge.anysite.anydomain.ru'​ TXT "​7VqXPt5zZ36jRFe9A61om1OALWFloaI2Rz7_OGtFYpM"​ 
-Nov 26 14:06:37 ns named[213146]:​ client @0x7f471200dc98 195.19.32.16#​60020/​key certbot.anysite:​ view anydomainnet:​ updating zone '​_acme-challenge.anysite.anydomain.ru/​IN':​ adding an RR at '​_acme-challenge.anysite.anydomain.ru'​ TXT "​O67R1nFhhli0YaMQ2j-AtefRO0wr7mUwICbtzGnR_64"​ 
-Nov 26 14:07:43 ns named[213146]:​ client @0x7f4711ab5498 195.19.32.16#​36166/​key certbot.anysite:​ view anydomainnet:​ updating zone '​_acme-challenge.anysite.anydomain.ru/​IN':​ deleting an RR at _acme-challenge.anysite.anydomain.ru TXT 
-Nov 26 14:07:43 ns named[213146]:​ client @0x7f4711f38898 195.19.32.16#​36180/​key certbot.anysite:​ view anydomainnet:​ updating zone '​_acme-challenge.anysite.anydomain.ru/​IN':​ deleting an RR at _acme-challenge.anysite.anydomain.ru TXT 
-... 
-</​code>​ 
  
let_s_encrypt_для_внутренних_сайтов.1766236579.txt.gz · Last modified: 2025/12/20 16:16 by val