मैं शौकिया प्रोग्रामर हूं। मैंने एक एप्लीकेशन बनाया जिसमें एक एकल, स्वयं-हस्ताक्षरित जार फ़ाइल शामिल है। आवेदन केवल मेरे गणित वर्ग के छात्रों द्वारा उपयोग किया जाएगा, इसलिए मुझे लगता है कि स्व-हस्ताक्षर ठीक है।हस्ताक्षर जार फ़ाइल - jnlp उपयोगकर्ता को प्रमाण पत्र स्वीकार करने के लिए संकेत देने में विफल रहता है
मैंने जार पर हस्ताक्षर करने के लिए ओरेकल निर्देशों का पालन किया और फिर जार को सत्यापित करने के लिए jarsigner टूल का उपयोग किया। माना जाता है, यह ठीक था।
.jnlp फ़ाइल में, मैं सभी अनुमतियों के साथ सुरक्षा टैग शामिल:
<security>
<all-permissions/>
</security>
जब कार्यक्रम, शुरूआत हालांकि, मैं एक संवाद उपयोगकर्ता को संकेत प्रमाण पत्र स्वीकार करने के लिए या पूछ कभी नहीं देखना क्लाइंट कंप्यूटर पर चलाने के लिए किसी तरह की अनुमति के लिए। ओरेकल दस्तावेज के अनुसार, यह मेरी समझ थी कि मुझे ऐसा संवाद देखना चाहिए।
मैं stackoverflow पर इस पेज को पढ़ लिया है:
और मैं एक ऐसी ही स्थिति है कि मैं एक सुरक्षा अपवाद प्राप्त की है। मेरे मामले में, अपवाद उत्पन्न जब अनुप्रयोग एक filechooser संवाद को दिखाने के लिए प्रयास करता है:
java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)
इसका कारण यह है उपयोगकर्ता की अनुमति देने के लिए कहा नहीं किया गया। मेरा मानना है कि मैंने उस स्टैक ओवरफ्लो पेज पर सलाह का पालन किया है, लेकिन ऐसा लगता है कि यह मेरे लिए काम नहीं कर रहा है। ऐसा लगता है कि जार हस्ताक्षरित प्रतीत होता है। मैंने सभी अनुमति टैग को हटाने का भी प्रयास किया और बिल्कुल वही व्यवहार प्राप्त किया।
मैंने जार के अंदर देखा है और मैं देख सकता हूं कि दो आवश्यक फाइलें हैं: MYKEY.DSA और MYKEY.SF। मैंने पठनीय एक (एसएफ) के अंदर देखा और इसमें टेक्स्ट होना चाहिए जो वहां होना चाहिए। मुझे विश्वास है कि हस्ताक्षर किए जाने के लिए सभी जार की जरूरत है।
1) इससे कोई फर्क पड़ता है क्या नाम .DSA के हैं और .SF फ़ाइलों को ऐप्लिकेशन के संबंध में, कर रहे हैं:
तो यहाँ मेरी सवाल कर रहे हैं? वर्तमान में उनके पास केवल उपनाम का नाम है जिसका उपयोग मैंने कीटोल के साथ किया था।
2) क्या इससे कोई फर्क पड़ता है कि मेरे सर्वर पर जावा संस्करण 1.7 है जबकि मेरे विकास कंप्यूटर पर जावा संस्करण 1.6 है? मुझे 1.6 में संकलन करने की आवश्यकता है क्योंकि हमारे स्कूल को 1.7 तक अपग्रेड नहीं किया गया है, इसलिए जब यह क्लाइंट कंप्यूटर पर चलता है तो इसे 1.6 होना चाहिए।
3) क्या यह निर्धारित करने का कोई तरीका है कि जब मैं इसे टर्मिनल से चलाता हूं तो jarsigner का कौन सा संस्करण उपयोग कर रहा हूं? मैंने jarsigner -version की कोशिश की, लेकिन यह विकल्पों में से एक नहीं है। मैं ध्यान दें कि MYKEY.SF फ़ाइल के शीर्ष इस तरह दिखता है:
Signature-Version: 1.0
Created-By: 1.4.2-02 (Blackdown Java-Linux Team)
SHA1-Digest-Manifest: OHMs6w/CQlG3MVYNxC7l1vTWdZw=
Name: org/arps/tranz/TranzActionMap.class
SHA1-Digest: dSI3RKfgUrRHbwnZLyXbkiJLWdU=
इसका मतलब यह है वास्तव में jarsigner चल के कुछ पुराने संस्करण है कि वहाँ? मुझे नहीं लगता था कि जावा 1.4 अभी भी मेरे कंप्यूटर पर था। किसी भी मामले में, jarsigner की मेरी संस्करण के रूप में यहाँ देखा फ़ाइल की ही तरह बनाने के लिए लगता है:
http://docs.oracle.com/javase/tutorial/deployment/jar/intro.html
मैं अगर एक 1.6 jarsigner या 1.7 द्वारा बनाई गई फ़ाइलों jarsigner किसी भी अलग दिख पता नहीं है, या यदि इससे कोई फर्क नहीं पड़ता।
4) यदि jarsigner का संस्करण अपराधी है, तो मैं टर्मिनल (उबंटू) से चलाने के लिए jarsigner का एक नया संस्करण कैसे मजबूर करूं?
आपकी मदद के लिए धन्यवाद। जैसा कि मैंने शुरुआत में कहा था, मैं एक शौकिया प्रोग्रामर हूं। मैं वास्तव में करना चाहता हूं कि अगले हफ्ते मेरी कक्षाओं के लिए तैयार रहें।
अद्यतन:
काफी एक जार उपकरण के साथ एक समय है कि libjli.so नहीं पा सके के लिए संघर्ष करने के बाद, मैं अब सफलतापूर्वक 1.6 जार उपकरण और jarsigner उपकरण, का इस्तेमाल किया है ताकि MyKey के शीर्ष। एस एफ फ़ाइल इस तरह दिखता है:
Signature-Version: 1.0
SHA1-Digest-Manifest-Main-Attributes: DGUFMaJYirZi//67NI+M5RVi63k=
Created-By: 1.6.0_03 (Sun Microsystems Inc.)
SHA1-Digest-Manifest: ZPS3aOyPW/tymxbGdfe4/qBVK/g=
लेकिन मैं अभी भी एक ही व्यवहार है, जहां एप्लिकेशन को उपयोगकर्ता पूछ प्रमाण पत्र को स्वीकार करने के बिना शुरू करने के लिए शुरू होता है मिलता है। तो अब मेरा मुख्य प्रश्न है:
क्या इससे कोई फर्क पड़ता है कि मेरा सर्वर 1.6 के साथ बनाया गया था जबकि मेरा सर्वर 1.7 चल रहा है?
मुझे नहीं पता कि सर्वर पर वास्तव में जावा गतिविधि कितनी होती है। किसी बिंदु पर, यह क्लाइंट कंप्यूटर पर स्विच हो जाता है लेकिन मुझे लगता है कि पहले सर्वर पर jnlp के कुछ हिस्सों में होता है।
[JaNeLA] (http://pscode.org/janela/) का उपयोग करके जेएनएलपी को सत्यापित करना सुनिश्चित करें। –