Как использовать проверку шифрования DNS для DNS?

Давайте зашифруем объявили , что у них есть:

  

Включена поддержка вызова ACME DNS

Как сделать ./letsencrypt-auto сгенерировать новый сертификат, используя проверку домена DNS-запроса?

ИЗМЕНИТЬ
Я имею в виду: как мне избежать привязки порта http/https, используя недавно объявленную функцию (2015-01-20), которая позволяет вам подтвердить право собственности на домен, добавив определенную запись TXT в зону DNS целевой области?

105 голосов | спросил Pierre Prinetti 22 Jam1000000amFri, 22 Jan 2016 01:13:47 +030016 2016, 01:13:47

7 ответов


132

В настоящее время можно выполнить проверку 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 [email protected] -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly

Обновление не работает с плагином вручную, поскольку он работает в неинтерактивном режиме. Дополнительная информация на официальной странице Certbot .

Обновление: ручные крючки

В новой версии Certbot вы можете использовать hooks , например. --manual-auth-hook, --manual-cleanup-hook. Крюки - это внешние скрипты, выполняемые Certbot для выполнения задачи.

Информация передается в переменных среды - например, в домене для проверки, вызов токена. Vars: 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-вызовов, в настоящее время это невозможно с помощью vanila certbot. Обновление: возможна некоторая автоматизация с помощью крючков Certbot.

Таким образом, мы создали простой плагин, который поддерживает сценарии с помощью автоматизации DNS. Он доступен как certbot-external-auth .

pip install certbot-external-auth

Он поддерживает методы проверки DNS, HTTP, TLS-SNI. Вы можете использовать его в режиме обработчика или в режиме вывода JSON.

Режим обработчика

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

Это дает вам дополнительную гибкость, возможно обновление.

Режим обработчика также совместим с обезвоженным DNS крючки (бывший letencrypt.sh). Есть уже много DNS-крючков для обычных провайдеров (например, CloudFlare, GoDaddy, AWS). В репозитории имеется README с обширными примерами и обработчиками примеров.

Пример с обезвоженный DNS-крючок:

certbot \
    --text --agree-tos --email [email protected] \
    --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. Cerbot создает объект JSON с данными для выполнения проверки, например,

certbot \
    --text --agree-tos --email [email protected] \
    --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.

EDIT: есть также новый пост в блоге , описывающий проблему проверки DNS и использование плагинов.

EDIT: в настоящее время мы работаем над 2-ступенчатой ​​проверкой Ansible, скоро закончится.

ответил ph4r05 29 +03002016-10-29T16:00:07+03:00312016bEurope/MoscowSat, 29 Oct 2016 16:00:07 +0300 2016, 16:00:07
37

Я смог использовать клиент 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/вики /Примеры-для-DNS-01-крючки

ответил alexcline 19 FebruaryEurope/MoscowbFri, 19 Feb 2016 00:45:26 +0300000000amFri, 19 Feb 2016 00:45:26 +030016 2016, 00:45:26
10

На сегодняшний день официальный клиент не поддерживает тип вызова DNS-01 (пока).

См. https: //community.letsencrypt.org/t/status-of-official-letsencrypt-clients-dns-01-challenge-support/9427

  

Я не смотрел на это, поэтому я действительно не знаю. Мое понимание на высоком уровне было просто «без поддержки нашего клиента Python для вызова DNS».

Вы можете следить за прогрессом на этом PR . Кроме того, существуют некоторые клиенты , которые уже поддерживают его.

ответил Simone Carletti 28 Jpm1000000pmThu, 28 Jan 2016 14:34:49 +030016 2016, 14:34:49
5

Я написал скрипт для скрипта для клиента letencrypt.sh который позволяет использовать Lets Encrypt DNS-проверку для DNS-провайдеров, которые не предоставляют api для использования (например, ручной ввод и проверка не требуется).

Вы можете проверить это здесь: https://github.com/jbjonesjr/letsencrypt-manual -hook

ответил J Jones 22 Maypm16 2016, 19:55:26
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
ответил panticz.de 16 FriEurope/Moscow2016-12-16T13:36:42+03:00Europe/Moscow12bEurope/MoscowFri, 16 Dec 2016 13:36:42 +0300 2016, 13:36:42
2

После выполнения разных комбинаций, это то, что сработало для меня, используя обезвоженный и letencrypt-manual-hook git repositories. Если для вас действуют следующие шаги, не забудьте star эти репозитории

ПРИМЕЧАНИЕ. Это дополнение к ответам 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...

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

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

Теперь нажмите введите в командной строке. Это не сработало для меня, хотя запись 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
ответил vikas027 2 FebruaryEurope/MoscowbFri, 02 Feb 2018 16:44:24 +0300000000pmFri, 02 Feb 2018 16:44:24 +030018 2018, 16:44:24
0

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

ответил Harald 3 J000000Tuesday18 2018, 21:07:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132