हैलो फिर से, प्रिय पाठक।
ISPmanager पैनल में
लेट्स एनक्रिप्ट एडवेंचर पर दूसरा अध्याय खुला घोषित किया गया है।
पिछले लेख में, हमने ACME v01 के प्लगइन पर चर्चा की। इसमें, हम उपयोगकर्ता के साथ काम करने के तर्क के दृष्टिकोण से इसके विकास के बारे में बात करेंगे और निश्चित रूप से, वाइल्डकार्ड प्रमाणपत्रों के समर्थन के साथ ACME v02 प्रोटोकॉल के बारे में।

अत्यधिक देखभाल
उपयोगकर्ता को सावधानी से घेरने की कोशिश करते हुए, आप दूर तक जा सकते हैं। अब तक वह कार्यक्षमता के साथ काम नहीं कर पाएगा। और हमारी कहानी का पहला भाग बस उसी के बारे में है।
मॉड्यूल विकसित करते समय, हम सर्टिफिकेट इश्यू के लिए क्लाइंट को लंबी तैयारी से बचाना चाहते थे। इसके लिए दो प्रतिबंध लगाए गए: उन्होंने एसएसएल को केवल पैनल में पंजीकृत वेब डोमेन के लिए और केवल उन डोमेन उपनामों के लिए ऑर्डर करने की अनुमति दी जिनके बारे में पैनल को पता है।
दोनों प्रतिबंध तर्कसंगत लग रहे थे। पहले गैर-मौजूद डोमेन के लिए प्रमाण पत्र देने और "मृत" संस्थाओं का उत्पादन करने की अनुमति नहीं थी - प्रमाण पत्र जो जारी नहीं किए जाएंगे, क्योंकि सत्यापन के टोकन को रखने के लिए कहीं नहीं है। दूसरे ने अनावश्यक संस्थाओं को भी समाप्त कर दिया, और फिर भी "*" के लिए प्रमाण पत्र देने की अनुमति नहीं दी - एलियास - जबकि
ले ने बस ऐसे प्रमाण पत्रों का समर्थन नहीं किया।
DNS रिकॉर्ड्स के माध्यम से एक डोमेन की जांच करने की सुविधा और
ले में दिखाई देने वाले मेल डोमेन के लिए एक प्रमाण पत्र को ऑर्डर करने की क्षमता तक सब कुछ ठीक था। फिर, जब एक मेल डोमेन का आदेश देते हैं, तो हमने निम्नलिखित उपनामों को जोड़ने का फैसला किया: "मेल", "पॉप", "smtp" - आखिरकार, सबसे अधिक बार प्रमाण पत्र उनसे जुड़े होते हैं। अंत में, यह बुरी तरह से निकला: ऐसे उपयोगकर्ता थे जिन्होंने शुरू में अपने मेल सर्वर को पूरी तरह से अलग उपनाम से कॉन्फ़िगर किया था। आदेश देने में हमारी सीमाओं के कारण, वे आवश्यक नाम नहीं जोड़ सके।
सौभाग्य से, हमने जल्दी से त्रुटि का एहसास किया और ठीक किया, जिससे उपयोगकर्ताओं को प्रमाण पत्र का आदेश देते समय आवश्यक डेटा निर्दिष्ट करने की अनुमति मिलती है। फिर भी, कभी-कभी बहुत अधिक चिंताएँ होती हैं :)।
वाइल्डकार्ड
अब चलो
ACME v02 पर स्विच करने के बारे में बात करते हैं, क्योंकि केवल
ले प्रोटोकॉल के इस संस्करण में वाइल्डकार्ड प्रमाणपत्र दिखाई देने के लिए समर्थन किया था। चलो एक नई, या बल्कि, एक संशोधित निर्देशिका के साथ शुरू करते हैं:
curl -o- 'https://acme-v02.api.letsencrypt.org/directory' { "keyChange": "https://acme-v02.api.letsencrypt.org/acme/key-change", "mIU2Y2m2FsA": "https://community.letsencrypt.org/t/adding-random-entries-to-the-directory/33417", "meta": { "caaIdentities": [ "letsencrypt.org" ], "termsOfService": "https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf", "website": "https://letsencrypt.org" }, "newAccount": "https://acme-v02.api.letsencrypt.org/acme/new-acct", "newNonce": "https://acme-v02.api.letsencrypt.org/acme/new-nonce", "newOrder": "https://acme-v02.api.letsencrypt.org/acme/new-order", "revokeCert": "https://acme-v02.api.letsencrypt.org/acme/revoke-cert" }
पहला और सबसे स्पष्ट अंतर यह है कि चाबियाँ अलग हैं :)। मेरी राय में, वे बहुत अधिक सहज हो गए हैं। दूसरा अंतर रिप्ले-नॉनस प्राप्त करने के लिए एक अलग URL है। यह अब इस तरह किया जाता है:
curl -LD - 'https://acme-v02.api.letsencrypt.org/acme/new-nonce' HTTP/1.1 204 No Content Server: nginx Replay-Nonce: QQgdAERh1MLQ6LHC0SVmB9OJXBcEWnwGB53CP0V4JlQ X-Frame-Options: DENY Strict-Transport-Security: max-age=604800 Expires: Sat, 02 Jun 2018 09:49:47 GMT Cache-Control: max-age=0, no-cache, no-store Pragma: no-cache Date: Sat, 02 Jun 2018 09:49:47 GMT Connection: keep-alive
बेशक, हमारे लिए एक से अधिक बार काम आएगा।
अब बात करते हैं कि अबूझ परिवर्तनों के बारे में जो ACME v02 में बदल जाता है।
बस मामले में, मैं आपको याद दिलाता हूं कि हमारा पुराना POST अनुरोध
ACME के पहले संस्करण के साथ संवाद करने के लिए कैसे देखा गया था:
{ "header": jws,
अब सामान्य डेटा संरचना अलग होगी:
{ "protected": Base64Url(protected), "payload": Base64Url(payload),
जैसा कि आप देख सकते हैं, हेडर फ़ील्ड को रद्द कर दिया गया है। मेरे जैसे "क्रिप्टोग्राफी प्रेमियों" के महान आनंद के लिए प्रारंभिक चरण, बिल्कुल नहीं बदला है: हमें सभी समान
रसा कुंजी,
जेडडब्ल्यूके और
जेडब्ल्यूएस (
पहले भाग में इसके बारे
में अधिक) की आवश्यकता होगी।
पंजीकरण
उपयोगकर्ता को पंजीकृत करने के लिए, आपको केवल उपयोगकर्ता अनुबंध को स्वीकार करने और निर्देशिका से "newAccount" के लिए अनुरोध भेजने की आवश्यकता है।
payload = {"termsOfServiceAgreed": true}
और सही संरक्षित संकलन करें:
{ "alg" : "RS256", "jwk" : jwk, \\ JSON Web Key “url” : url, \\ “nonce” : Replay-Nonce \\ }
हम अनुरोध का मुख्य भाग बनाते हैं, इसे भेजते हैं और ... अपना समय लेते हैं!
एसीएमई से प्रतिक्रिया हेडर को सावधानीपूर्वक और सावधानीपूर्वक संसाधित करें। हमें एक हेडर मिलता है जिसे
लोकेशन कहते हैं और उसकी सामग्री को सहेजते हैं। यह तथाकथित
KID है - नए पंजीकृत उपयोगकर्ता की पहचान कुंजी। बाद के सभी अनुरोधों में
JWK के बजाय इस मान को संरक्षित रखने की आवश्यकता होगी।
सावधान रहें : यदि आप पुरानी योजना के अनुसार अनुरोध भेजना जारी रखते हैं, तो केवल त्रुटि संदेश ही उत्तर होगा।
यहाँ हमारे बाद संरक्षित है:
{ "alg" : "RS256", "kid" : kid, \\ “url” : url, \\ “nonce” : Replay-Nonce \\ }
प्रमाणपत्र आदेश
हम निर्देशिका ["newOrder"] को अनुरोध भेजने के लिए तैयार हो रहे हैं। हम अपने वेब डोमेन के सभी उपनामों को पेलोड में जोड़ते हैं जिसके लिए हम एक प्रमाण पत्र जारी करने जा रहे हैं:
payload ={ "identifiers":[ { "type":"dns", "value":"name1" }, ... { "type":"dns", "value":"nameN" } ] }
ध्यान रखें कि यदि आप वाइल्डकार्ड प्रमाणपत्र जारी करना चाहते हैं, तो नामों में केवल मुख्य नाम और "*" होना चाहिए - एक उपनाम। किसी भी अन्य नामों की उपस्थिति के परिणामस्वरूप रिलीज़ त्रुटि होगी।
प्रतिक्रिया में, हमें एक JSON मिलता है जिसमें डोमेन और URL के स्वामित्व की पुष्टि करने के तरीके हैं जो प्रमाणपत्र जारी करने के लिए उपयोग किया जाएगा।
{ "status":"pending", "expires":"2018-06-08T08:05:49.437251947Z", "identifiers":[ { "type":"dns", "value":"name1" }, { "type":"dns", "value":"www.name1" } ], "authorizations":[
इसके अलावा, हम चेक पर विस्तृत निर्देश प्राप्त करते हैं:
curl -o- 'https://acme-v02.api.letsencrypt.org/acme/authz/Xp0a_...' { "identifier":{ "type":"dns", "value":"name1" }, "status":"pending", "expires":"2018-06-08T08:05:49Z", "challenges":[ { "type":"http-01", "status":"pending", "url":"https://acme-v02.api.letsencrypt.org/acme/challenge/Xp0a_.../4906756205", "token":"Me_cKM2Stu3iyCJQWEssho8Kj2nvRKuSJvIPF5tRyko" }, { "type":"dns-01", "status":"pending", "url":"https://acme-v02.api.letsencrypt.org/acme/challenge/Xp0a_.../4906756206", "token":"p-0xyySPQClTXVlgTxwJUvVOQtdHmNPpFht95bWrq8s" } ] }
पुष्टि प्रक्रिया
ACME v01 के लिए लागू की गई से अलग नहीं है।
कृपया ध्यान दें: वाइल्डकार्ड प्रमाणपत्र के लिए, आपको "dns-01" पुष्टिकरण का चयन करना होगा।
एक प्रमाण पत्र प्राप्त करना
पुष्टिकरण प्रक्रिया के बाद, यह
अंतिम URL को कॉल करने के लिए बना रहता है। थोड़ा विलंब संभव है, इसलिए, इस पते पर एक GET अनुरोध तब तक किया जाना चाहिए जब तक कि हमें प्रतिक्रिया में निम्नलिखित न मिलें:
{ "status": "valid",
प्रमाण पत्र में पहले से ही एक श्रृंखला होगी, इसलिए यह काम के लिए पूरी तरह से तैयार है।
पहले की तुलना में,
ACME का दूसरा संस्करण बहुत अधिक सुविधाजनक और समझने योग्य हो गया है। एकीकरण लिखना और भी आसान हो गया है, यह देखते हुए कि "क्रिप्टोग्राफी" स्वयं नहीं बदली है। मैं इस अद्भुत उपकरण के विकास के लिए दिलचस्पी के साथ देख रहा हूं और यदि कोई महत्वपूर्ण और उपयोगी परिवर्तन होता है, तो मैं निश्चित रूप से ताजा जानकारी के साथ यहां लौटूंगा।