سؤال كيفية استخدام التحقق من صحة تشفير DNS Let's Encrypt؟


دعونا تشفير له أعلن يملكون:

تم تشغيل دعم لتحدي ACME DNS

كيف أفعل ./letsencrypt-auto توليد شهادة جديدة باستخدام التحقق من صحة نطاق التحدي DNS؟

تصحيح
أعني: كيف أتجنب http/https ربط المنفذ ، باستخدام الميزة التي تم الإعلان عنها مؤخرًا (2015-01-20) والتي تمكنك من إثبات ملكية النطاق عن طريق إضافة سجل TXT معين في منطقة DNS للمجال الهدف؟


124
2018-01-21 22:13


الأصل


ملاحظة جانبية: Certbot (هذا هو الاسم الجديد لعميل letsencrypt) يتيح الآن مصادقة تستند إلى 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

بمجرد تحديث سجل نظام أسماء النطاقات ، اضغط على Enter ، وسوف يستمر certbot وإذا تحقق LetsEncrypt CA من التحدي ، يتم إصدار الشهادة كالمعتاد.

يمكنك أيضًا استخدام أمر يحتوي على مزيد من الخيارات لتقليل التفاعل والرد على أسئلة التوثيق. لاحظ أن المكون الإضافي اليدوي لا يدعم الوضع غير التبادلي.

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 ، فليس من الممكن حاليًا استخدام vanila certbot. تحديث: بعض الأتمتة ممكنة مع خطافات Certbot.

وبالتالي أنشأنا مكونًا إضافيًا بسيطًا يدعم البرمجة النصية باستخدام نظام التشغيل التلقائي لنظام أسماء النطاقات. انها متاحة certbot-الخارجية-المصادقة.

pip install certbot-external-auth

وهو يدعم أساليب التحقق من DNS ، HTTP ، TLS-SNI. يمكنك إما استخدامه في وضع معالج أو وضع إخراج JSON.

وضع معالج

في وضع معالج ، يستدعي certbot + plugs خطافات خارجية (برنامج ، برنامج نصي shell ، python ، ...) لإجراء التحقق من الصحة والتثبيت. من الناحية العملية ، تكتب نصيًا بسيطًا / معالجًا شبيهًا يحصل على حجج الإدخال - النطاق ، الرمز ، ويحدث التغيير في نظام أسماء النطاقات. عند انتهاء معالج ، يتابع certbot التحقق من الصحة كالمعتاد.

هذا يمنحك مرونة إضافية ، والتجديد ممكن أيضا.

وضع معالج متوافق أيضا مع مجففة خطافات DNS (السابقة). يوجد بالفعل العديد من خطافات 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.

لمزيد من المعلومات يرجى الرجوع إلى التمهيدي وأمثلة على certbot-الخارجية-المصادقة جيثب.

تحرير: هناك أيضا جديد مشاركة مدونة تصف مشكلة التحقق من DNS واستخدام المكون الإضافي.

تعديل: نعمل حاليًا على التحقق بخطوتين Ansible ، وسيتم إيقافه قريبًا.


156
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

ستحتاج إلى استخدام ربط التحقق الصحيح من نظام أسماء النطاقات لنطاقك ، ولكن هناك بعض الخيارات المتاحة كأمثلة:

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


37
2018-02-18 21:45



هذا عمل جيد جدا بالنسبة لي. التحذير الوحيد الذي أود إضافته هو أنني اضطررت إلى تثبيت عدد قليل من التبعيات الأحجار الكريمة المحددة في route53.rb النصي هوك. - jmreicha


اعتبارًا من اليوم ، لا يدعم العميل الرسمي نوع التحدي لـ DNS-01 (حتى الآن).

نرى https://community.letsencrypt.org/t/status-of-official-letsencrypt-clients-dns-01-challenge-support/9427

لم أنظر إلى هذا حتى لا أعرف حقًا. كان تفكيري على مستوى عالٍ "لا يوجد أي دعم في عميل بايثون للتحدي DNS حتى الآن".

يمكنك متابعة التقدم في هذا العلاقات العامة. بدلا من ذلك ، هناك بعض العملاء التي تدعمها بالفعل.


10
2018-01-28 11:34





لقد كتبت النصي هوك ل letsencrypt.sh العميل يتيح لك استخدام التحقق من Lets Encrypt DNS لموفري DNS الذين لا يوفرون api لاستخدامه (مطلوب أيضًا إدخال يدوي والتحقق).

يمكنك التحقق من ذلك هنا: https://github.com/jbjonesjr/letsencrypt-manual-hook


5
2018-05-22 16:55





كما ذكرنا في الإجابات السابقة ، يمكنك بسهولة التحقق من نطاق بواسطة DNS باستخدام:

  1. تثبيت التطبيقات المطلوبة (تحت أوبونتو): 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