2009-04-06 10 views
10

See related question.जावा में एसएसएल सॉकेट बनाने के लिए पीईएम फ़ाइल का उपयोग कैसे करें?

मैं एक पीईएम फ़ाइल मुझे प्रदान की और बताया गया था कि यह एक एसएसएल सॉकेट कुछ API कॉल के लिए एक सी ++ सर्वर से कनेक्ट करता है कि स्थापित करने में की आवश्यकता होगी है। क्या किसी को पता है कि मैं पीईएम फ़ाइल में कैसे पढ़ सकता हूं और कनेक्ट कर सकता हूं? मुझे पारदर्शी पासवर्ड भी दिया गया था।

+0

डुप्लिकेट; मुझे लगता है कि प्रश्न का दूसरा संस्करण अधिक जानकारीपूर्ण है। – erickson

उत्तर

9

ऐसा लगता है कि सर्वर पर लॉगिन करने के लिए पीईएम फ़ाइल क्लाइंट प्रमाण है। यदि यह क्लाइंट प्रमाण है, और ऐसा लगता है, तो कनेक्शन स्थापित करने के लिए आपको सर्वर प्रमाण पत्र को सत्यापित करने के लिए उपयोग करने के लिए एक सीए प्रमाणपत्र फ़ाइल की भी आवश्यकता होगी।

सीए केर्ट्स को ट्रस्टस्टोर में जाने की आवश्यकता है और आपके क्लाइंट केर्ट को एक कीस्टोर में जाने की आवश्यकता है। जावा में, ये दोनों जेकेएस होंगे (हालांकि इसमें पीकेसीएस 12 के लिए सीमित समर्थन है।) जेआरई के साथ-साथ प्रत्येक उपयोगकर्ता के लिए डिफ़ॉल्ट कीस्टोर/ट्रस्टस्टोर स्थान भी हैं। आप नीचे दिए गए उदाहरणों में, अपने कोड में इन फ़ाइलों के लिए बाहरी स्थान भी निर्दिष्ट कर सकते हैं। कॉमन्स-एसएसएल लाइब्रेरी जेकेएस की आवश्यकता के बिना सीधे पीईएम का समर्थन करने में सक्षम है, लेकिन मैंने इसका इस्तेमाल नहीं किया है।

जावा में इन कीस्टोरों के लिए डिफ़ॉल्ट पासफ्रेज उद्धरण के बिना "परिवर्तन" है।

This page दिखाता है कि आपको अपने कीस्टोर/ट्रस्टस्टोर में पीईएम पढ़ना है। यहां another example है।

बार जब आप अपने truststore और कीस्टोर ठीक तरह से स्थापित है, तो आप अपने JVM के लिए निम्न JSSE system properties पारित करने के लिए की जरूरत है:

javax.net.ssl.keyStore 
javax.net.ssl.keyStoreType 
javax.net.ssl.keyStorePassword 
javax.net.ssl.trustStore 
javax.net.ssl.trustStoreType 
javax.net.ssl.trustStorePassword 

आप उन्हें JRE के लिए डी पैरामीटर के रूप में उदाहरण के रूप में निर्दिष्ट कर सकता है या, नीचे, प्रोग्रामेटिक रूप से।

एक बार जब आप इसे समाप्त कर लेंगे, तो सॉकेट बनाने के commons-ssl example का पालन करें। साथ ही, SSLSocket के लिए जावा एपीआई है। हेरेस भी example है जो किसी भी अपाचे कॉमन्स का उपयोग नहीं करता है।

+1

अहम .. अच्छा जवाब - लेकिन उसने वास्तव में सी ++ के बारे में पूछा, जावा नहीं। – Guss

+4

दरअसल, उन्होंने जावा और जेकेएस को टैग किया, जो जावा कीस्टोर है। वह एक दूरस्थ सर्वर से कनेक्ट करना चाहता है जो एक एसएसएल सॉकेट का उपयोग करके किया जाएगा। तथ्य यह है कि दूसरी तरफ सी ++ कनेक्शन तंत्र के लिए इतना प्रासंगिक नहीं है। –

0

आपको एक पुस्तकालय की आवश्यकता है जो SSL को संभालती है। जैसा कि जॉन एलिनवुड ने नोट किया था, कुछ ढांचे (जैसे कि जावा 2 एसई) इन अंतर्निहित ऑफ़र प्रदान करते हैं, दूसरों के लिए आपको तीसरे पक्ष के पुस्तकालयों का उपयोग करने की आवश्यकता होगी।

सी डेवलपर्स अक्सर ओपनस्ल का उपयोग सीधे करते हैं, लेकिन इसे आसान नहीं कहा जा सकता है और सी ++ का उपयोग करते समय कई "गॉथचास" होते हैं जो आसानी से गिरने में आसान होते हैं।

मेरा सुझाव है कि आप एसएस के लिए समर्थन के साथ सी ++ नेटवर्क लाइब्रेरी का उपयोग करें, जैसे क्यूटी की नेटवर्क लाइब्रेरी, या पोको नेटएसएसएल। एपीआई दस्तावेज के लिए कुछ ट्यूटोरियल प्रलेखन and here के लिए here देखें - शायद आप initializeClient पर एक नज़र डालना चाहते हैं जो सीधे पीईएम फ़ाइल लेता है।

संबंधित मुद्दे