Як використовувати дане шифрування перевірки виклику DNS?


160

Давайте Encrypt оголосив, що у них є:

Звернулася до підтримки виклику ACME DNS

Як змусити ./letsencrypt-autoстворити новий сертифікат за допомогою перевірки домену виклику DNS?

EDIT
Я маю на увазі: Як я можу уникнути http/httpsприв’язки до порту, використовуючи нещодавно оголошену функцію (2015-01-20), яка дозволяє довести право власності на домен, додавши певну запис TXT у DNS-зоні цільового домену?


3
Побічна примітка: Certbot (це нове ім'я для клієнта letsencrypt) тепер дозволяє за промовчанням базуватись на веб-кореневій автентифікації.
П'єр Прінетті

Відповіді:


203

В даний час можна виконати перевірку DNS також з клієнтом certbot LetsEncrypt в ручному режимі. Також можлива автоматизація (див. Нижче).

Ручний плагін

Ви можете виконати перевірку вручну - за допомогою ручного плагіна.

certbot -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns certonly

Потім Certbot надасть вам інструкцію щодо вручну оновити запис TXT для домену, щоб продовжити перевірку.

Please deploy a DNS TXT record under the name
_acme-challenge.bristol3.pki.enigmabridge.com with the following value:

667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc

Once this is deployed,
Press ENTER to continue

Після оновлення запису DNS натисніть Enter, certbot продовжиться, і якщо LetsEncrypt CA перевірить виклик, сертифікат видається як звичайно.

Ви також можете використовувати команду з додатковими опціями, щоб мінімізувати інтерактивність та відповідати на питання certbot. Зауважте, що ручний плагін ще не підтримує неінтерактивний режим.

certbot --text --agree-tos --email you@example.com -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly

Оновлення не працює з ручним плагіном, оскільки воно працює в неінтерактивному режимі. Більше інформації в офіційній документації на Certbot .

Оновлення: ручні гачки

У новій версії Certbot ви можете використовувати гачки , наприклад --manual-auth-hook, --manual-cleanup-hook. Гачки - це зовнішні скрипти, виконані Certbot для виконання завдання.

Інформація передається в змінних середовища - наприклад, домен для перевірки, маркер виклику. Варс: CERTBOT_DOMAIN, CERTBOT_VALIDATION, CERTBOT_TOKEN.

certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /path/to/dns/authenticator.sh --manual-cleanup-hook /path/to/dns/cleanup.sh -d secure.example.com

Ви можете написати власний обробник або використовувати вже наявний, доступний безліч, наприклад, для Cloudflare DNS.

Більше інформації про офіційну документацію на гачки Certbot

Автоматизація, оновлення, сценарій

Якщо ви хочете автоматизувати перевірку викликів DNS, наразі неможливо за допомогою ваніла certbot. Оновлення: деяка автоматизація можлива за допомогою гачків Certbot.

Таким чином, ми створили простий плагін, який підтримує сценарії з автоматизацією DNS. Він доступний як certbot-external-auth .

pip install certbot-external-auth

Він підтримує методи перевірки DNS, HTTP, TLS-SNI. Ви можете використовувати його в режимі обробника або в режимі виводу JSON.

Режим обробника

У режимі обробника certbot + плагін викликає зовнішні гачки (програма, скрипт оболонки, python, ...) для виконання перевірки та встановлення. На практиці ви пишете простий скрипт обробника / оболонки, який отримує вхідні аргументи - домен, маркер і вносить зміни в DNS. Коли обробник закінчується, certbot продовжує перевірку, як зазвичай.

Це надає вам додаткову гнучкість, можливо також оновлення.

Режим обробника також сумісний з дегідрованими гачками DNS (колишній letsencrypt.sh). Існує вже багато гачків DNS для звичайних провайдерів (наприклад, CloudFlare, GoDaddy, AWS). У сховищі є README з великими прикладами та обробниками прикладів.

Приклад із зневодненим гачком DNS:

certbot \
    --text --agree-tos --email you@example.com \
    --expand --renew-by-default \
    --configurator certbot-external-auth:out \
    --certbot-external-auth:out-public-ip-logging-ok \
    -d "bristol3.pki.enigmabridge.com" \
    --preferred-challenges dns \
    --certbot-external-auth:out-handler ./dehydrated-example.sh \
    --certbot-external-auth:out-dehydrated-dns \
    run 

Режим JSON

Ще одним плагінним режимом є режим JSON. Він створює один об'єкт JSON на рядок. Це забезпечує більш складну інтеграцію - наприклад, Ansible або якийсь менеджер розгортання викликає certbot. Зв'язок здійснюється через STDOUT та STDIN. Сербо виробляє об'єкт JSON з даними для здійснення перевірки, наприклад,

certbot \
    --text --agree-tos --email you@example.com \
    --expand --renew-by-default \
    --configurator certbot-external-auth:out \
    --certbot-external-auth:out-public-ip-logging-ok \
    -d "bristol3.pki.enigmabridge.com" \
    --preferred-challenges dns \
    certonly 2>/dev/null

{"cmd": "perform_challenge", "type": "dns-01", "domain": "bs3.pki.enigmabridge.com", "token": "3gJ87yANDpmuuKVL2ktfQ0_qURQ3mN0IfqgbTU_AGS4", "validation": "ejEDZXYEeYHUxqBAiX4csh8GKkeVX7utK6BBOBshZ1Y", "txt_domain": "_acme-challenge.bs3.pki.enigmabridge.com", "key_auth": "3gJ87yANDpmuuKVL2ktfQ0_qURQ3mN0IfqgbTU_AGS4.tRQM98JsABZRm5-NiotcgD212RAUPPbyeDP30Ob_7-0"}

Після оновлення DNS абонент надсилає новий рядковий символ STDIN certbot, щоб сигналізувати, що він може продовжувати перевірку.

Це дозволяє автоматизувати та керувати сертифікатами з центрального сервера управління. Для установки ви можете розгорнути сертифікати через SSH.

Для отримання додаткової інформації зверніться до readme та прикладів на certbot-external-auth GitHub.

РЕДАКТУВАННЯ. Також є нова публікація в блозі, що описує проблему перевірки DNS та використання плагінів.

РЕДАКТУВАННЯ. Зараз ми працюємо над двоступеневою валідизацією відповіді.


Під час переміщення веб-сайту на інший сервер вам може знадобитися новий сертифікат перед переключенням A-запису. Ви можете використовувати ручний метод ( certbot certonly --preferred-challenges dns -d example.com) для початкового запиту. Після тестування та перемикання A-запису використовуйте загальний метод webroot ( certbot certonly webroot -d example.com -w /path/to/webroot), використовуючи точно такі ж доменні імена, що і раніше. Якщо зробити все правильно, certbot розпізнає існуючий сертифікат / конфігурацію та оновить налаштування оновлення, тож сертифікат буде автоматично оновлений у майбутньому.
marcovtwout

Працює, остерігайтеся брандмауера AWS на рівні EC2
jruzafa

Я впевнений, що хотів би знати, що означає - manual-public-ip-logging-ok .... документація щодо цього загадкова, і всі приклади, які там використовуються, не пояснюють ... включаючи цей.
Рондо

Чи вимагає процес оновлення щоразу новий запис TXT?
Олд Гейзер

1
@Rondo Коли ви запитуєте сертифікат, використовуючи інтерактивний ручний режим, відображається це запит "ПРИМІТКА. IP-адресу цієї машини буде публічно зареєстровано як запит цього сертифіката. Якщо ви працюєте certbot в ручному режимі на машині, яка не є ваш сервер, будь ласка, переконайтесь, що з цим все гаразд. " Цей параметр говорить "так" для цього підказки.
муру

39

Мені вдалося скористатися dehydratedклієнтом для отримання сертифіката за допомогою перевірки DNS.

https://github.com/lukas2511/dehydrated

./dehydrated --cron --domain my.domain.example.com --hook ./hook.route53.rb --challenge dns-01

Вам потрібно буде використовувати правильний гачок перевірки DNS для вашого домену, але в якості прикладів є кілька варіантів:

https://github.com/lukas2511/dehydrated/wiki/Examples-for-DNS-01-hooks


Це спрацювало дуже добре для мене. Єдине застереження, яке я хотів би додати, це те, що мені довелося встановити кілька залежностей від дорогоцінних каменів, визначених у route53.rbсценарії гака.
jmreicha

10

На сьогодні офіційний клієнт не підтримує тип виклику DNS-01 (поки що).

Дивіться https://community.letsencrypt.org/t/status-of-official-letsencrypt-clients-dns-01-challenge-support/9427

Я не дивився на це, тому не знаю насправді. Моє розуміння на високому рівні було просто "ще немає підтримки нашого клієнта Python для виклику DNS".

Ви можете стежити за ходом цього PR . Крім того, є деякі клієнти, які вже підтримують його.



5

Я написав сценарій підключення для клієнта letsencrypt.sh, який дозволяє використовувати перевірку DNS-шифрування для DNS-провайдерів, які не надають API для використання (він же потребує введення вручну та перевірки).

Перевірити це можна тут: https://github.com/jbjonesjr/letsencrypt-manual-hook


3

Як було сказано в попередніх відповідях, ви можете легко підтвердити домен за допомогою DNS за допомогою цього:

  1. встановити необхідні програми (під Ubuntu): apt-get install -y git ruby letsencrypt git clone https://github.com/lukas2511/dehydrated.git git clone https://github.com/jbjonesjr/letsencrypt-manual-hook.git dehydrated/hooks/manual
  2. генерувати сертифікат із підтвердженням виклику DNS вручну для www.example.com (замінити на ваш домен): ./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb

3

Спробувавши різні комбінації, саме це працювало для мене, використовуючи дегідратовані сховища git і letsencrypt-manual-hoit . Якщо описані нижче кроки працюють для вас, не забудьте зіставити ці сховища

ПРИМІТКА. Це додатково до відповідей panticz.de та alexcline

~$ git clone https://github.com/lukas2511/dehydrated.git
~$ git clone https://github.com/jbjonesjr/letsencrypt-manual-hook.git dehydrated/hooks/manual
~$ cd dehydrated
~$ ./dehydrated --register --accept-terms
~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
#
# !! WARNING !! No main config file found, using default config!
#
Processing your.domain.com
 + Signing domains...
 + Creating new directory /Users/vikas/dehydrated/certs/your.domain.com ...
 + Creating chain cache directory /Users/vikas/dehydrated/chains
 + Generating private key...
 + Generating signing request...
 + Requesting authorization for your.domain.com...
 + 1 pending challenge(s)
 + Deploying challenge tokens...
Checking for pre-existing TXT record for the domain: '_acme-challenge.your.domain.com'.
Create TXT record for the domain: '_acme-challenge.your.domain.com'. TXT record:
'gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx'
Press enter when DNS has been updated...

Ви отримаєте хеш (після запуску вищевказаної команди), створіть запис TXT у своєму DNS. Переконайтеся, що він працює, виконавши команду нижче або GSuite Toolbox

~$ dig TXT _acme-challenge.your.domain.com. +short @8.8.8.8
"gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx"
~$

Тепер натисніть клавішу Enter під запитом. Це не спрацювало для мене, хоча запис TXT був оновлений. Мені довелося натиснути Ctrl + C і запустити команду ще раз.

~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
#
# !! WARNING !! No main config file found, using default config!
#
Processing your.domain.com
 + Signing domains...
 + Generating private key...
 + Generating signing request...
 + Requesting authorization for your.domain.com...
 + 1 pending challenge(s)
 + Deploying challenge tokens...
Checking for pre-existing TXT record for the domain: '_acme-challenge.your.domain.com'.
Found gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx. match.
 + Responding to challenge for your.domain.com authorization...
Challenge complete. Leave TXT record in place to allow easier future refreshes.
 + Challenge is valid!
 + Requesting certificate...
 + Checking certificate...
 + Done!
 + Creating fullchain.pem...
 + Walking chain...
 + Done!
~$

Зараз тут представлені ваші державні та приватні сертифікати.

$ ls certs/your.domain.com/privkey.pem certs/your.domain.com/fullchain-1517576424.pem

Щоб відновити (мінімальний час очікування - 30 днів), знову та сама команда.

~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb

1

Уго Ландау написав клієнт ACME в Go ( https://github.com/hlandau/acme ), який підтримує проблеми DNS (з протоколом nsupdate протоколу BIND). Він працює бездоганно для мене принаймні 18 місяців.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.