2013-09-08 4 views
5

मैं शौकिया प्रोग्रामर हूं। मैंने एक एप्लीकेशन बनाया जिसमें एक एकल, स्वयं-हस्ताक्षरित जार फ़ाइल शामिल है। आवेदन केवल मेरे गणित वर्ग के छात्रों द्वारा उपयोग किया जाएगा, इसलिए मुझे लगता है कि स्व-हस्ताक्षर ठीक है।हस्ताक्षर जार फ़ाइल - jnlp उपयोगकर्ता को प्रमाण पत्र स्वीकार करने के लिए संकेत देने में विफल रहता है

मैंने जार पर हस्ताक्षर करने के लिए ओरेकल निर्देशों का पालन किया और फिर जार को सत्यापित करने के लिए jarsigner टूल का उपयोग किया। माना जाता है, यह ठीक था।

.jnlp फ़ाइल में, मैं सभी अनुमतियों के साथ सुरक्षा टैग शामिल:

<security> 
     <all-permissions/> 
    </security> 

जब कार्यक्रम, शुरूआत हालांकि, मैं एक संवाद उपयोगकर्ता को संकेत प्रमाण पत्र स्वीकार करने के लिए या पूछ कभी नहीं देखना क्लाइंट कंप्यूटर पर चलाने के लिए किसी तरह की अनुमति के लिए। ओरेकल दस्तावेज के अनुसार, यह मेरी समझ थी कि मुझे ऐसा संवाद देखना चाहिए।

मैं stackoverflow पर इस पेज को पढ़ लिया है:

JNLP get a permission

और मैं एक ऐसी ही स्थिति है कि मैं एक सुरक्षा अपवाद प्राप्त की है। मेरे मामले में, अपवाद उत्पन्न जब अनुप्रयोग एक 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 के कुछ हिस्सों में होता है।

+1

[JaNeLA] (http://pscode.org/janela/) का उपयोग करके जेएनएलपी को सत्यापित करना सुनिश्चित करें। –

उत्तर

3
अपने विशिष्ट प्रश्न के जवाब में

:

  1. यह जार हस्ताक्षरकर्ता उपकरण द्वारा स्वचालित रूप से नियंत्रित किया जाता है, नाम तो घबराएं नहीं।
  2. सर्वर का जावा संस्करण प्रासंगिक नहीं है, जब तक कि सर्वर कोड संकलित नहीं कर लेता है। लेकिन फिर भी, जावा एप्स। 'आगे संगत' होना चाहिए। अर्थात। एक ऐप। 1.5 में संकलित, 1.5 में चलाया जाना चाहिए, 1.6 & 1.7 ..
  3. मुझे नहीं लगता कि जार साइनर टूल फ़ाइल लेखन में कुछ भी अलग करता है क्योंकि यह पहले बनाया गया था, इसलिए संस्करण अप्रासंगिक है।
  4. बिंदु (3) पर आधारित अप्रासंगिक।
+0

मैक ओएस एक्स पर, आप कीचेन से पहले स्वीकार किए गए प्रमाण पत्र को हटा सकते हैं; विंडोज के बारे में निश्चित नहीं है। – trashgod

+0

@trashgod हालांकि यह शायद विंडोज़ पर भी मामला है, ध्यान दें कि 'अभी भी सुरक्षा अपवाद प्राप्त हो रहा है' यह इंगित करता है कि प्रमाण पत्र कैश में 'हमेशा विश्वास' नहीं है। असल में, मुझे जांच करनी होगी, लेकिन एएफएआईआर जांच एक स्व-हस्ताक्षरित प्रमाणपत्र के साथ 'हमेशा अनुमति' को ओरेकल वीएम द्वारा चुपचाप अनदेखा कर दिया गया था। –

+0

आह, मैं गलत पढ़ता हूं; धन्यवाद। – trashgod

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

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