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 11:26]
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 сертификата]]
  
-Так, что кратко, возможно, кому то, кто использует сервер bindпригодиться+Так, что, предлагаю ​краткую "​шпаргалку с заменой по Ctrl+H",​ для ​тех, кто использует ​сервер DNS сервер bind и хочет делегировать выпуск/​проверку Let`s Encrypt сертификатов для внутренних сайтов сторонним подразделениям.
  
-Назначаем IP адрес для очередного внутреннего сайта и описываем зону, для будущей DNS-01 проверки+Инструкция для администратора DNS сервера:​ 
 + 
 +Назначьте IP адрес для очередного внутреннего сайта и опишите зону, для будущей DNS-01 проверки ​с единственным DNS сервером (не забудьте увеличить номер версии зоны:)
 <​code>​ <​code>​
-dns# cat /​etc/​bind/​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>​
  
-Указываем местоположение ​файла зоны, и права ​на ее редактирование по стандарту RFC 2136 для учетной записи certbot.anysiteN+Создайте файл ​ключа с соответствующим именем, назначьте права и добавьте его к конфигурации 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>​ <​code>​
-dns# cat /​etc/​bind/​named.conf.local+dns# nano /​etc/​bind/​named.conf.local
 ... ...
 zone "​_acme-challenge.anysiteN.yourdomain.ru"​ { zone "​_acme-challenge.anysiteN.yourdomain.ru"​ {
Line 30: 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>​
  
-dns# sudo -u bind nano /​var/​lib/​bind/​_acme-challenge.anysiteN.yourdomain.ru+Протестируйте и обновите конфигурацию 
 +<​code>​ 
 +dns# named-checkconf ​-z
  
-$TTL 30 ; 30 seconds +dns# rndc reload 
-_acme-challenge.anysiteN.yourdomain.ru. IN SOA ns.yourdomain.ru. noc.yourdomain.ru. ( +</code>
-                                1          ; serial +
-                                86400      ; refresh (1 day) +
-                                43200      ; retry (12 hours) +
-                                604800 ​    ; expire (1 week) +
-                                30         ; minimum (30 seconds) +
-                                ) +
-                        NS      ns.yourdomain.ru. +
-  +
-dns# rndc-confgen -a -A hmac-sha512 -k "​certbot.anysiteN"​ -c /etc/bind/certbot.anysiteN.key+
  
-dns# chmod 640 /etc/bind/​certbot.anysiteN.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.anysiteN.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# rndc reload +
- +
-dns# nsupdate -k /​etc/​bind/​certbot.anysiteN.key +
-server 127.0.01 +
 dns# less /​etc/​bind/​certbot.anysiteN.key dns# less /​etc/​bind/​certbot.anysiteN.key
 +</​code>​
  
-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 делается так:+Инструкция для администратора ​сайта:
  
 +1. Установите плагин certbot-dns,​ в debian/​ubuntu делается так:
 +<​code>​
 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 111: 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 125: 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_для_внутренних_сайтов.1766305571.txt.gz · Last modified: 2025/12/21 11:26 by val