[Java] एसएसएल हैंडशेक के दौरान जावा क्लाइंट प्रमाणपत्र क्यों नहीं भेजता है?


Answers

जैसा कि यहां जोड़ें, आप %> openssl s_client -connect host.example.com:443 का उपयोग कर सकते हैं और डंप देख सकते हैं और जांच सकते हैं कि सभी मुख्य प्रमाणपत्र क्लाइंट के विरुद्ध मान्य हैं। आप इसे आउटपुट के निचले भाग में देख रहे हैं। वापसी कोड सत्यापित करें: 0 (ठीक है)

यदि आप जोड़ते हैं तो यह चाइचेन के सभी जानकारी को डंप करेगा जो मेजबान प्रमाण पत्र के साथ भेजा गया था, जो कि आपने अपने चाबी का गुच्छा में लोड किया है।

Question

मैं एक सुरक्षित webservice से कनेक्ट करने का प्रयास कर रहा हूं

मुझे एक हाथ मिलाने की विफलता मिल रही थी, फिर भी मेरी चीस्टस्टोर और ट्रस्टस्टोर सही तरीके से सेट हो गए हैं।

हताशा के कई दिनों के बाद, अनगिनत गोगलिंग और आसपास के सभी लोगों से पूछते हुए मुझे पता चला कि एकमात्र समस्या यह थी कि जावा ने सर्वर पर क्लाइंट प्रमाणपत्र को हाथ मिलाने के दौरान भेजने का नहीं चुना।

विशेष रूप से:

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

मेरे सवाल:

  1. क्या यह संभव है कि मैंने "उपकै" प्रमाण पत्र को एक ऐसे तरीके से जोड़ दिया जो "प्रमाण पत्र श्रृंखला तोड़ दी" या कुछ ऐसा था जिससे KeyManager केवल क्लाइंट प्रमाण पत्र को लोड करता है और बाकी की उपेक्षा करता है? (क्रोम और खोलता है कि यह पता लगाने के लिए प्रबंधन करें कि जावा क्यों नहीं हो? - ध्यान दें कि "सबका" प्रमाण हमेशा विश्वस्त प्राधिकरण के रूप में अलग से प्रस्तुत किया जाता है ताकि क्रोम को हेडशेक के दौरान क्लाइंट प्रमाणपत्र के साथ सही ढंग से पैक किया जा सके)
  2. क्या यह सर्वर पक्ष पर एक औपचारिक "कॉन्फ़िगरेशन समस्या" है? सर्वर एक तीसरी पार्टी है मैं उम्मीद करता हूं कि सर्वर "सबका" प्राधिकारी द्वारा हस्ताक्षरित प्रमाण पत्र का अनुरोध करना चाहता है, क्योंकि वे हमें प्रदान किए हैं। मुझे संदेह है कि यह तथ्य है कि यह क्रोम में काम करता है और openssl है क्योंकि वे "कम प्रतिबंधात्मक हैं" और जावा बस "पुस्तक" द्वारा चला गया और विफल हो गया।

मैंने इसके लिए एक गंदे समाधान तैयार करने का प्रबंधन किया, लेकिन मैं इसके बारे में बहुत खुश नहीं हूं इसलिए मुझे खुशी होगी अगर कोई मुझे इस के लिए स्पष्टीकरण दे सकता है