कीस्टोर प्रकार: जो एक का उपयोग करने के लिए?


115

java.securityमेरी फ़ाइल को JREदेखकर, मैं देखता हूं कि डिफ़ॉल्ट रूप से उपयोग करने के लिए कीस्टोर प्रकार सेट है JKSयहां , कीस्टोर प्रकारों की एक सूची है जिसका उपयोग किया जा सकता है।

क्या एक अनुशंसित कीस्टोर प्रकार है? विभिन्न कीस्टोर प्रकार के पेशेवरों / विपक्ष क्या हैं?


4
जावा 9 के बाद से, पीकेसीएस 12 डिफ़ॉल्ट कीस्टोर प्रकार है। यह परिवर्तन JEP 229 लक्ष्य के लिए है: "सुरक्षा में सुधार। PKCS12 JKS की तुलना में मजबूत क्रिप्टोग्राफ़िक एल्गोरिदम प्रदान करता है।" अधिक जानकारी के लिए "JEP 229: डिफ़ॉल्ट रूप से PKCS12 कीस्टोर्स बनाएं", openjdk.java.net/jeps/229 देखें ; अंतिम एक्सेस फ़रवरी 2,
2018.

जवाबों:


142

आपके द्वारा लिंक की गई मानक नाम सूची में सूचीबद्ध की तुलना में कुछ और प्रकार हैं। आप क्रिप्टोग्राफिक प्रदाताओं के प्रलेखन में अधिक पा सकते हैं । सबसे आम निश्चित रूप से JKS(डिफ़ॉल्ट) हैं और PKCS12(PKCS # 12 फ़ाइलों के लिए, अक्सर विस्तार के साथ .p12या कभी-कभी .pfx)।

यदि आप जावा दुनिया के भीतर रहते हैं तो JKS सबसे आम है। PKCS # 12 जावा-विशिष्ट नहीं है, यह विशेष रूप से प्रमाणपत्र (निजी कुंजी के साथ) एक ब्राउज़र से बैकअप लेने या ओपनएसएसएल-आधारित टूल से आने के लिए उपयोग करने के लिए सुविधाजनक है ( keytoolकिस्टोर्स में कनवर्ट करने में सक्षम नहीं है और जावा 6 से पहले अपनी निजी कुंजी आयात करता है। , इसलिए आपको अन्य उपकरणों का उपयोग करना पड़ा)।

यदि आपके पास पहले से ही PKCS # 12 फ़ाइल है, तो अक्सर PKCS12सीधे प्रकार का उपयोग करना आसान होता है। प्रारूपों को परिवर्तित करना संभव है, लेकिन यदि आप सीधे कीस्टोर प्रकार का चयन कर सकते हैं तो यह शायद ही आवश्यक है।

जावा 7 में, PKCS12मुख्य रूप से कीस्टोर के रूप में उपयोगी था , लेकिन एक ट्रस्टस्टोर के लिए कम था ( एक कीस्टोर और ट्रस्टस्टोर के बीच अंतर देखें ), क्योंकि आप एक निजी कुंजी के बिना प्रमाणपत्र प्रविष्टियों को संग्रहीत नहीं कर सकते थे। इसके विपरीत, JKSप्रत्येक प्रविष्टि के लिए एक निजी कुंजी प्रविष्टि की आवश्यकता नहीं होती है, इसलिए आपके पास ऐसी प्रविष्टियाँ हो सकती हैं जिनमें केवल प्रमाणपत्र हों, जो कि विश्वास स्टोर के लिए उपयोगी हों, जहाँ आप उन प्रमाणपत्रों की सूची संग्रहीत करते हैं जिन पर आप भरोसा करते हैं (लेकिन आपके पास नहीं है उनके लिए निजी कुंजी)।

यह जावा 8 में बदल गया है, इसलिए अब आप केवल PKCS12दुकानों में भी प्रमाण पत्र प्रविष्ट कर सकते हैं । (इन परिवर्तनों और आगे की योजनाओं के बारे में अधिक विवरण JEP 229 में पाया जा सकता है : PKCS12 Keystores को मेन्यू द्वारा बनाएं )।

कुछ अन्य कीस्टोर प्रकार हैं, शायद कम अक्सर उपयोग किए जाते हैं (संदर्भ के आधार पर), उनमें शामिल हैं:

  • PKCS11पीकेसीएस # 11 पुस्तकालयों के लिए, आमतौर पर हार्डवेयर क्रिप्टोग्राफिक टोकन तक पहुंचने के लिए, लेकिन सूर्य प्रदाता कार्यान्वयन भी इसके माध्यम से एनएसएस स्टोर (मोज़िला से) का समर्थन करता है।
  • BKS, BouncyCastle प्रदाता (आमतौर पर Android के लिए उपयोग किया जाता है) का उपयोग कर।
  • Windows-MY/ Windows-ROOT, यदि आप विंडोज सर्टिफिकेट स्टोर को सीधे एक्सेस करना चाहते हैं।
  • KeychainStore, अगर आप सीधे OSX चाबी का गुच्छा का उपयोग करना चाहते हैं।

7
@husayt, PEM प्रमाणपत्र सीधे कीस्टोर प्रकारों के रूप में समर्थित नहीं हैं (मुझे लगता है कि कोई भी KeyStoreउस प्रभाव को लागू कर सकता है)। हालाँकि, आप उन्हें एक काइस्टोर उदाहरण (आमतौर पर JKS, डिफ़ॉल्ट प्रकार) में एक लोड करके लोड कर सकते हैं CertificateFactory(जैसे कि इस उत्तर में दिखाया गया है )।
ब्रूनो

मुझे लगता है JKSकि बदल गया हैJCEKS
उभयचर

5
गंभीर रूप से, एक JKS कुंजी स्टोर गुप्त कुंजी संग्रहीत नहीं कर सकता है। इस उपयोग के मामले के लिए, JCEKS उपयुक्त है। हो सकता है कि आपके जवाब में यह बात ध्यान देने योग्य हो।
डंकन जोन्स

1
ठीक। Java 8 में मैं बिना किसी इश्यू के सिंगल सर्टिफिकेट के साथ PKCS # 12 की -स्टोर बना सकता हूं। ध्यान दें कि P12 सर्टिफिकेट प्रविष्टियों के लिए अनुमानित रूप से विश्वसनीय हैं। यदि आपको अविश्‍वासित सेर्ट्स की जरूरत है, तो आपको कई प्रमुख स्टोर वाली स्कीम को वापस करना पड़ सकता है।
मैर्टन बोडेवेस

2
कम से कम जावा 8 पीकेसीएस # 12 कुंजी स्टोर के लिए अभी भी गुप्त कुंजी प्रविष्टियों को संग्रहीत नहीं किया जा सकता है । ऐसा कुंजी स्टोर (ugh) स्टोर करते समय आपको एक अशक्त सूचक अपवाद मिलेगा, शायद इसलिए कि यह संबंधित प्रमाणपत्र नहीं पा सकता है। किसी ने तेजी से कोड के बारे में यहोशू की शिक्षाओं को छोड़ दिया।
मार्टन बोडेवेस

22

यहाँ एक पोस्ट है जो जावा में विभिन्न प्रकार के कीस्टोर का परिचय देता है और विभिन्न प्रकार के कीस्टोर के बीच अंतर। http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java----Overview

नीचे पोस्ट से विभिन्न कीस्टोर्स के विवरण दिए गए हैं:

जेकेएस, जावा की स्टोर। आप इस फ़ाइल को sun.security.provider.JavaKeyStore पर पा सकते हैं। यह कीस्टोर जावा विशिष्ट है, इसमें आमतौर पर jks का विस्तार होता है। इस प्रकार के कीस्टोर में निजी कुंजी और प्रमाणपत्र हो सकते हैं, लेकिन इसका उपयोग गुप्त कुंजी को संग्रहीत करने के लिए नहीं किया जा सकता है। चूंकि यह एक जावा विशिष्ट कीस्टोर है, इसलिए इसे अन्य प्रोग्रामिंग भाषाओं में उपयोग नहीं किया जा सकता है।

JCEKS, JCE कुंजी स्टोर। आप इस फ़ाइल को com.sun.crypto.provider.JceKeyStore पर पा सकते हैं। इस कीस्टोर में जैक्स का विस्तार है। जिन प्रविष्टियों को JCEKS कीस्टोर में डाला जा सकता है, वे हैं निजी कुंजी, गुप्त कुंजी और प्रमाणपत्र।

PKCS12, यह एक मानक कीस्टोर प्रकार है जिसका उपयोग जावा और अन्य भाषाओं में किया जा सकता है। आप इस keystore कार्यान्वयन को sun.security.pkcs12.PKCS12KeyStore पर पा सकते हैं। इसमें आमतौर पर p12 या pfx का विस्तार होता है। आप इस प्रकार पर निजी कुंजी, गुप्त कुंजी और प्रमाणपत्र संग्रहीत कर सकते हैं।

PKCS11, यह एक हार्डवेयर कीस्टोर प्रकार है। यह जावा लायब्रेरी के लिए एक इंटरफ़ेस सर्वर को लून, nCipher जैसे हार्डवेयर कीस्टोर उपकरणों के साथ कनेक्ट करने के लिए करता है। आप इस कार्यान्वयन को sun.security.pkcs11.P11KeyStore पर पा सकते हैं। जब आप कीस्टोर को लोड करते हैं, तो आपको विशिष्ट कॉन्फ़िगरेशन के साथ एक विशिष्ट प्रदाता बनाने की आवश्यकता नहीं होती है। यह कीस्टोर निजी कुंजी, गुप्त कुंजी और cetr झूलों को संग्रहीत कर सकता है। कीस्टोर को लोड करते समय, प्रविष्टियों को कीस्टोर से पुनर्प्राप्त किया जाएगा और फिर सॉफ्टवेयर प्रविष्टियों में परिवर्तित किया जाएगा।


@ peci1 मैंने इन कीस्टोर्स का उपयोग करने के बारे में कुछ ट्यूटोरियल लिखने की योजना बनाई है। अब तक मैंने JKS के लिए एक पोस्ट लिखी है, कृपया इसे Pixstech.net/article/…
PixelsTech

@PixelsTech मैं यह पाया है और सोच रहा था कि उनमें से बाकी कहाँ है :) तो मैं देखते रहूँगा;) धन्यवाद
मार्टिन पीका

