मैं मुख्य स्टोर को निम्नानुसार लोड कर रहा हूं:

try
{
  ks = KeyStore.getInstance("BKS", "BC"); 
  ks.load(ksStream, ksPass);
}
catch (IOException e)
{
  if (e.getCause() instanceof UnrecoverableKeyException)
    System.err.println("Wrong password!");
}

समस्या यह है कि अपवाद का कारण उछाल वाले महल द्वारा निर्धारित नहीं है (यह शून्य है)।

इसे कैसे ठीक करें?

0
somega 12 जुलाई 2019, 14:05

1 उत्तर

सबसे बढ़िया उत्तर

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

इस समस्या को व्यक्त करने के लिए IOException का उपयोग एक खराब विकल्प है और संभवत: सन इंजीनियरों द्वारा मूल डिजाइन का एक अवशेष है। चूंकि बाउंसीकैसल जेसीई ढांचे में केवल एक इंजन है, इसलिए उन्हें अपवाद विनिर्देशों सहित KeyStore.load() के लिए हस्ताक्षर का पालन करना होगा। बाउंसीकैसल के संस्करण में मैंने देखा कि अपवाद में एक विवरण संदेश "KeyStore integrity check failed." शामिल है जो वास्तविक I/O समस्या के विपरीत मैक विफलता के कारण कम से कम अपवाद की पहचान कर सकता है।

0
President James K. Polk 12 जुलाई 2019, 14:56