2011-10-07 5 views
8

क्या किसी ने इससे पहले किया है? केवल संदर्भ मैं गूगल पर पाया है किया गया है: http://onjava.com/onjava/2001/04/12/signing_jar.html जो अभी भी सूरज का उपयोग करता है * क्लासेस कि समस्याओं का कारण बन जाएगा ...जावा में प्रोग्रामिंग रूप से जार फ़ाइलों को कैसे हस्ताक्षर करते हैं?

इस मिले और साथ ही, लेकिन java16 साथ काम नहीं करता:। https://svn.cs.cf.ac.uk/projects/whip/trunk/whip-core/src/main/java/org/whipplugin/data/bundle/JarSigner15.java

+2

आप जावा के भीतर से जार साइनर प्रक्रिया को कॉल कर सकते हैं। ProcessBuilder का सबसे अच्छा उपयोग। – clamp

उत्तर

0

मैं SingJar Ant task का उपयोग करके (जो स्पष्ट रूप से नीचे कमांड लाइन उपकरण को कॉल करता है)। प्रोग्रामेटिक रूप से कॉल करना संभव होना चाहिए।

+0

कुछ ऐसा ढूंढ रहा था जो 'jarsigner' को कॉल नहीं करता है - सभी जावा में किए गए हैं ... – wuntee

+1

@wuntee: मुझे संदेह है कि चींटियों को ऐसा करना होगा यदि यह आसानी से संभव हो। –

2

टूल्स में .jar फ़ाइल क्लास sun.security.tools.JarSigner है जिसमें स्थिर स्थिर (ava.lang.String [] तार) विधि है जो jarsigner निष्पादन योग्य के समान पैरामीटर लेता है।

sun.security.tools.JarSigner.run(new String[] { 
    "-keystore", keystoreFile.getAbsolutePath(), 
    "-storepass", keystorePassword, 
    outFile.getAbsolutePath(), 
    keystoreAlias 
}); 

तुम्हें यकीन tools.jar संकलन और निष्पादन के लिए अपने classpath में है बनाने की जरूरत है:

तो तुम जैसे कुछ कह सकते हैं।

3

जावा 7u45 में वेबस्टार्ट अनुप्रयोगों में सुरक्षा प्रतिबंधों के अचानक परिवर्तन को हल करने के लिए हमने simple signed jar file generator बनाया है। यह गुवा 15 और बाउंसी कैसल बीसीपीकिक्स मॉड्यूल का उपयोग करता है। इसे जावा 6 & पर चलाना चाहिए 7. यह केवल छोटी फाइलों के लिए उपयुक्त है। किसी भी उद्देश्य के लिए इसका इस्तेमाल करें।

3

ध्यान रखें कि sun.security.tools.JarSigner कक्षा को कमांड लाइन उपयोगिता के रूप में उपयोग करने के लिए लिखा गया था और जावा कोड से कॉल करने के लिए डिज़ाइन नहीं किया गया था। नतीजतन, त्रुटि प्रबंधन बहुत अचानक है: कोड मानक त्रुटि के लिए एक त्रुटि संदेश मुद्रित करेगा और फिर System.exit()1 पर कॉल करें।

इसका मतलब है कि यदि आप कक्षा को अपने जावा कोड से कॉल करते हैं और जब आप जार पर हस्ताक्षर करने का प्रयास करते हैं तो त्रुटि होती है, तो आपका कोड चलने वाला JVM बस बंद हो जाएगा। यह आपकी स्थिति के आधार पर ठीक हो सकता है, लेकिन यदि आपका कोड लंबे समय से चल रहा है या सेवा के रूप में कार्य कर रहा है, तो यह इतना अच्छा नहीं है।

क्लैंप की टिप्पणी के अनुसार प्रोसेसबिल्डर का उपयोग करके jarsigner टूल को कॉल करना बेहतर है। इसके बाद परिणामस्वरूप प्रक्रिया ऑब्जेक्ट पर waitFor() पर कॉल कर सकते हैं और यह देखने के लिए कि आदेश सफल हुआ है, exitValue() देखें। getInputStream() ऑपरेशन विफल होने पर मानक आउट करने के लिए लिखे गए किसी भी त्रुटि संदेश को पढ़ने देगा।

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