डेवलपर टूल · Base64 एनकोडर और डिकोडर
PEM ने समझाया: प्रमाणपत्र और कुंजियाँ BEGIN और END के बीच Base64 क्यों हैं
· पेजभूमि
Base64 एन्कोडिंग
एक PEM फ़ाइल DER बाइनरी है जिसे लेबल वाली कवच रेखाओं के साथ Base64 में लपेटा गया है। यह पोस्ट प्रारूप की उत्पत्ति, उसके लाइन नियमों और किसी को डिकोड करके आप क्या सीख सकते हैं और क्या नहीं सीख सकते हैं, इसकी व्याख्या करती है।
प्रमाणपत्र जो 'टेक्स्ट जैसा दिखता है' लेकिन पार्स करने में विफल रहता है - एक हेडर टाइपो, एक स्ट्रे कैरिज रिटर्न और नीचे का प्रारूप
एक PEM फ़ाइल Base64-एन्कोडेड बाइनरी है जो टेक्स्ट लेबल में लिपटी हुई है। यह नाम गोपनीयता-उन्नत मेल (RFC 1421, 1992) से आया है, जो एन्क्रिप्टेड संदेशों के लिए इस प्रारूप का उपयोग करता है। यह प्रारूप आज भी TLS प्रमाणपत्रों, SSH कुंजियों और GPG कुंजियों में मौजूद है। संरचना सरल है: एक पंक्ति कहती है -----BEGIN CERTIFICATE----- (या BEGIN PRIVATE KEY, BEGIN PUBLIC KEY, आदि), इसके बाद Base64 पाठ की 64-वर्ण पंक्तियों द्वारा, उसके बाद -----END CERTIFICATE-----।
Base64 बॉडी DER (विशिष्ट एन्कोडिंग नियम) नामक बाइनरी प्रारूप में डीकोड करती है, जो संरचित डेटा (विशेष रूप से, ASN.1 संरचनाओं) को क्रमबद्ध करने का एक तरीका है। Base64 को डिकोड करने से आपको बाइनरी मिलती है; बाइनरी को पढ़ने के लिए ASN.1 को समझने की आवश्यकता होती है, जो जटिल है। PEM कवच मौजूद है क्योंकि बाइनरी फ़ाइलों को ईमेल करना और संपादित करना कठिन है। शुद्ध बाइनरी फॉर्म में एक प्रमाणपत्र फ़ाइल पुराने मेल सिस्टम, USENET, या वेब फॉर्म से गुजरने पर दूषित हो जाएगी।
टेक्स्ट कवच PEM ब्लॉक में दिखाई देता है - Base64 बॉडी के चारों ओर लेबल
बाइनरी को Base64-एन्कोडिंग करके और इसे टेक्स्ट लेबल में लपेटकर, संपूर्ण प्रमाणपत्र 7-बिट ASCII टेक्स्ट बन जाता है जो किसी भी ट्रांसपोर्ट से बच जाता है। एक टेक्स्ट एडिटर इसे खोल सकता है; एक मेल सिस्टम इसे भ्रष्ट नहीं करेगा. -----BEGIN और -----END लाइनें मनुष्यों और स्वचालित टूलों के लिए लेबल हैं; वे स्पष्ट रूप से चिह्नित करते हैं कि अंदर किस प्रकार का डेटा है। प्रमाणपत्र को CERTIFICATE लेबल किया गया है; एक निजी कुंजी को PRIVATE KEY लेबल किया गया है।
लेबल क्रिप्टोग्राफ़िक सॉफ़्टवेयर द्वारा सत्यापित नहीं है; यह मनुष्यों और औजारों के लिए एक संकेत मात्र है। PEM में 64-वर्ण रेखा सीमा RFC 1421 से आती है और ईमेल Base64 के समान MIME तर्क है: पुराने मेल सिस्टम में लाइन-लंबाई सीमाएं थीं, और 64 वर्ण 1980 के दशक के टर्मिनल पर फिट होते हैं। PEM Base64 आउटपुट को 64 वर्णों पर एक पंक्ति अंत के साथ लपेटता है (विंडोज़ पर CR LF, Unix पर LF)।
लेबल किए गए टेक्स्ट से लेकर डिकोड किए गए बाइट्स तक - यह रिपॉजिटरी प्रारूप इतिहास स्थापित नहीं करता है
PEM प्रमाणपत्र को डिकोड करते समय, पार्सर को कवच रेखाओं (-----BEGIN..., -----END...) को हटाना होगा और रेखा टूट जाती है, फिर Base64-शेष को डिकोड करता है। आवारा गाड़ी की वापसी या बेमेल लेबल पार्सिंग को तोड़ सकता है। लाइन रैपिंग Base64 मानक का हिस्सा नहीं है (RFC 4648 Base64 अनरैप्ड है); यह PEM के लिए विशिष्ट है। Base64 के अंदर DER-एन्कोडेड बाइनरी है। DER ASN.1 (सार सिंटैक्स नोटेशन) है, जो डेटा संरचनाओं का प्रतिनिधित्व करने के लिए एक जटिल विनिर्देश है।
प्रमाणपत्र एक संरचित रिकॉर्ड है जिसमें विषय का नाम, सार्वजनिक कुंजी, हस्ताक्षर और मेटाडेटा होता है। ASN.1 सीधे बाइट्स का वर्णन नहीं करता है; यह बताता है कि संरचना को कैसे एन्कोड किया जाना चाहिए।
इस टूल में इनपुट के रूप में ब्लॉक की शारीरिक रचना - लेबल हटाएं और केवल Base64 बॉडी पास करें
एन्कोडिंग टैग-लंबाई-मान ट्रिपलेट्स से शुरू होती है। उदाहरण के लिए, ASN.1 में SEQUENCE को टैग 0x30 के रूप में एन्कोड किया गया है, उसके बाद सामग्री की लंबाई, उसके बाद सामग्री स्वयं। एक प्रमाणपत्र हमेशा बाइट्स 0x30 0x82 (अनुक्रम, लंबाई दो बाइट्स में एन्कोडेड) से शुरू होता है, जो Base64 में MII के रूप में दिखाई देता है।
किसी प्रमाणपत्र को पार्स किए बिना उसकी जाँच करना: PEM प्रमाणपत्र निकाय के पहले तीन अक्षर लगभग हमेशा MII होते हैं (जो कि Base64 में 0x30 0x82 है, SEQUENCE की शुरुआत)। यदि PEM ब्लॉक 0x30 पर डिकोड नहीं होता है, तो Base64 भ्रष्ट है या लेबल गलत है। Base64 एनकोडर और डिकोडर टूल बॉडी को डीकोड कर सकता है और आपको हेक्स दिखा सकता है: Base64 लाइनों को पेस्ट करें (बिना -----BEGIN और END कवच के बिना), लाइन ब्रेक हटाएं और डीकोड करें।
डिकोडिंग क्या उजागर करती है: बाइनरी बाइट्स, पार्स किए गए प्रमाणपत्र फ़ील्ड नहीं
यदि आउटपुट बाइनरी है जो 30 82 से शुरू होता है, तो यह संभवतः एक वैध प्रमाणपत्र संरचना है। यदि यह अस्पष्ट या टेक्स्ट है, तो डिकोड विफल हो गया है या Base64 गलत है। सामान्य PEM त्रुटियाँ: एक लेबल बेमेल (उदाहरण के लिए, PRIVATE KEY लेबल वाला एक प्रमाणपत्र निकाय), एक विंडोज़ लाइन-एंडिंग समस्या (कुछ पार्सर्स CRLF पर अटक जाते हैं), आर्मर लाइन में एक टाइपो (अतिरिक्त स्थान या अक्षर), या गायब लाइन ब्रेक।
टूल अपेक्षा करते हैं -----BEGIN CERTIFICATE----- नहीं -----BEGIN CERT----- या BEGIN CERTIFICATE। वेब ब्राउज़र से PEM या PDF को कॉपी-पेस्ट करने से लेबल टूटकर ASCII उद्धरण के बजाय यूनिकोड उद्धरण या स्मार्ट उद्धरण आ सकते हैं। प्रमाणपत्र फ़ील्ड में निजी कुंजी चिपकाना एक सामान्य गलती है; पार्सर इसे अस्वीकार कर देगा क्योंकि लेबल मेल नहीं खाता है। PEM एक फ़ाइल में एकाधिक ब्लॉक का समर्थन करता है।
व्यावहारिक उदाहरण: एक संक्षिप्त बॉडी को डीकोड करें और प्रमाणपत्र हस्ताक्षर का दावा किए बिना बाइट्स का निरीक्षण करें
एक SSH कुंजी फ़ाइल में एक निजी कुंजी (PRIVATE KEY लेबल) और एक सार्वजनिक कुंजी (PUBLIC KEY लेबल) या एकाधिक प्रमाणपत्र ब्लॉक दोनों शामिल हो सकते हैं। एक पार्सर फ़ाइल को ऊपर से पढ़ता है, -----BEGIN से शुरू होने वाली पंक्तियों की तलाश करता है। जब इसे कोई मिल जाता है, तो यह मिलान लेबल के साथ -----END तक पढ़ता है, शरीर को निकालता है और Base64-डीकोड करता है, और इसे संसाधित करता है। फिर यह अगले ब्लॉक की तलाश जारी रखता है।
एक फ़ाइल में आकस्मिक रूप से संयोजित प्रमाणपत्र श्रृंखला (एक प्रमाणपत्र और उसके मध्यवर्ती के लिए एकाधिक PEM ब्लॉक) मान्य है यदि सभी लेबल सही हैं। PEM प्रारूप को 1990 के दशक की शुरुआत में गोपनीयता-उन्नत मेल (RFC 1421) के लिए मानकीकृत किया गया था।
इसमें क्या शामिल नहीं है - ASN.1 संरचनाओं, निजी कुंजी एन्क्रिप्शन और PKCS#12 बंडलों को पार्स करना
RFC 7468 (2015) ने लाइन-लंबाई नियमों, कवच-रेखा प्रारूप और किनारे के मामलों को स्पष्ट करते हुए परिभाषा को आधुनिक बनाया। अधिकांश टूल और मानक अब RFC 7468 का संदर्भ देते हैं। अन्य बाइनरी-टू-टेक्स्ट प्रारूप मौजूद हैं (जैसे कुछ प्रोटोकॉल के लिए DER-to-hex), लेकिन Base64 और ASCII लेबल के साथ PEM क्रिप्टोग्राफी और TLS के लिए वास्तविक मानक है क्योंकि यह मानव-पठनीय, सादा पाठ है, और कॉपी करना या भेजना आसान है।
एक PEM ब्लॉक बनाना: DER बाइनरी लें (उदाहरण के लिए, क्रिप्टोग्राफ़िक लाइब्रेरी से एक प्रमाणपत्र), इसे Base64 पर एनकोड करें, परिणाम को लाइन ब्रेक के साथ 64 वर्णों में लपेटें, और इसे -----BEGIN CERTIFICATE----- से घेरें और -----END CERTIFICATE----- पंक्तियाँ। PEM ब्लॉक को पार्स करना: -----BEGIN और -----END लाइनें ढूंढें, Base64 बॉडी निकालें (कवच और लाइन ब्रेक को हटाकर), बाइनरी प्राप्त करने के लिए Base64-डीकोड करें, फिर DER को पार्स करें और ASN.1 बाइनरी।
टेकअवे: PEM लेबल के साथ Base64 है - कैसे Base64 एनकोडर और डिकोडर आपको ब्लॉक के Base64 बॉडी को आज़माने के लिए एक स्थानीय स्थान देता है, पूरी तरह से ब्राउज़र में
अधिकांश टूल इसे स्वचालित करते हैं; आप शायद ही कभी हाथ से PEM का निर्माण करते हैं। लेकिन पार्सिंग त्रुटि को डीबग करते समय या किसी प्रमाणपत्र को मैन्युअल रूप से सत्यापित करते समय संरचना को समझना उपयोगी होता है। PEM प्रमाणपत्र टेक्स्ट जैसा दिखता है, लेकिन सामग्री बाइनरी डेटा है। आरंभ और अंत लेबल को पढ़ने से आपको यह नहीं पता चलता कि प्रमाणपत्र में क्या है; विषय का नाम, सार्वजनिक कुंजी, जारीकर्ता और समाप्ति देखने के लिए आपको Base64 को डीकोड करना होगा और ASN.1 को पार्स करना होगा।
Base64 एनकोडर और डिकोडर टूल बॉडी को डीकोड कर सकता है ताकि आप पहले कुछ बाइट्स का निरीक्षण कर सकें। पूर्ण पार्सिंग के लिए, आपको ASN.1 पार्सर की आवश्यकता है (अधिकांश प्रोग्रामिंग भाषाओं में इसके लिए लाइब्रेरी हैं)। मुख्य अंतर्दृष्टि यह है कि PEM एक कंटेनर प्रारूप है: इसमें केवल प्रमाणपत्र ही नहीं, बल्कि कोई भी DER-एन्कोडेड डेटा होता है। लेबल आपको इच्छित उपयोग बताता है, लेकिन पार्सर को डेटा प्रकार को सही ढंग से संभालना होगा।