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


Давайте зашифровать объявленный они имеют:

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

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

РЕДАКТИРОВАТЬ
Я имею в виду: как мне избежать http/https привязки портов, используя недавно объявленную функцию (2015-01-20), которая позволяет вам подтвердить право собственности на домен, добавив определенную запись TXT в зону DNS целевого домена?


108
2018-01-21 22:13


Источник


Примечание: Certbot (это новое имя для клиента letencrypt) теперь позволяет по умолчанию проверять подлинность на основе webroot. - Pierre Prinetti


Ответы:


В настоящее время можно выполнить проверку 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.

Дополнительная информация о официальном сертификате документация крючков

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

Если вы хотите автоматизировать проверку DNS-вызовов, в настоящее время это невозможно с помощью vanila certbot. Обновление: возможна некоторая автоматизация с помощью крючков Certbot.

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

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 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. Cerbot производит объект 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-внешний-авт GitHub.

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

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


134
2017-10-29 13:00



При переносе веб-сайта на другой сервер вам может понадобиться новый сертификат перед переключением A-записи. Вы можете использовать ручной метод (certbot certonly --preferred-challenges dns -d example.com) для первоначального запроса. После тестирования и переключения A-записи используйте общий метод webroot (certbot certonly webroot -d example.com -w /path/to/webroot) с использованием точно таких же доменных имен, как и раньше. Если все сделано правильно, certbot распознает существующий сертификат / конфиг и обновит настройки обновления, поэтому сертификат будет автоматически обновлен в будущем. - marcovtwout
Он работает, Остерегайтесь AWS Firewall на уровне EC2 - jruzafa
Я уверен, что знаю, что такое -manual-public-ip-logging-ok означает ... документация загадочна, и все примеры там, которые его используют, не объясняют ... включая этот. - Rondo
Каждый процесс обновления требует новую запись TXT? - Old Geezer
@OldGeezer По-видимому, это так. Я начал процесс, и он попросил меня создать запись TXT с различным содержимым, чем в прошлый раз. - Dario Fumagalli


Я смог использовать dehydrated клиент для получения сертификата с использованием проверки DNS.

https://github.com/lukas2511/dehydrated

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

Вам нужно будет использовать правильный URL проверки подлинности DNS для вашего домена, но есть несколько вариантов, доступных в качестве примеров:

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


37
2018-02-18 21:45



Это работало очень хорошо для меня. Единственное предостережение, которое я бы добавил, это то, что мне пришлось установить некоторые из зависимостей gem, определенных в route53.rb скрипт. - jmreicha


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

Видеть https://community.letsencrypt.org/t/status-of-official-letsencrypt-clients-dns-01-challenge-support/9427

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

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


10
2018-01-28 11:34





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

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


5
2018-05-22 16:55





Как упоминалось в предыдущих ответах, вы можете легко проверить домен 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
2017-12-16 10:36





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

ПРИМЕЧАНИЕ. Это дополнение к ответам 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. Убедитесь, что он работает, либо выполнив команду ниже, либо 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

2
2018-02-02 13:44





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


0
2017-07-03 18:07