आइए एनक्रिप्ट डीएनएस चुनौती सत्यापन का उपयोग कैसे करें?


160

आइए एन्क्रिप्ट करें कि उन्होंने घोषणा की है:

ACME DNS चुनौती के लिए समर्थन को चालू किया

./letsencrypt-autoDNS चुनौती डोमेन सत्यापन का उपयोग करके मैं एक नया प्रमाणपत्र कैसे बना सकता हूं ?

EDIT
मेरा मतलब है: मैं http/httpsनई घोषित सुविधा (2015-01-20) का उपयोग करके पोर्ट बाइंडिंग से कैसे बचूँ, जो आपको लक्ष्य डोमेन के DNS ज़ोन में एक विशिष्ट TXT रिकॉर्ड जोड़कर डोमेन के स्वामित्व को साबित करने की अनुमति देता है?


3
साइड नोट: सर्टिफोट (यह Letencrypt क्लाइंट का नया नाम है) अब डिफ़ॉल्ट रूप से वेबरोट-आधारित प्रमाणीकरण की अनुमति देता है।
पियरे प्रिनेटी

जवाबों:


203

वर्तमान में मैन्युअल मोड में सर्टिफिकेट लेट्सएनेट क्रिप्ट क्लाइंट के साथ डीएनएस सत्यापन करना संभव है। स्वचालन भी संभव है (नीचे देखें)।

मैनुअल प्लगइन

आप या तो मैन्युअल सत्यापन कर सकते हैं - मैनुअल प्लगइन के साथ।

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

तब प्रमाणपत्रबोट आपको सत्यापन के लिए आगे बढ़ने के लिए डोमेन के लिए एक 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 दबाएं, सर्टिफिकेट जारी रहेगा और यदि 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

नवीनीकरण मैन्युअल प्लगइन के साथ काम नहीं करता है क्योंकि यह गैर-इंटरैक्टिव मोड में चलता है। आधिकारिक प्रमाण पत्र प्रलेखन पर अधिक जानकारी ।

अपडेट: मैनुअल हुक

नए सर्बोट संस्करण में आप हुक , जैसे --manual-auth-hook, का उपयोग कर सकते हैं --manual-cleanup-hook। हुक कार्य निष्पादित करने के लिए सर्टिफिकेट द्वारा निष्पादित बाहरी स्क्रिप्ट हैं।

जानकारी पर्यावरण चर में पारित की जाती है - जैसे, मान्य करने के लिए डोमेन, चुनौती टोकन। 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

आप अपना स्वयं का हैंडलर लिख सकते हैं या पहले से मौजूद का उपयोग कर सकते हैं, क्लाउडफ्लेयर डीएनएस के लिए कई उपलब्ध हैं, उदाहरण के लिए।

आधिकारिक सर्बोट हुक पर अधिक जानकारी प्रलेखन

स्वचालन, नवीनीकरण, स्क्रिप्टिंग

यदि आप DNS चुनौतियों को स्वचालित करना चाहते हैं, तो वर्तमान में यह वैनिला सर्टिफिकेट के साथ संभव नहीं है। अद्यतन: सर्टिफिकेट हुक के साथ कुछ स्वचालन संभव है।

इस प्रकार हमने एक सरल प्लगइन बनाया जो DNS स्वचालन के साथ स्क्रिप्टिंग का समर्थन करता है। यह सर्टबोट-एक्सटर्नल-ऑर्ट के रूप में उपलब्ध है ।

pip install certbot-external-auth

यह DNS, HTTP, TLS-SNI सत्यापन विधियों का समर्थन करता है। आप इसे या तो हैंडलर मोड या JSON आउटपुट मोड में उपयोग कर सकते हैं।

हैंडलर मोड

हैंडलर मोड में, सर्टिफिकेट + प्लगइन बाहरी हुक (एक प्रोग्राम, शेल स्क्रिप्ट, अजगर, ...) को वैलेडेशन और इंस्टॉलेशन करने के लिए कहता है। व्यवहार में आप एक साधारण हैंडलर / शेल स्क्रिप्ट लिखते हैं जिसे इनपुट तर्क मिलते हैं - डोमेन, टोकन और DNS में परिवर्तन। जब हैंडलर खत्म हो जाता है, तो सर्टिफिकेट हमेशा की तरह सत्यापन के साथ आगे बढ़ता है।

यह आपको एक अतिरिक्त लचीलापन देता है, नवीकरण भी संभव है।

हैंडलर मोड भी डीहाइड्रेटेड DNS हुक (पूर्व letencrypt.sh) के साथ संगत है । आम प्रदाताओं (जैसे, CloudFlare, GoDaddy, AWS) के लिए पहले से ही कई DNS हुक हैं। भंडार में व्यापक उदाहरण और उदाहरण हैंडलर के साथ एक 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 या कुछ परिनियोजन प्रबंधक सर्टिफिकेट कह रहा है। संचार 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 को नई-लाइन चरित्र भेजता है कि यह सत्यापन के साथ जारी रह सकता है।

यह केंद्रीय प्रबंधन सर्वर से स्वचालन और प्रमाणपत्र प्रबंधन को सक्षम करता है। इंस्टालेशन के लिए आप SSH के ऊपर सर्टिफिकेट तैनात कर सकते हैं।

