2010-12-14 9 views
12

का उपयोग कर मैकोज़ एक्स कीस्टोर से निजी कुंजी प्राप्त करें मैं जावा का उपयोग करके कुछ डेटा एन्क्रिप्ट करने और हस्ताक्षर करने के लिए विशिष्ट निजी कुंजी पुनर्प्राप्त करने के लिए अपने निजी मैकोज़ एक्स कीचेन स्टोर तक पहुंचने का प्रयास कर रहा हूं। एन्क्रिप्टिंग और हस्ताक्षर भाग कार्यात्मक हैं, लेकिन मैं अपनी इच्छित निजी कुंजी को पुनर्प्राप्त नहीं कर सकता।जावा

KeyStore myKeyStore; 
myKeyStore = KeyStore.getInstance("KeychainStore", "Apple"); 
myKeyStore.load(null, null); 

// Get all the aliases in a list (I thought that calling the KeyStore 
// methods during the iteration was the reason why getKey wasn't responding properly!) 
// ... it wasn't actually! 
ArrayList<String> aliases = new ArrayList<String>(); 
Enumeration<String> e = myKeyStore.aliases(); 
while (e.hasMoreElements()) { 
    aliases.add(e.nextElement()); 
} 

for (String alias : aliases) { 
    try { 
     // I read on the Internet that any ASCII password is required 
     // to get the getKey method working. 
     Key k = myKeyStore.getKey(alias, "TEST".toCharArray()); 
     if (k == null) { 
      System.out.println(alias + ": <null> (cannot retrieve the key)"); 
     } else { 
      System.out.println(alias + ":"); 
      System.out.println(k); 
     } 
    } catch (Exception ex) { 
     System.out.println(alias + ": " + ex.getMessage()); 
    } 
} 

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

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

मैंने उस विषय पर एक मेलिंग सूची पर ठोकर खाई है: http://lists.apple.com/archives/java-dev/2007/aug/msg00134.html। दुर्भाग्यवश, ऐसा लगता है कि उस समस्या का समाधान नहीं हुआ था, और मैं शामिल व्यक्तियों से संपर्क नहीं कर सकता (कोई ई-मेल पता नहीं)।

क्या किसी ने मैकोज़ कीचेन स्टोर से कई निजी कुंजी पुनर्प्राप्त करने का प्रयास किया है, और सफल हुआ?

मेरे विन्यास:

  • MacOS एक्स 10.6
  • संयुक्त उद्यम करार JRE 1.6.0_15 (32 और 64bits)
  • सफारी 4.0.3
  • फ़ायरफ़ॉक्स 3.6.3

धन्यवाद अग्रिम में,

+0

क्या आपने कमांडलाइन से कीटोल का उपयोग करने की कोशिश की है? अगर यह काम करेगा - यह आपकी समस्या के आसपास एक काम हो सकता है। मैंने इसे अतीत में उपयोग किया है और यह मेरे लिए काम किया है ... –

उत्तर

2

दुर्भाग्य से यह एक ज्ञात सीमा है ऐप्पल की चाइनी कीस्टोर कार्यान्वयन के आयन। ओपनजेडीके मैकोज़क्स पोर्ट बग ट्रैकर (MACOSX_PORT-464) में एक खुली टिकट है और एक पैच सबमिट किया गया है।

हालांकि या तो आपको ओपनजेडीके को स्क्रैच से पुनः संयोजित करना होगा (इसमें कुछ समय लगता है लेकिन यह सीधी प्रक्रिया है) या आपको ओपनजेडीके स्रोतों से कीचेन क्रिप्टोग्राफिक सेवा प्रदाता निकालना होगा और स्टैंडअलोन जेसीए प्रदाता युक्त एक नया जार बनाना होगा (लेकिन चूंकि इसमें मूल कोड होता है, यह शायद एक अधिक जटिल कार्य है)।