2011-05-06 11 views
18

मैं BouncyCastle पर Windows XP प्रो एक सुरक्षा प्रदाता के रूप में जोड़ने के लिए तो मैं निर्देश here प्रति एक Android आवेदन करने के लिए कुछ प्रमाणपत्र जोड़ने के लिए उपयोग कर सकते हैं कोशिश कर रहा हूँ। दुर्भाग्यवश मैं इसे प्रदाता जोड़ने के लिए नहीं मिल सकता।BouncyCastle स्थापना समस्याओं

मैंने:

  1. C:\Program Files\Java\jre6\lib\ext\ करने के लिए प्रदाता डाउनलोड किया गया।
  2. C:\Program Files\Java\jre6\lib\ext\bcprov-jdk16-146.jar%CLASSPATH% जोड़ा गया।
  3. जोड़ा गया security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider java.security (7 क्रम में अगली int होने के नाते)।

जब मैं चलाएँ:

keytool -import -v -trustcacerts -alias 0 -file mycert.crt -keystore mystore.bks -storetype BKS -providerName org.bouncycastle.jce.provider.BouncyCastleProvider -storepass mypassword 

मैं निम्न त्रुटि संदेश मिलता है:

keytool error: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider 

मैं भी यह गतिशील जोड़ने की कोशिश की है:

import java.security.Provider; 
import java.security.Security; 
import java.util.Enumeration; 

import org.bouncycastle.jce.provider.BouncyCastleProvider; 

public class BouncyCastleMain { 

    public static void main(String[] args) throws Exception { 
     Security.addProvider(new BouncyCastleProvider()); // add it 
     try { // list them out 
      Provider p[] = Security.getProviders(); 
      for (int i = 0; i < p.length; i++) { 
       System.out.println(p[i]); 
       for (Enumeration<?> e = p[i].keys(); e.hasMoreElements();) 
        System.out.println("\t" + e.nextElement()); 
      } 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
    } 
} 

पहले मैं पर जावा क्लास को संकलित करते समय एक्सेस त्रुटि मिली, लेकिन इसे प्रति चेतावनी में बदल दिया uggestion here। अब जब मैं कोड चलाता हूं तो यह प्रदाताओं की सूची में बाउंसीकास्टल दिखाता है लेकिन कार्यक्रम पूरा होने के बाद यह आसपास नहीं रहता है।

मुझे यकीन है कि यह संभव होना चाहिए हूँ, लेकिन मैं काफी देर तक इसे प्रयोग Keytool चलने के लिए स्थापित करने के लिए कैसे इस आदमी से अधिक stymied हूँ। क्या जावा एपीआई के माध्यम से कीटोल को चलाने के लिए संभव है, या क्या कुछ ऐसा कदम हो सकता है जो मुझे याद आती है जो प्रदाता को चारों ओर चिपक जाएगी?

धन्यवाद!

उत्तर

25

-providerName विकल्प के लिए एक प्रदाता नाम ("ई.पू.", इस मामले में) की आवश्यकता है, न कि एक वर्ग के नाम। एक वैकल्पिक विकल्प, -providerClass, कक्षा के नाम की आवश्यकता होती है, और यह तब उपयोगी होता है जब प्रदाता java.security फ़ाइल में पंजीकृत नहीं होता है।

जब आप एक प्रदाता "प्रोग्राम के" रजिस्टर, यह केवल अस्थायी है। आपके प्रोग्राम को हर बार अपने प्रदाता को फिर से पंजीकृत करना होगा। यदि आपका लक्ष्य BouncyCastle को keytool पर उपलब्ध करना है तो आप इस दृष्टिकोण का उपयोग नहीं कर पाएंगे।

आप पहले से ही प्रदाता स्थापित किया है के बाद से (lib/ext में संग्रह डालने और java.security में यह सूचीबद्ध करके), -providerName BC विकल्प का उपयोग शायद सबसे आसान उपाय है। वैकल्पिक रूप से, आप -providerClass org.bouncycastle.jce.provider.BouncyCastleProvider विकल्प का उपयोग कर सकते हैं।

वैसे, आप CLASSPATH वातावरण चर का उपयोग नहीं करना चाहिए। lib/ext में पुस्तकालय पहले से ही कक्षा पथ पर हैं।

हैं, तो विकल्प को सही करने के बाद भी आपको मिल एक NoSuchProviderException (-providerName का प्रयोग करके) या ClassNotFoundException (-providerClass का प्रयोग करके), कि तुम keytool के अधिकार के प्रति का उपयोग कर रहे हैं सत्यापित करें। यही है, निष्पादित करते समय, अपने PATH चर पर निर्भर होने के बजाय, keytool का पूरा पथ निर्दिष्ट करें। सुनिश्चित करें कि पथ जेआरई को संदर्भित करता है जिसमें BouncyCastle स्थापित किया गया था। सिस्टम के लिए कई जेआरई और जेडीके होने के लिए असामान्य नहीं है।

+1

बाहर निकलता है मेरे पास 6 अलग-अलग jres/jdks इंस्टॉल हैं! मैंने पिछले पीसी से इस पीसी को विरासत में मिला और केवल उनमें से दो के बारे में पता था। उचित पथ को सत्यापित करना इसे ठीक करता है। धन्यवाद! –

+0

मैंने बक्षीस देने का प्रयास किया और कहा कि मुझे 21 घंटे इंतजार करना पड़ा। मुझे लगता है कि वे यह सुनिश्चित करना चाहते हैं कि सबकुछ यह सुनिश्चित करने के लिए एक पूरा दिन है कि सब कुछ copacetic है। डरो मत, मेरा पॉल्ट +250 जल्द ही आपके 56 के ऊपर भी गुब्बारा देगा। :) –

+0

बढ़िया! खुशी है कि यह तय है। – erickson

1

यदि आप विंडोज़ पर हैं, तो कुंजीपटल कमांड दर्ज करने के लिए व्यवस्थापक के रूप में कमांड लाइन शुरू करना न भूलें।

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