1
@ peci1 मैंने आज JCEKS और PKCS12 को कवर किया है। PKCS11 के लिए, इसमें हार्डवेयर और अतिरिक्त कॉन्फ़िगरेशन शामिल है, इसे रचना के लिए अधिक समय की आवश्यकता है। pixelstech.net/article/… और pixelstech.net/article/…
PixelsTech

वाह, यह एक बिजली की गति है! बहुत बहुत धन्यवाद।
मार्टिन पीका

5

यदि आप जावा 8 या नए का उपयोग कर रहे हैं तो आपको निश्चित रूप से चुनना चाहिए PKCS12, जावा 9 ( जेईपी 229 ) के बाद से डिफ़ॉल्ट ।

फायदे की तुलना में JKSऔर JCEKSकर रहे हैं:

  • गुप्त कुंजी, निजी कुंजी और प्रमाण पत्र संग्रहीत किए जा सकते हैं
  • PKCS12एक मानक प्रारूप है, इसे अन्य कार्यक्रमों और पुस्तकालयों 1 द्वारा पढ़ा जा सकता है
  • बेहतर सुरक्षा: JKSऔर JCEKSबहुत असुरक्षित हैं। यह इन कीस्टोर प्रकारों के ब्रूट फोर्सिंग के लिए टूल्स की संख्या द्वारा देखा जा सकता है, विशेष रूप से एंड्रॉइड डेवलपर्स के बीच लोकप्रिय है। २, ३

1 है JDK-8,202,837 है, जो जावा 11 में तय किया गया है

2 पीबीई के लिए उपयोग की जाने वाली गणना सभी किस्टोर प्रकारों ( पीकेसीएस 12 सहित) का उपयोग सप्ताह ( सीवीई-2017-10356 ) के लिए किया जाता है, हालांकि यह 9.0.1, 8u151, 7u161 और 6u171 में तय किया गया है।

3 आगे पढ़ने के लिए:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.