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 15:15]
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 сервером+Инструкция для администратора DNS сервера:​ 
 + 
 +Назначьте IP адрес для очередного внутреннего сайта и опишите зону, для будущей DNS-01 проверки с единственным DNS сервером ​(не забудьте увеличить номер версии зоны:)
 <​code>​ <​code>​
 dns# nano /​etc/​bind/​yourdomain.ru dns# nano /​etc/​bind/​yourdomain.ru
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 34: Line 36:
 </​code>​ </​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# 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>​
  
-Создаем минимальный файл зоны, с нужным владельцем +Протестируйте и обновите конфигурацию
-<​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>​  +
- +
-Тестируем и обновляем конфигурацию+
 <​code>​ <​code>​
 dns# named-checkconf -z dns# named-checkconf -z
Line 66: Line 68:
 Для первого сайта стоит провести [[https://​habr.com/​ru/​articles/​925358/​|Проверки работоспособности]] Для первого сайта стоит провести [[https://​habr.com/​ru/​articles/​925358/​|Проверки работоспособности]]
  
-Если ​все работает, "вспоминаем" ​имя и значение ключа+Процесс выпу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>​ 
 +Если ​все работает, ​извлекаем имя и значение ключа из файла
  
 <​code>​ <​code>​
Line 74: Line 84:
 и "​подставляем"​ в инструкцию для администратора сайта и "​подставляем"​ в инструкцию для администратора сайта
  
-Инструкция:​+Инструкция ​для администратора сайта:
  
 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 = 172.19.32.2 dns_rfc2136_server = 172.19.32.2
Line 88: Line 98:
 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 102: 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>​ 
-6. Для автоматического продления убедитесь в создании файла конфигурации иналичии таймеров и сервисов +6. Для автоматического продления убедитесь в создании файла конфигурации и наличии таймеров и сервисов 
 +<​code>​
 anysiteN:~# cat /​etc/​letsencrypt/​renewal/​anysiteN.yourdomain.ru.conf anysiteN:~# cat /​etc/​letsencrypt/​renewal/​anysiteN.yourdomain.ru.conf
  
Line 116: 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 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>​ 
  
let_s_encrypt_для_внутренних_сайтов.1766319352.txt.gz · Last modified: 2025/12/21 15:15 by val