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



Answers

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

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

Question

मैं एक सुरक्षित webservice से कनेक्ट करने की कोशिश कर रहा हूँ।

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

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

विशेष रूप से:

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

मेरे सवाल:

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

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




Links