एक सर्वर से सुरक्षित कनेक्शन का उपयोग करने वाला सॉफ्टवेयर बनाना हर डेवलपर के पास एक कौशल होना चाहिए। भले ही आप एक विशिष्ट उत्पादन वातावरण में एसएसएल को सक्षम नहीं करना चुनते हैं, आपको पता होना चाहिए कि आपके द्वारा काम करने वाले प्रत्येक सर्वर से कनेक्शन कैसे सुरक्षित किया जाए। यह पोस्ट हमारे जावा प्रशंसकों के लिए पायथन में रेडिस एंटरप्राइज क्लाउड के लिए सुरक्षित कनेक्शन को सक्षम करने का वादा किया गया अनुवर्ती है।
यह पोस्ट एसएसएल का उपयोग करके रेडिस एंटरप्राइज क्लाउड और जावा क्लाइंट प्रोग्राम के बीच एन्क्रिप्टेड कनेक्शन को चालू, परीक्षण और कॉन्फ़िगर करने के लिए एक आसान प्रक्रिया के माध्यम से चलता है। जावा प्रोग्राम के लिए एसएसएल को सक्षम करने के भ्रमित भागों में से एक प्रमाण पत्र और चाबियों को एक प्रारूप में परिवर्तित करना है जिसे जावा समझता है। यह एक जावा-ओनली प्रक्रिया है जिसे हमें अपनी प्रक्रिया के परीक्षण और कॉन्फ़िगरेशन चरणों के बीच में घुसना होगा।
टूलसेट
इन उपकरणों को पकड़ो, ताकि आप रेडिस पर एसएसएल को सक्षम करने के लिए उस टिकट को बंद कर सकें:
- Redis Enterprise Cloud account
- OpenSSL
- Java SE JDK
- जेडिस
आपको बैश शेल स्थापित करने की भी आवश्यकता होगी ताकि आप एक छोटी सी स्क्रिप्ट चला सकें जो हम प्रदान करते हैं। यदि आपके ऑपरेटिंग सिस्टम में मानक इंस्टॉल के हिस्से के रूप में बैश शामिल नहीं है, तो आपको इसे इंस्टॉल करना होगा या हमारी स्क्रिप्ट को अपने पसंदीदा शेल में अनुवाद करना होगा।
एसएसएल का उपयोग करने के लिए, आपकी रेडिस एंटरप्राइज क्लाउड सदस्यता में एसएसएल सुविधा सक्षम होनी चाहिए। यदि आपका खाता एसएसएल के लिए पहले से सक्षम नहीं है, तो आपको इसे सक्षम करने के लिए रेडिस सहायता टीम से संपर्क करना होगा। आपको अपने खाते के डैशबोर्ड के मुख्य मेनू में सहायता टीम से संपर्क करने के लिए एक लिंक मिलेगा। एसएसएल की स्थापना के लिए दस्तावेज रेडिस एंटरप्राइज क्लाउड ऑपरेशंस एंड एडमिनिस्ट्रेशन गाइड में पाया जा सकता है।
एसएसएल बनाम टीएलएस
बस एक अनुस्मारक:जैसा कि हमारे पायथन पोस्ट में, हम "एसएसएल" या "टीएलएस" -सिक्योर्ड कनेक्शन को संदर्भित करने के लिए संक्षिप्त "एसएसएल" का उपयोग करने के अनौपचारिक सम्मेलन का पालन करने जा रहे हैं। भले ही रेडिस एंटरप्राइज क्लाउड वर्तमान में (जून 2018) कनेक्शन सुरक्षित करने के लिए टीएलएस प्रोटोकॉल के संस्करण 1.2 का उपयोग करता है, रेडिस एंटरप्राइज क्लाउड और जेडिस दोनों "एसएसएल" का उपयोग करते हैं, इसलिए हम सूट का पालन करने जा रहे हैं।
एक और दो कदम
पहले दो चरण उन चरणों के समान हैं जिनका उपयोग पायथन क्लाइंट के लिए एसएसएल सेट करने के लिए किया जाता है। यह सब यहाँ दोहराने के बजाय, हम आपको अपने पायथन पोस्ट पर वापस भेजने जा रहे हैं। किसी भी भाषा में एसएसएल के साथ काम करने के लिए उस पोस्ट में बहुत सारी उपयोगी जानकारी है। मेरा सुझाव है कि आगे बढ़ने से पहले आप चरण 3 तक सब कुछ पढ़ लें।
चरण 2 के बाद जावा के लिए प्रक्रिया अलग-अलग होने लगती है, इसलिए हम यहां चरण 2.5 डालने जा रहे हैं ताकि आपके द्वारा Redis Enterprise Cloud से डाउनलोड की गई क्रेडेंशियल फ़ाइलों को JavaSE के साथ अच्छी तरह से काम करने वाले प्रारूप में परिवर्तित किया जा सके।
चरण 2.5:क्रेडेंशियल बदलना
JavaSE के एक मानक भाग के रूप में, Oracle जावा क्रिप्टोग्राफी आर्किटेक्चर (JCA) सहित कई प्रकार की सुरक्षा सेवाएँ प्रदान करता है। JCA प्लग-इन प्रदाताओं द्वारा कार्यान्वित सुरक्षा सेवाओं को लागू करने के लिए जावा अनुप्रयोगों के लिए एपीआई के एक सेट को परिभाषित करता है। एप्लिकेशन किसी भी उपलब्ध प्रदाता (जो अक्सर मानक एपीआई से परे अतिरिक्त सेवाएं प्रदान करते हैं) का उपयोग करने के लिए स्वतंत्र हैं, लेकिन अधिकांश एप्लिकेशन जेडीके के साथ भेजे गए डिफ़ॉल्ट प्रदाताओं का उपयोग करते हैं।
डिफ़ॉल्ट प्रदाताओं का उपयोग करने की चुनौती यह है कि वे पीईएम प्रारूप का समर्थन नहीं करते हैं जो आमतौर पर लिनक्स एसएसएल पुस्तकालयों के साथ प्रमाण पत्र और चाबियों को संग्रहीत करने के लिए उपयोग किया जाता है। JCA में, क्रेडेंशियल सामग्री को पासवर्ड-संरक्षित कीस्टोर रिपॉजिटरी में संग्रहीत किया जाता है। जावा अनुप्रयोगों में, दो रिपॉजिटरी का उपयोग करना आम है:एक को दस्तावेज़ीकरण में कीस्टोर के रूप में संदर्भित किया जाता है और दूसरे को ट्रस्टस्टोर के रूप में संदर्भित किया जाता है। कीस्टोर का उपयोग क्लाइंट सॉफ़्टवेयर के लिए प्रमाणपत्र और निजी कुंजियों को संग्रहीत करने के लिए किया जाता है और ट्रस्टस्टोर का उपयोग प्रमाणपत्र प्राधिकरणों से विश्वसनीय प्रमाणपत्रों को संग्रहीत करने के लिए किया जाता है। PEM प्रारूप का उपयोग Redis Enterprise Cloud द्वारा किया जाता है, इसलिए हमने OpenSSL और Java Keytool का उपयोग करके एक स्क्रिप्ट बनाई है, जो आपकी PEM फ़ाइलों को आपके Java क्लाइंट प्रोग्राम के लिए उपयोग करने योग्य ट्रस्टस्टोर और कीस्टोर में बदलने के लिए आवश्यक सभी आदेशों को निष्पादित करने के लिए है।
निम्न स्क्रिप्ट, transmogrify.sh, उस निर्देशिका से चलाई जानी चाहिए जहां आपने अपना redis_credentials.zip अनपैक किया था। स्क्रिप्ट एक ट्रस्टस्टोर (redis_truststore.p12) बनाने के लिए Redis प्रमाणपत्र प्राधिकरण प्रमाणपत्र (redis_ca.pem) का उपयोग करती है और एक कीस्टोर (redisclient_keystore.p12) बनाने के लिए क्लाइंट प्रमाणपत्र (redis_user.crt) और संबंधित निजी कुंजी (redis_user_private.key) का उपयोग करती है। . जबकि क्लाइंट कीस्टोर पासवर्ड से सुरक्षित है, फिर भी आपको अपने कीस्टोर की सुरक्षा सुनिश्चित करने के लिए कदम उठाने चाहिए। कीस्टोर और ट्रस्टस्टोर दोनों को प्रत्येक क्लाइंट को वितरित करने की आवश्यकता होगी जो एक विशेष रेडिस डेटाबेस इंस्टेंस से जुड़ता है, इसलिए फिर से आप इन फाइलों को अपने क्रेडेंशियल मैनेजमेंट सिस्टम में एकीकृत करना चाहेंगे।
JDK9 से पहले के जावा संस्करणों ने मालिकाना Java KeyStore (JKS) प्रारूप का समर्थन किया, लेकिन JDK9 से शुरू होकर, जावा उद्योग मानक PKCS12 प्रारूप में डिफ़ॉल्ट है। यह स्क्रिप्ट PKCS12 प्रारूप स्टोर बनाती है, लेकिन यदि आप स्क्रिप्ट को संशोधित कर सकते हैं, तो स्टोर प्रकार विकल्प और फ़ाइल एक्सटेंशन को बदलकर JKS प्रारूप का उपयोग करें।
चरण 3:SSL को अपने क्लाइंट कोड में कॉन्फ़िगर करें
अपने जावा क्लाइंट में एसएसएल को सक्षम करने का अंतिम चरण एसएसएल कनेक्शन स्थापित करने के लिए क्लाइंट कोड को संशोधित करना है। हमारा नमूना कोड हमारे रेडिस एंटरप्राइज क्लाउड इंस्टेंस के लिए एक सुरक्षित कनेक्शन स्थापित करेगा, फिर रेडिस पिंग कमांड भेजेगा। हमारा संशोधित कोड इस तरह दिखता है:
आप देखेंगे, कोड में कहीं भी हम चरण 2.5 में अपने जावा प्रोग्राम के लिए बनाए गए कीस्टोर या ट्रस्टस्टोर का संदर्भ नहीं देते हैं। JCA प्रदाताओं का डिफ़ॉल्ट व्यवहार सर्वर को प्रमाणित करता है; हमें बस अपनी कुंजी और प्रमाणपत्र की जानकारी देनी है। यह JCA प्रदाताओं द्वारा पढ़े गए सिस्टम गुणों के साथ किया जा सकता है। अपने IDE एप्लिकेशन कॉन्फ़िगरेशन या जावा कमांड लाइन में निम्नलिखित पैरामीटर जोड़ें:
आपके सिस्टम से उपयुक्त स्थानों और पासवर्ड का उपयोग करने के लिए उन्हें संशोधित करना।
कीस्टोर गुण:
- javax.net.ssl.keyStoreType=PKCS12
- javax.net.ssl.keyStore=/Users/tague/dev/ssl-testj/redisclient_keyStore.p12
- javax.net.ssl.keyStorePassword=redis
transmogrify स्क्रिप्ट द्वारा बनाए गए कीस्टोर के लिए प्रकार (उर्फ प्रारूप), स्थान और पासवर्ड निर्दिष्ट करें। इसी तरह, ट्रस्टस्टोर गुण:
- javax.net.ssl.trustStoreType=PKCS12
- javax.net.ssl.trustStore=/Users/tague/dev/ssl-testj/redis_truststore.p12
- javax.net.ssl.trustStorePassword=redis
ट्रस्टस्टोर का प्रकार, स्थान और पासवर्ड निर्दिष्ट करें। अंतिम गुण javax.net.debug=ssl:handshake एक वैकल्पिक गुण है जिसका उपयोग डीबगिंग जानकारी को सक्षम करने के लिए किया जाता है।
एसएसएल का उपयोग करने के लिए जेडिस को कॉन्फ़िगर करना विशेष रूप से कठिन नहीं है, लेकिन यदि आप पीईएम क्रेडेंशियल्स को जावा कुंजी और ट्रस्टस्टोर में बदलने के लिए आवश्यक कदमों से अपरिचित हैं, तो यह पहली बार में बंद हो सकता है।
उम्मीद है, इस पोस्ट ने हमारे जावा प्रशंसकों को रेडिस एंटरप्राइज क्लाउड के लिए एक सुरक्षित कनेक्शन स्थापित करने के लिए उसी कोमल परिचय के साथ प्रदान किया जो हमने पायथन डेवलपर्स को दिया था। मैं आपको सुरक्षा के बारे में एक अंतिम अनुस्मारक के साथ छोड़ना चाहता हूं:अधिकांश संगठनों में पासवर्ड और निजी कुंजी के प्रबंधन के लिए विशिष्ट नीतियां और प्रक्रियाएं होती हैं। यह सुनिश्चित करने के लिए कि आप उनके दिशानिर्देशों का पालन कर रहे हैं, कृपया अपने संचालन और सुरक्षा टीमों के साथ जांच करना सुनिश्चित करें।