2010-03-16 13 views
17

के साथ प्रमाणपत्र सत्यापन bouncycastle wiki page के माध्यम से मैं समझने में सक्षम था कि X.509 रूट प्रमाणपत्र और प्रमाणीकरण अनुरोध कैसे बनाया जाए, लेकिन मुझे समझ में नहीं आता कि अवधारणा को कैसे आगे बढ़ाना है- और इसके बाद प्रोग्रामिंग के अनुसार ।X.509 जावा और बाउंसीकैसल

आइए मान लें कि पार्टी ए एक प्रमाण अनुरोध करता है और सीए से अपना ग्राहक प्रमाण पत्र प्राप्त करता है। कुछ पार्टी बी ए प्रमाणपत्र का सत्यापन कैसे कर सकते हैं? एक आवश्यकता किस तरह का प्रमाण पत्र करता है? एक रूट प्रमाणपत्र? एक 'सामान्य' ग्राहक प्रमाणपत्र?

और प्रमाणीकरण प्रोग्रामिंग स्तर पर कैसे काम करता है, अगर हम मानते हैं कि ए ने डीईआर या पीईएम प्रारूप में सफलतापूर्वक अपना प्रमाणपत्र भेज दिया है?

किसी भी मदद की बहुत सराहना की जाती है।

शुभकामनाओं सहित, रोब

इस प्रकार

उत्तर

9

ठीक है, सीए के पीछे विचार यह है के रूप में:

  • सीए लोग हर किसी को भरोसा करता है। इस अंत में, विश्वसनीय ब्राउज़र का चयन आपके ब्राउज़र/ईमेल क्लाइंट/यहां तक ​​कि मेरे मोबाइल पर भी उपलब्ध है। आपके मामले में, आपकी सार्वजनिक रूट कुंजी (प्रमाणपत्र) आपके आवेदन में होनी चाहिए।
  • उपयोगकर्ता सार्वजनिक कुंजी के साथ पीईएम प्रारूप में प्रमाण पत्र के लिए सीए को अनुरोध भेजते हैं। सीए कुछ (मैं इस अस्पष्ट जानबूझकर) को अंतिम उपयोगकर्ता के सत्यापन के रूप में छोड़ देता हूं, जैसे उन्हें पैसे चार्ज करना या बढ़ाए गए सत्यापन (हरे) केर्ट, पृष्ठभूमि जांच के मामले में।
  • यदि सीए नहीं लगता कि उपयोगकर्ता का अनुरोध मान्य है, तो वे इसे किसी भी तरह से संवाद करते हैं।
  • यदि वे करते हैं, तो वे सार्वजनिक कुंजी पर हस्ताक्षर करते हैं और इस जानकारी वाले प्रमाण पत्र का उत्पादन करते हैं। यह वह जगह है जहां आप प्रमाणपत्र-रीक को संसाधित करते हैं और इसे X.50 9 प्रमाण में बदल देते हैं।
  • अन्य उपयोगकर्ता हमारे कल्पित उपयोगकर्ता भर में आते हैं और जानना चाहते हैं कि वे उन पर भरोसा कर सकते हैं या नहीं। इसलिए, वे प्रमाण पत्र पर एक नज़र डालें और पाते हैं कि उनके ट्रस्ट सूची में उनके द्वारा डिजिटल हस्ताक्षरित किया गया है। इसलिए, तथ्य यह है कि वे रूट सीए पर भरोसा करते हैं और केवल रूट सीए इस उपयोगकर्ता की सार्वजनिक कुंजी पर हस्ताक्षर कर सकता है और सीए उपयोगकर्ता पर भरोसा करता है, हम यह समझते हैं कि नया उपयोगकर्ता श्रीमान पर भरोसा कर सकता है।

प्रोग्रामेटिक स्तर पर, आप X.50 9 प्रमाणपत्र पढ़कर इसे लागू करते हैं और सीए को कौन सी माना जाता है। सीए के फिंगरप्रिंट को देखते हुए, आप इसे अपने डेटाबेस में पाते हैं और हस्ताक्षर सत्यापित करते हैं। यदि यह मेल खाता है, तो आपके पास विश्वास की श्रृंखला है।

यह काम करता है क्योंकि, जैसा कि मैंने कहा है, केवल सीए डिजिटल हस्ताक्षर बना सकता है लेकिन कोई भी इसे सत्यापित कर सकता है। यह वास्तव में एन्क्रिप्शन अवधारणा के विपरीत है। आप जो करते हैं वह "निजी कुंजी से एन्क्रिप्ट करें" डेटा जिसे आप साइन करना चाहते हैं और सत्यापित करें कि "सार्वजनिक कुंजी के साथ डिक्रिप्ट" आपके द्वारा प्राप्त डेटा के बराबर है।

+0

सीए अवधारणा के विस्तृत विवरण के लिए धन्यवाद। मैं इसे अब समझता हूँ। मुझे बस प्रोग्रामिंग स्तर पर ब्योरा देना है। – Rob

28

