2013-09-26 5 views
18

मामले पर एप्लेट के साथ प्रयोग किया पुस्तकालय: मैं एक जावा एप्लेट जो BouncyCastle पुस्तकालयों bcpkix-jdk15on-149.jar का उपयोग करता है को बनाए रखने कर रहा हूँ, और bcprov-jdk15on-149.jarBouncyCastle क्रिप्टोग्राफी प्रदाता जावा 7u40

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

https://www.java.com/en/download/help/appsecuritydialogs.xml

जहाँ तक मुझे पता है, इस वजह से ईसा पूर्व पुस्तकालयों BouncyCastle प्रमाण पत्र, "JCE कोड सीए प्रवेश कर रहा है" द्वारा जारी किए गए के साथ हस्ताक्षर किए जाते हैं। उस वजह से, lib एक क्रिप्टोग्राफी प्रदाता के रूप में प्रदर्शन और कार्य कर सकता है।

लेकिन: जेआरई हस्ताक्षर पर विश्वास करने के लिए प्रमाणपत्र श्रृंखला का निर्माण नहीं कर सकता है।

मैं मैं उस हस्ताक्षर को हटा दें और अपने आप से हस्ताक्षर (मैं एक Thawte कोड हस्ताक्षर प्रमाण पत्र के मालिक हैं) कर सकते हैं:

  • यह bcpkix lib के साथ काम करता
  • यह काम नहीं करता: यह "अज्ञात प्रदाता" से पता चलता bcprov के साथ क्योंकि इसे वैध क्रिप्टोग्राफी प्रदाता के रूप में नहीं माना जाएगा (यह जेआरई द्वारा भरोसा नहीं किया जाएगा)।

क्या मैं सही हूँ? मैं क्या कर सकता हूं?
पीएस: मैंने जेसीए रूट प्रमाण (इसे जेआरई ट्रस्टस्टोर में रखने के लिए) को सफलता के बिना खोजने के लिए बहुत कुछ किया ... क्या उस रूट सीए को पकड़ने का कोई तरीका है?

+0

कुछ लोग मुझसे bcprov पुस्तकालय (पहले से ही ई.पू. द्वारा हस्ताक्षर किए गए) मेरे अपने प्रमाण पत्र के साथ दूसरी बार हस्ताक्षर करने के लिए कहा था। समस्या यह है कि परिणाम "jarsigner" के साथ सत्यापन पर विफल रहता है। इसलिए, अगर कोई जानता है कि एक जेएआर फ़ाइल पर एक और हस्ताक्षर कैसे रखा जाए, तो कृपया मुझे बताएं –

उत्तर

21

खोज का एक बहुत और बीसी मेलिंग सूची में कुछ पोस्ट के बाद .... मैं समाधान नहीं मिला, तो मैं इसे यहाँ जो दूसरों कि इस मुद्दे का सामना कर सकते के लिए छोड़:

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

  • ई.पू. lib SHA1 डाइजेस्ट algorythm
  • jarsigner (अपने कंप्यूटर पर) कर रहा है SHA256 साथ हस्ताक्षर डिफ़ॉल्ट रूप से algorythm पचाने का उपयोग करके हस्ताक्षरित किया गया है:

    एक आखिरी बात, कुछ असंगति हस्ताक्षर प्रौद्योगिकी पर हुआ जो एक सत्यापन विफलता की ओर जाता है।

  • इसलिए मुझे jarsigner को SHA1 तरीके से करने के लिए कहा था। -digestalg SHA1

    नमूना आदेश:

यहाँ jarsigner आदेश के जादू पैरामीटर जोड़ सकते हैं और यह ऐसा करने के लिए है (किसी कारण से दोनों हस्ताक्षर देखने के उस बिंदु से सुसंगत होना जरूरी):

jarsigner -keystore ./mykeystore.jks -storepass myPass -digestalg SHA1 bcprov-jdk15on-149.jar myAlias 

... और आप कर चुके हैं! Security.addProvider (नई org.bouncycastle:

लाइन लाना: What prevents Java from verifying signed jars with multiple signature algorithms

+2

आप पुरुषों के बीच एक देवता हैं –

+0

मेरा एप्लेट एक जार फ़ाइल है, जिसमें बाउंटी महल समेत अन्य सभी जारों के वर्ग शामिल हैं, मुझे यह अपवाद मिल रहा है द्वारा: java.io.IOException: मैक बनाने में त्रुटि: java.lang.SecurityException: जेसीई प्रदाता बीसी प्रदाता प्रमाणीकृत नहीं कर सकता है, कृपया सलाह दें कि जब बीसी कक्षाएं मेरे एप्लेट जार के किनारे हों तो jarsigner का उपयोग कैसे करें? – user884424

+1

बस एक टिप्पणी, मेरे सिस्टम (उबंटू 14.04 64 बिट्स, ओपनजेडीके 7) पर bcprov-jdk15on v1.56 के साथ, मुझे सत्यापन के लिए सत्यापन के लिए -digestalg SHA-256 के साथ साइन इन करना पड़ा। – ixM

0

हम अन्य stackoverflow पोस्ट और जवाब यह है कि मुझे मदद की शामिल कर सकते हैं:

निम्नलिखित पोस्ट मुझे टिप दे दी है। jce.provider.BouncyCastleProvider());

अपवाद से छुटकारा पाने में मेरी सहायता की।

स्रोत: jce cannot authenticate the provider bc

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