अधिक जानकारी के लिए कृपया सर्टिफिकेट-बाहरी-बाहरी GitHub पर रीडमी और उदाहरण देखें ।

EDIT: DNS सत्यापन समस्या और प्लगइन उपयोग का वर्णन करने वाला एक नया ब्लॉग पोस्ट भी है ।

EDIT: हम वर्तमान में Ansible 2-चरणीय सत्यापन पर काम करते हैं, जल्द ही बंद हो जाएगा।


जब एक वेबसाइट को दूसरे सर्वर पर माइग्रेट करना हो तो ए-रिकॉर्ड स्विच करने से पहले आपको एक नया प्रमाणपत्र चाहिए। आप certbot certonly --preferred-challenges dns -d example.comप्रारंभिक अनुरोध के लिए मैनुअल विधि ( ) का उपयोग कर सकते हैं । ए-रिकॉर्ड का परीक्षण और स्विच करने के बाद, certbot certonly webroot -d example.com -w /path/to/webrootपहले की तरह ही सामान्य डोमेन नाम (एस) का उपयोग करके सामान्य वेबरूट विधि ( ) का उपयोग करें। यदि सही तरीके से किया जाता है, तो सर्टिफिकेट मौजूदा प्रमाणपत्र / कॉन्फ़िगरेशन को पहचान लेगा और नवीनीकरण सेटिंग्स को अपडेट कर देगा, इसलिए भविष्य में प्रमाणपत्र स्वचालित रूप से नवीनीकृत हो जाएगा।
marcovtwout

यह काम करता है, EC2 स्तर पर AWS फ़ायरवॉल से सावधान
jruzafa

मुझे यकीन है कि क्या पता है --मानसिक-सार्वजनिक-आईपी-लॉगिंग-ओके का अर्थ है .... दस्तावेज़ इसके बारे में गूढ़ है और वहाँ से बाहर आने वाले सभी उदाहरण इसका उपयोग नहीं करते ... यह भी शामिल है।
रोंडो

क्या नवीनीकरण प्रक्रिया में हर बार एक नए TXT रिकॉर्ड की आवश्यकता होती है?
ओल्ड गीजर

1
जब आप मैन्युअल रूप से मैन्युअल मोड का उपयोग करके किसी प्रमाणपत्र का अनुरोध करते हैं, तो यह संकेत दिखाया जाता है "नोट: इस मशीन का IP सार्वजनिक रूप से इस प्रमाणपत्र के अनुरोध के रूप में लॉग इन किया जाएगा। यदि आप किसी मशीन पर मैनुअल मोड में सर्टिफिकेट चला रहे हैं जो नहीं है। आपका सर्वर, कृपया सुनिश्चित करें कि आप इसके साथ ठीक हैं। " यह विकल्प उस संकेत के लिए हाँ कहता है।
मुरु

39

मैं dehydratedDNS सत्यापन का उपयोग करके प्रमाणपत्र प्राप्त करने के लिए क्लाइंट का उपयोग करने में सक्षम था ।

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 देखें

मैंने इस पर ध्यान नहीं दिया है इसलिए मुझे वास्तव में पता नहीं है। मेरी उच्च-स्तरीय समझ सिर्फ "DNS चुनौती के लिए हमारे पायथन क्लाइंट में कोई समर्थन नहीं थी"।

आप इस PR में प्रगति का अनुसरण कर सकते हैं । वैकल्पिक रूप से, कुछ ग्राहक हैं जो पहले से ही इसका समर्थन करते हैं।


1
twitter.com/letsencrypt/status/689919523164721152 अब यह करता है।
foo

5

मैंने Letencrypt.sh क्लाइंट के लिए एक हुक स्क्रिप्ट लिखी है जो आपको DNS प्रदाताओं के लिए LET Encrypt DNS सत्यापन का उपयोग करने की अनुमति देता है जो उपयोग करने के लिए एक एपीआई प्रदान नहीं करता है (उर्फ, मैनुअल प्रविष्टि और सत्यापन की आवश्यकता है)।

आप इसे यहाँ देख सकते हैं: 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. www.example.com के लिए मैनुअल DNS चुनौती की पुष्टि के साथ प्रमाण पत्र बनाएँ (अपने डोमेन के साथ बदलें): ./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb

3

विभिन्न संयोजनों की कोशिश करने के बाद, निर्जलित और लेटेसक्रिप्ट-मैनुअल-हुक गिट रिपॉजिटरी का उपयोग करके मेरे लिए यह काम किया गया है। यदि नीचे दिए गए चरण आपके लिए काम करते हैं, तो इन रिपॉजिटरी को स्टार देना न भूलें

नोट: यह 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 टूलबॉक्स को चलाकर काम करता है

~$ 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

1

ह्यूगो लैंडौ ने गो ( https://github.com/hlandau/acme ) में ACME क्लाइंट लिखा था जो DNS चुनौतियों (BIND के nsupdate प्रोटोकॉल के साथ) का समर्थन करता है। यह कम से कम 18 महीने से मेरे लिए काम कर रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.