प्रोग्रामर के परिप्रेक्ष्य से, आपको X.50 9 प्रमाण पत्र को सत्यापित करने के लिए कुछ चीजों की आवश्यकता है।

  1. "ट्रस्ट एंकर" — का एक सेट जिस पर आप भरोसा करते हैं उसके रूट प्रमाण पत्र। इन्हें छेड़छाड़ से संरक्षित किया जाना चाहिए, ताकि हमलावर सीए प्रमाण पत्र को अपने स्वयं के नकली से प्रतिस्थापित न करे। इन प्रमाणपत्रों में सार्वजनिक कुंजी का उपयोग अन्य प्रमाणपत्रों पर डिजिटल हस्ताक्षर सत्यापित करने के लिए किया जाता है।
  2. इंटरमीडिएट प्रमाणपत्रों का संग्रह। एप्लिकेशन इनमें से एक संग्रह रख सकता है, लेकिन एसएसएल और एस/एमआईएम जैसे अधिकांश प्रोटोकॉल, जो प्रमाण पत्र का उपयोग करते हैं, अतिरिक्त प्रमाणपत्र प्रदान करने का एक मानक तरीका है।इन्हें स्टोर करने के लिए किसी विशेष देखभाल की आवश्यकता नहीं होती है; उनकी अखंडता रूट सीए के हस्ताक्षर से सुरक्षित है।
  3. निरसन जानकारी। भले ही एक सीए द्वारा प्रमाण पत्र जारी किया गया हो, फिर भी इसे समय से निरस्त कर दिया गया हो क्योंकि निजी कुंजी का खुलासा किया गया था, या अंत इकाई ने अपनी पहचान बदल दी थी। (उदाहरण के लिए, एक व्यक्ति नौकरियों को बदलता है और अपनी पुरानी कंपनी के नाम के साथ प्रमाण पत्र रद्द कर दिया जाता है।) सीआरएल या ओसीएसपी जैसी वेब सेवा का उपयोग प्रमाण पत्र की स्थिति के बारे में अपडेट प्राप्त करने के लिए किया जा सकता है।

इन इनपुट के साथ, आप प्रमाणपत्र पथ बनाने और सत्यापित करने के लिए built-in PKIX support का उपयोग कर सकते हैं।

/* Givens. */ 
InputStream trustStoreInput = ... 
char[] password = ... 
List<X509Certificate> chain = ... 
Collection<X509CRL> crls = ... 

/* Construct a valid path. */ 
KeyStore anchors = KeyStore.getInstance(KeyStore.getDefaultType()); 
anchors.load(trustStoreInput, password); 
X509CertSelector target = new X509CertSelector(); 
target.setCertificate(chain.get(0)); 
PKIXBuilderParameters params = new PKIXBuilderParameters(anchors, target); 
CertStoreParameters intermediates = new CollectionCertStoreParameters(chain) 
params.addCertStore(CertStore.getInstance("Collection", intermediates)); 
CertStoreParameters revoked = new CollectionCertStoreParameters(crls); 
params.addCertStore(CertStore.getInstance("Collection", revoked)); 
CertPathBuilder builder = CertPathBuilder.getInstance("PKIX"); 
/* 
* If build() returns successfully, the certificate is valid. More details 
* about the valid path can be obtained through the PKIXBuilderResult. 
* If no valid path can be found, a CertPathBuilderException is thrown. 
*/ 
PKIXBuilderResult r = (PKIXBuilderResult) builder.build(params); 

ध्यान देने योग्य एक महत्वपूर्ण बात यह है कि यदि कोई पथ नहीं मिल पा रहा है, तो आपको कारण के बारे में अधिक जानकारी नहीं मिलती है। यह निराशाजनक हो सकता है, लेकिन यह डिजाइन द्वारा इस तरह से है। सामान्यतः, कई संभावित पथ हैं। यदि वे सभी अलग-अलग कारणों से असफल होते हैं, तो पथ निर्माता कैसे निर्णय लेता है कि कारण के रूप में रिपोर्ट करना है?

+0

आपके उत्तर के लिए धन्यवाद, लेकिन मुझे यह कहना चाहिए था कि मैं जावा एमई का उपयोग कर रहा हूं इसलिए मुझे प्रमाण पत्र की पुष्टि करने के लिए बाउंसीकैसल- (हल्के वजन) -एपीआई पर भरोसा करना है। क्या आपके पास कोई विचार है, या फिर एक कोड स्निपेट फिर से बेहतर है? बहुत बहुत धन्यवाद। – Rob

+0

यह बहुत स्पष्ट है लेकिन मैं किसी XMLSignature से सूची श्रृंखला प्राप्त करने के लिए वैसे भी नहीं ढूंढ सकता, भले ही xmldsig xml दस्तावेज़ में मैं सभी प्रमाणपत्र –

+0

@jaime देख सकूं - वे एक ['X509Data' ] (http://download.oracle.com/javase/6/docs/api/javax/xml/crypto/dsig/keyinfo/X509Data.html) 'KeyInfo' तत्व से उत्पादित)। मैं एक्सएमएल हस्ताक्षर समर्थन से परिचित नहीं हूं इसलिए मुझे यकीन नहीं है कि आप इस ऑब्जेक्ट को दस्तावेज़ से कैसे बनाते हैं। – erickson

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