java जावा ऐप्पलेट सुरक्षा चेतावनी "जार फ़ाइल मैनिफेस्ट में अनुमतियों का विशेषता नहीं है" का मतलब क्या है?




jar applet (4)

आपको प्रमाण पत्र खरीदने की ज़रूरत नहीं है, बस मेनिफ़ेस्ट फ़ाइल को ठीक करें

इस पंक्ति को जोड़ें:

permissions: all-permissions

या यह पंक्ति अगर आपको केवल सीमित पहुंच की आवश्यकता है:

permissions: sandbox

मेरे पास एक जावा एप्लेट है जो क्लाइंट के स्थानीय फाइल सिस्टम तक पहुंच की आवश्यकता है। मैंने अपने लिए एक सरल प्रमाण पत्र बनाया है (यह Verisign, Commodo, ... द्वारा प्रमाणित नहीं है)। मैंने निम्नलिखित टेम्पलेट के साथ जार पर हस्ताक्षर किए:

del \Users\koalabruder\.keystore
"C:\Program Files\Java\jdk1.7.0_45\bin\keytool" -genkey -alias %1 -keypass kp -dname "cn=inin" -storepass ab987c
"C:\Program Files\Java\jdk1.7.0_45\bin\jarsigner.exe" -storepass abc -keypass kp %2 %1
"C:\Program Files\Java\jdk1.7.0_45\bin\keytool" -export -storepass abc -alias %1 -file %3

सरल सुरक्षा चेतावनी है कि मेरे पास "कोई हस्ताक्षरित प्रमाणपत्र नहीं है" वर्षों से अस्तित्व में रहा है और मेरी समस्या नहीं है।

मेरी समस्या ये है, कि सुरक्षा चेतावनी बदल गई है क्योंकि पिछले जावा अद्यतनों में से एक:

इस एप्लिकेशन को भविष्य के जावा सुरक्षा अद्यतन में अवरुद्ध किया जाएगा क्योंकि JAR फ़ाइल मैनिफ़ेस्ट में अनुमतियों की विशेषता नहीं है। कृपया अधिक जानकारी के लिए प्रकाशक से संपर्क करें।

इसका क्या मतलब है? मेरे द्वारा यह कैसे किया जा सकता है? क्या मुझे एक प्रमाणपत्र खरीदना है? क्या मुझे मैनिफेस्ट (मैनिफ़ेस्ट। एमएफ़) को ठीक करना है? अनुमति विशेषता क्या है?

अद्यतन: यहां जार फ़ाइल से मेरी स्पष्ट जानकारी है

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
Application-Name: inin 
Permissions: all-permissions 
Created-By: 1.7.0_45-b18 (Oracle Corporation)

Name: net/inin/transfer/ul/UlPanel.class
SHA-256-Digest: asdfasddddddddddddddddddddddddddddddddd=

मैं एक ही समस्या में भाग गया और मेरे मैनिफेस्ट को बदलते हुए इसे ठीक नहीं किया।

अंत में मुझे पता चला, कि मैंने एक लाइब्रेरी का संदर्भ दिया जो अपने स्वयं के मसले के साथ अपने जार में आया था। मैं उस जार-फाइल की एक कॉपी का उपयोग कर रहा था जिसके पास अनुमतियाँ और कोडबेस नहीं थे।

इसलिए, यदि आप JRE सिस्टम लाइब्रेरी को छोड़कर किसी भी पुस्तकालय का संदर्भ देते हैं, तो जार फ़ाइल में मैनिफेस्ट की जांच करें (जैसे इसे 7zip के साथ खोलकर) यदि इसमें विशेषताओं शामिल नहीं हैं, तो आप निम्न कर सकते हैं:

  • अगर निर्माता का एक नया संस्करण है, तो जांचें वह शायद इस समस्या पर गौर कर सकता था
  • जार फ़ाइल को खोलें, मैनिफेस्ट और जार को फिर से संपादित करें, या
  • अपने खुद के जार के साथ पुस्तकालय मर्ज।

पिछले दो के लिए, लाइसेंस की जांच करें जिसके तहत पुस्तकालय प्रकाशित किया गया है। शायद आपको उत्पाद को इस तरह से हेरफेर करने की अनुमति नहीं है।


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

कोडेबेस विशेषता को भी जोड़ना, जैसे: "कोडबेस: xyz.com" वास्तव में चेतावनी गायब हो जाती है (ध्यान दें कि मूल चेतावनी पाठ रिफरिंग कर रहा था, जैसा कि इस मामले में, "अनुमति" विशेषता से संबंधित कोडबसेज़ नहीं। ।)।

यह शायद जेरे में एक बग है?


नेटबीन्स में मैंने नोट किया कि मैनिफ़ेस्ट फ़ाइल निर्माण के दौरान उत्पन्न होती है .. इसलिए संक्षिप्त रूप से मैंने इस समस्या को ठीक करने के लिए उस टेम्पलेट के अंदर मेरी प्रकट विशेषताओं को शामिल करने के लिए क्या किया है जो मेनिफेस्ट पैदा करने के लिए ज़िम्मेदार है I

ऐसा करने के लिए इन चरणों का पालन करें:

1- किसी भी संपादक के साथ इस फाइल को खोलें: (पीएटीएच) \ nbproject \ jfx-impl.xml
(पैट): आपकी परियोजना का मार्ग है

2- के लिए खोजें: "// मैनिफेस्ट" मेरा ऐसा दिखता है:

                // manifest
                var man = jar.createManifest();
                var a1val = project.getProperty("application.vendor");
                var a1 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
                a1.setName("Implementation-Vendor");
                a1.setValue(a1val);
                man.addConfiguredAttribute(a1);
                var a2val = project.getProperty("application.title");
                var a2 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
                a2.setName("Implementation-Title");
                a2.setValue(a2val);
                man.addConfiguredAttribute(a2);
                var a3 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
                a3.setName("Implementation-Version");
                a3.setValue("1.0");
                man.addConfiguredAttribute(a3);


                //******insert your Attributes code here*******

                jar.perform();

3- "// * अपने गुणों को यहां डालें ** के तहत", आप अपने खुद के प्रकट विशेषता कोड को सम्मिलित कर सकते हैं, मेरी स्थिति में कोडबेज को शामिल करने के लिए पर्याप्त है, और अनुमतियाँ .. आप अपने कोड का उपयोग भी कर सकते हैं:

                ...                 
                //******insert your Attributes here*******
                var a50 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
                a50.setName("permissions");
                a50.setValue("all-permissions");
                man.addConfiguredAttribute(a50);

                var a51 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
                a51.setName("codebase");
                a51.setValue("*");
                man.addConfiguredAttribute(a51);
                ...

4- फिर निर्माण और आप फिर से उस चेतावनी को देखने अभ्यस्त।

कुछ नोट:

  • मैं दृढ़ता से अनुशंसित विशेषता दस्तावेजों की जांच करने की सलाह देता हूं जो सुरक्षा से संबंधित है @ http://docs.oracle.com/javase/tutorial/deployment/jar/secman.html

  • कोडबेस में वाइल्डकार्ड "*" मान का उपयोग न करें, और सुरक्षितता के लिए http के बजाय https का उपयोग करना बेहतर होगा :-) मैं इसे केवल विकास के लिए उपयोग कर रहा हूं

सौभाग्य,'।







security-warning