जवाबों:
एक कीस्टोर में निजी कुंजी होती है, और उनके संबंधित सार्वजनिक कुंजी के साथ प्रमाण पत्र होते हैं।
एक ट्रस्टस्टोर में अन्य पार्टियों के प्रमाण पत्र होते हैं, जिनके साथ आप संवाद करने की अपेक्षा करते हैं, या प्रमाणपत्र अधिकारियों से जिन्हें आप अन्य दलों की पहचान करने के लिए भरोसा करते हैं।
TrustStore
प्रति se नहीं है । या मैं इसे जावा डॉक्स (उदाहरण के लिए java.security.TrustStore
) में नहीं मिला। जब हम किसी सर्टिफिकेट अथॉरिटी पर भरोसा करना चाहते हैं, तो उस पर KeyStore
(और KeyStore
इसे पारित किया जाता है TrustManagerFactory
) के माध्यम से भरोसा किया जाता है ।
एक कीस्टोर में निजी कुंजी होती है। यदि आप एक सर्वर हैं, या यदि सर्वर को क्लाइंट प्रमाणीकरण की आवश्यकता है, तो आपको इसकी आवश्यकता है।
एक ट्रस्टस्टोर में CA प्रमाणपत्रों पर भरोसा होता है। यदि आपके सर्वर का प्रमाणपत्र किसी मान्यता प्राप्त CA द्वारा हस्ताक्षरित है, तो JRE के साथ आने वाले डिफ़ॉल्ट ट्रस्टस्टोर पहले से ही इस पर भरोसा करेंगे (क्योंकि यह पहले से ही भरोसेमंद CA पर भरोसा करता है), इसलिए आपको अपना स्वयं का निर्माण करने या किसी को कुछ भी जोड़ने की आवश्यकता नहीं है। JRE से।
SSL हैंडशेक में TrustStore का उद्देश्य क्रेडेंशियल्स को सत्यापित करना है और KeyStore का उद्देश्य क्रेडेंशियल प्रदान करना है ।
keyStore
जावा में keyStore उनकी सार्वजनिक कुंजी के अनुरूप निजी कुंजी और प्रमाणपत्र संग्रहीत करता है और आवश्यकता होती है कि आप एसएसएल सर्वर या एसएसएल क्लाइंट प्रमाणीकरण की आवश्यकता है।
TrustStore
TrustStore तृतीय पक्ष से प्रमाणपत्र संग्रहीत करता है, आपका जावा एप्लिकेशन संचार या CA द्वारा हस्ताक्षरित प्रमाण पत्र (वेरीसिग, थावटे, जियोट्रस्टी या गोएड्डी जैसे प्रमाण पत्र प्राधिकारी) जो तीसरे पक्ष की पहचान करने के लिए उपयोग किया जा सकता है।
TrustManager
TrustManager यह निर्धारित करता है कि दूरस्थ कनेक्शन पर भरोसा किया जाना चाहिए या नहीं अर्थात दूरस्थ पार्टी वह है जो यह दावा करता है और KeyManager यह निर्णय लेता है कि SSL हैंडशेक के दौरान प्रमाणीकरण के लिए कौन से प्रमाणीकरण क्रेडेंशियल को दूरस्थ होस्ट को भेजा जाना चाहिए।
यदि आप एक एसएसएल सर्वर हैं, तो आप कुंजी एक्सचेंज एल्गोरिथ्म के दौरान निजी कुंजी का उपयोग करेंगे और क्लाइंट के लिए अपनी सार्वजनिक कुंजी के अनुरूप प्रमाण पत्र भेजेंगे, यह प्रमाणपत्र कीस्टोर से हासिल किया गया है। SSL क्लाइंट की तरफ, यदि इसके जावा में लिखा गया है, तो यह सर्वर की पहचान को सत्यापित करने के लिए ट्रस्टस्टोर में संग्रहीत प्रमाणपत्र का उपयोग करेगा। SSL प्रमाणपत्र सबसे अधिक के रूप में आता हैं .cer जो किसी भी प्रमुख प्रबंधन उपयोगिता जैसे का उपयोग करके KeyStore या trustStore में जोड़ा जाता है फ़ाइल Keytool ।
आप मानक JSSE प्रलेखन के भाग के रूप में, सन से लिखने में भी दिलचस्पी ले सकते हैं:
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores
आमतौर पर, ट्रस्ट स्टोर का उपयोग केवल सार्वजनिक कुंजी को स्टोर करने के लिए किया जाता है, सत्यापन प्रयोजनों के लिए, जैसे कि X.509 प्रमाणीकरण। प्रबंधनीय उद्देश्यों के लिए, यह केवल एक स्टोर में प्रवेशकर्ताओं या डेवलपर्स के लिए आम बात है।
जावा में, कीस्टोर और ट्रस्टस्टोर के बीच क्या अंतर है?
जावा सुरक्षित सॉकेट एक्सटेंशन (JSSE) संदर्भ गाइड में जावा डॉक्स से इसका वर्णन यहां दिया गया है । मुझे नहीं लगता कि यह आपको दूसरों से कही गई बातों से अलग बताता है। लेकिन यह आधिकारिक संदर्भ प्रदान करता है।
कुंजीस्टोर / truststore
कीस्टॉर प्रमुख सामग्री का एक डेटाबेस है। मुख्य सामग्री का उपयोग प्रमाणीकरण और डेटा अखंडता सहित विभिन्न उद्देश्यों के लिए किया जाता है। PKCS12 और Oracle के JKS सहित विभिन्न प्रकार के कीस्टोर्स उपलब्ध हैं।
सामान्यतया, कीस्टोर सूचना को दो श्रेणियों में बांटा जा सकता है: मुख्य प्रविष्टियाँ और विश्वसनीय प्रमाणपत्र प्रविष्टियाँ। एक कुंजी प्रविष्टि में एक इकाई की पहचान और इसकी निजी कुंजी होती है, और इसे विभिन्न क्रिप्टोग्राफ़िक उद्देश्यों के लिए उपयोग किया जा सकता है। इसके विपरीत, एक विश्वसनीय प्रमाणपत्र प्रविष्टि में इकाई की पहचान के अलावा केवल एक सार्वजनिक कुंजी होती है। इस प्रकार, एक विश्वसनीय प्रमाणपत्र प्रविष्टि का उपयोग नहीं किया जा सकता है, जहां एक निजी कुंजी की आवश्यकता होती है, जैसे कि javax.net.ssl.KeyManager। JKS के JDK कार्यान्वयन में, कीस्टॉर में कुंजी प्रविष्टियाँ और विश्वसनीय प्रमाणपत्र प्रविष्टियाँ दोनों हो सकती हैं।
एक ट्रस्टस्टोर एक कीस्टॉर है जिसका उपयोग ट्रस्ट बनाने के बारे में निर्णय लेते समय किया जाता है। यदि आप किसी ऐसी इकाई से डेटा प्राप्त करते हैं जिस पर आप पहले से ही भरोसा करते हैं, और यदि आप यह सत्यापित कर सकते हैं कि इकाई वह है जिसे वह होने का दावा करता है, तो आप मान सकते हैं कि डेटा वास्तव में उस इकाई से आया है।
यदि उपयोगकर्ता उस संस्था पर भरोसा करता है, तो एक प्रविष्टि केवल एक ट्रस्टस्टोर में जोड़ी जानी चाहिए। या तो एक कुंजी जोड़ी उत्पन्न करके या एक प्रमाण पत्र आयात करके, उपयोगकर्ता उस प्रविष्टि पर भरोसा करता है। ट्रस्टस्टोर में किसी भी प्रविष्टि को एक विश्वसनीय प्रविष्टि माना जाता है।
दो अलग-अलग कीस्टॉर फाइलें रखना उपयोगी हो सकता है: एक जिसमें आपकी मुख्य प्रविष्टियाँ हैं, और दूसरा आपके प्रमाण-पत्र की प्रविष्टियों सहित, CA प्रमाणपत्रों सहित। पूर्व में निजी जानकारी होती है, जबकि उत्तरार्द्ध नहीं होता है। एकल कीस्टोर फ़ाइल के बजाय दो फ़ाइलों का उपयोग करना आपके स्वयं के प्रमाणपत्रों (और इसी निजी कुंजी) और दूसरों के प्रमाणपत्रों के बीच तार्किक अंतर का एक क्लीनर पृथक्करण प्रदान करता है। अपनी निजी कुंजियों के लिए अधिक सुरक्षा प्रदान करने के लिए, उन्हें प्रतिबंधित एक्सेस के साथ कीस्टोर में संग्रहीत करें, और यदि आवश्यक हो, तो अधिक सार्वजनिक रूप से सुलभ कीस्टोर में विश्वसनीय प्रमाण पत्र प्रदान करें।
TrustStore और KeyStore के बीच पहला और बड़ा अंतर यह है कि TrustStore का उपयोग TrustManager द्वारा यह निर्धारित करने के लिए किया जाता है कि क्या दूरस्थ कनेक्शन पर भरोसा किया जाना चाहिए, KeyStore का उपयोग KeyManager से किया जाता है, यह तय करते हुए कि प्रमाणीकरण क्रेडेंशियल्स को SSL हैंडशेक के माध्यम से प्रमाणीकरण के लिए दूरस्थ होस्ट को भेजा जाना चाहिए।
एक और अंतर यह है कि keyStore में सैद्धांतिक रूप से निजी कुंजी शामिल होती है, केवल तभी जब आप SSL कनेक्शन में सर्वर चला रहे हों या आपने सर्वर साइड पर क्लाइंट प्रमाणीकरण सक्षम किया हो और दूसरी ओर TrustStore CA (प्रमाणपत्र प्राधिकारी) से सार्वजनिक कुंजी या प्रमाणपत्र संग्रहीत करता हो, जिसका उपयोग किया जाता है रिमोट पार्टी या एसएसएल कनेक्शन पर भरोसा करें।
वास्तव में आप निजी और सार्वजनिक दोनों तरह की चाबियों को एक ही फाइल में स्टोर कर सकते हैं, यह देखते हुए कि उन फाइल को मैनेज करने का टूल एक ही है (कीटल), इसलिए आप दोनों उद्देश्यों के लिए एक ही फाइल का उपयोग कर सकते हैं, लेकिन आपको शायद नहीं करना चाहिए ।
कम से कम मेरे मैक OSX पर डिफ़ॉल्ट कीस्टॉर है ${user.home}/.keystore
, और डिफ़ॉल्ट ट्रस्टस्टोर है /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
।
यदि आप उन्हें ओवरराइड करना चाहते हैं, तो आपको जेवीएम मापदंडों को जोड़ना चाहिए
-Djavax.net.ssl.keyStore /path/to/keyStore
या
-Djavax.net.ssl.trustStore /path/to/trustStore
। आपको java.security.UnrecoverableKeyException: Password must not be
null
पैरामीटर का उपयोग करके
-Djavax.net.ssl.trustStorePassword=password
या के मामले में keyStore पासवर्ड सेट करने की आवश्यकता हो सकती है
-Djavax.net.ssl.trustStorePassword=password
मुख्य स्रोत:
http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html