Java SecurityException: signer जानकारी मेल नहीं खाती


121

मैंने हमेशा की तरह अपनी कक्षाएं फिर से शुरू की, और अचानक निम्न त्रुटि संदेश मिला। क्यों? मेरे द्वारा यह कैसे किया जा सकता है?

java.lang.SecurityException: class "Chinese_English_Dictionary"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:776)

जवाबों:


137

यह तब होता है जब एक ही पैकेज से संबंधित कक्षाएं अलग-अलग JAR फ़ाइलों से लोड की जाती हैं, और उन JAR फ़ाइलों में अलग-अलग प्रमाणपत्रों के साथ हस्ताक्षर किए जाते हैं - या, शायद अधिक बार, कम से कम एक पर हस्ताक्षर किए जाते हैं और एक या अधिक अन्य नहीं होते हैं (जिनमें कक्षाएं लोड की जाती हैं निर्देशिकाओं के बाद से उन AFAIK पर हस्ताक्षर नहीं किए जा सकते हैं)।

इसलिए या तो यह सुनिश्चित कर लें कि सभी JAR (या कम से कम जिनके पास समान पैकेज से कक्षाएं हैं) एक ही प्रमाण पत्र का उपयोग करके हस्ताक्षरित हैं, या ओवरलैपिंग पैकेज के साथ JAR फ़ाइलों के प्रकट होने से हस्ताक्षर हटा दें।


मैंने उसी प्रमाणपत्र का उपयोग किया, लेकिन इसकी समय सीमा समाप्त हो गई, इसे फिर से कैसे नया किया जाए?
फ्रैंक

34
क्या कोई newbies को समझा सकता है कि वह कैसे करे? मैंने एक हफ्ते पहले जावा और स्प्रिंग के साथ काम करना शुरू किया और मैं हार गया।
मेघज

मैं इसी तरह के मुद्दे का सामना कर रहा हूं, लेकिन हाइबरनेट जार में। ये जार हस्ताक्षरित नहीं हैं, फिर भी मैं इस मुद्दे का सामना करता हूं। क्यों? कृपया stackoverflow.com/questions/24386463/…
user613114

एक ही प्रमाण पत्र के साथ कई जार पर हस्ताक्षर करने के लिए कोई विशिष्ट प्रक्रिया है। मैंने एक ही प्रमाण पत्र के साथ जार (एक-एक करके) पर हस्ताक्षर करने की कोशिश की, लेकिन फिर भी निम्नलिखित अपवाद मिला: हस्ताक्षरकर्ता जानकारी एक ही पैकेज में अन्य वर्गों के हस्ताक्षरकर्ता जानकारी से मेल नहीं खाती है
वनस्पति

@vegeta: क्षमा करें, मुझे वास्तव में हस्ताक्षर करने की प्रक्रिया का कोई अनुभव नहीं है।
माइकल बोर्गवर्ड

45

इसके आस-पास का एक सरल तरीका सिर्फ अपनी आयातित जार फ़ाइलों के क्रम को बदलने की कोशिश करना है जो कि (ग्रहण) से किया जा सकता है। अपने पैकेज पर राइट क्लिक करें -> बिल्ड पाथ -> कन्फर्म बिल्ड पाथ -> रेफरेंस एंड लाइब्रेरी -> ऑर्डर और एक्सपोर्ट। जार के क्रम को बदलने की कोशिश करें जिसमें हस्ताक्षर फ़ाइलें हैं।


मेरे पास परीक्षण किया जा करने के लिए एक हस्ताक्षरित जार फ़ाइल है, उसी पैकेज, जूनिट, जेआर, अन्य जार के साथ परीक्षण श्रेणी की फाइलें। ग्रहण में उचित क्रम कौन सा है? निश्चित नहीं कि मैंने अभी तक सभी संयोजनों की कोशिश की। लेकिन क्लास लोडर से आगे नहीं आया SecurityException
datafiddler

इस समाधान के लिए धन्यवाद, मैंने सिर्फ junit5 और मेरे हैमरेस्ट-ऑल.जर के क्रम को बदल दिया है और अब मेरे परीक्षण फिर से काम कर रहे हैं :)
Wallnussfolie

41

यदि आप मावेन का उपयोग करते हैं, तो जार को डीबग करने का एक उपयोगी तरीका है:

mvn dependency:tree

उदाहरण के लिए, एक अपवाद के लिए:

java.lang.SecurityException: class "javax.servlet.HttpConstraintElement"'s signer information does not match signer information of other classes in the same package

हम क्या:

mvn dependency:tree|grep servlet

इसका आउटपुट:

[INFO] +- javax.servlet:servlet-api:jar:2.5:compile
[INFO] +- javax.servlet:jstl:jar:1.2:compile
[INFO] |  +- org.eclipse.jetty.orbit:javax.servlet.jsp:jar:2.2.0.v201112011158:compile
[INFO] |  +- org.eclipse.jetty.orbit:javax.servlet.jsp.jstl:jar:1.2.0.v201105211821:compile
[INFO] |  +- org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:compile
[INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.0.0.RC2:compile

शोकेस सर्वलेट-एपी 2.5 और javax.servlet 3.0.0.x को दिखाता है।

B. अन्य उपयोगी संकेत (सुरक्षा अपवाद को कैसे डीबग करें और मावेन डिप्स को कैसे अलग करें) इस सवाल पर हैं कि साइनर जानकारी मेल नहीं खाती


मैं एक आईडीई के रूप में एसटीएस का उपयोग कर रहा हूं, मैंने कंसोल को मावेन कंसोल पर स्विच किया और वहां कमांड के ऊपर चलाने की कोशिश की, लेकिन कुछ भी नहीं हुआ ... एसटीएस में मावेन कंसोल दिखता है / यह सिर्फ आउटपुट प्रदर्शित करने के लिए ग्रहण करता है लेकिन किसी भी आदेश को स्वीकार नहीं करता है। या मैं गलत हूँ?
नैनोसॉफ्ट

1
नैनोसॉफ्ट, ऐसा लगता है कि आपका प्रश्न एसटीएस से संबंधित है, इसलिए आप इसके लिए एक नया शीर्ष-स्तरीय प्रश्न बना सकते हैं। सुनिश्चित करने के लिए mvan कमांड लाइन तर्क स्वीकार करता है।
यूजीन जीआर। फिलिपोव

@ EugeneGr.Philippov यह कैसे संबंधित है? निर्भरता क्या है: ट्री शो जार का संस्करण है, जो कि हस्ताक्षरकर्ता से संबंधित नहीं है
गेवरियल

@ गेवरियल मैंने ज्यादा खुदाई नहीं की, लेकिन जब आप संघर्षों से छुटकारा पा लेते हैं, तो अपवाद नहीं होता है।
यूजीन जीआर। फिलीपोव

यह कुछ मामलों में सही हो सकता है लेकिन सभी में नहीं। उदाहरण के लिए com.microsoft.azure समूह में विभिन्न कलाकृतियाँ कई स्रोतों से संकलित की जाती हैं, इसलिए उनमें से कुछ का एक ही संस्करण भी नहीं है। और ज्यादातर मामलों में कई संस्करणों में त्रुटि उत्पन्न नहीं होती है (भले ही एन्फोर्सर प्लगइन चेतावनी देता है या इसके कारण विफल रहता है)
गेवरियल

23

मेरे मामले में, मैंने अपने पुस्तकालय पथ में BouncyCastle के JAR संस्करण की नकल की थी: S


2
मेरे साथ भी ऐसा ही हुआ। सभी बीसी जार को हटाने और सही संस्करणों को लोड करने से इसे हल किया गया।
ब्रोकन_विंडो

1
@ कैडरिक - सेम बाउंसीकैसल मेरे लिए था
नैनोसॉफ्ट

मेरे मामले में क्योंकि स्प्रिंग-क्लाउड के लिए jdk15on की आवश्यकता थी और मैं अपने प्रोजेक्ट के लिए bcprov-jdk16 का उपयोग कर रहा था।
Glats

8

मेरे पास एक समान अपवाद था:

java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package

मूल समस्या यह थी कि मैंने दो बार हैमरेस्ट लाइब्रेरी को शामिल किया। एक बार मावेन पोम फाइल का उपयोग करें। और मैंने JUnit 4 लाइब्रेरी (जिसमें Hamcrest लाइब्रेरी भी है) को प्रोजेक्ट के निर्माण पथ में जोड़ा। मुझे बस बिल्ड पथ से जुनीत को निकालना था और सब कुछ ठीक था।


6

यह cglib-instrumented proxies के साथ हो सकता है क्योंकि CGLIB अनुप्रयोग लक्ष्य वर्ग की हस्ताक्षरकर्ता जानकारी के बजाय अपने स्वयं के हस्ताक्षरकर्ता जानकारी का उपयोग करता है।


4
यदि यह मामला है तो हम क्या कर सकते हैं?
Leandro

@ जेरेक: यहां समाधान क्या होगा? क्या हम इस समाधान का उपयोग कर सकते हैं? डेवलपर
गौरव

@gaurav हमने हस्ताक्षरित जार का उपयोग करना बंद कर दिया। वे केवल जावा वेब स्टार्ट के लिए आवश्यक थे, और इसे लंबे समय तक छोड़ दिया गया है।
जारेक प्रोजगोडकी

4
  1. साइन करने के बाद, एक्सेस: dist \ lib
  2. अतिरिक्त .jar का पता लगाएं
  3. Winrar का उपयोग करना, आप एक फ़ोल्डर के लिए निकालें ("फ़ोल्डर नाम के लिए निकालें") विकल्प
  4. अभिगमन: मेटा-इन / मैनिफेस्ट.म.फ़
  5. प्रत्येक हस्ताक्षर को इस तरह हटाएं:

नाम: net / sf / jasperreports / engine / use / xml / jacenXPathExecuterFactory.c lass SHA-256-Digest: q3B5wW + hLX / + lP2 / L0 / 6wRVXRHq1mISBo1dkixT6Vxc =

  1. फ़ाइल सहेजें
  2. फिर से जिप
  3. पुनर्जागरण .jar वापस करने के लिए
  4. पहले से

आपकी सलाह के बाद मुझे कुछ समस्याएँ हो रही हैं: stackoverflow.com/questions/33988136/…
रिंग

2

यदि आप इसे ग्रहण में चला रहे हैं, तो निर्माण पथ में जोड़े गए किसी भी प्रोजेक्ट के जार की जांच करें; या एक ही नाम स्थान से मेल खाते कई जार के लिए नियंत्रण-शिफ्ट-टी और स्कैन करें। फिर प्रोजेक्ट के बिल्ड पथ से निरर्थक या पुराने जार निकालें।


2

मैं ग्रहण और JUnit 5 के साथ यह समस्या आ रही है। मेरा समाधान user2066936 द्वारा पिछले उत्तर से प्रेरित है। यह आयात पुस्तकालयों के क्रम को फिर से संगठित करना है:

  1. प्रोजेक्ट पर राइट क्लिक करें।
  2. [जावा बिल्ड पाथ] खोलें।
  3. ऑर्डर और निर्यात पर क्लिक करें।
  4. फिर JUNIT को ऊपरी प्राथमिकता पर धकेलें।

1

मेरे मामले में यह एक पैकेज नाम संघर्ष था। वर्तमान परियोजना और हस्ताक्षरित संदर्भित पुस्तकालय में एक पैकेज आम था package.foo.utils। बस वर्तमान प्रोजेक्ट त्रुटि-प्रवण पैकेज नाम को कुछ और में बदल दिया।


1

थोड़ा बहुत पुराना धागा लेकिन जब से मैं इस पर काफी समय से अटका हुआ था, तो यह तय है (आशा है कि यह किसी की मदद करता है)

मेरा परिदृश्य:

पैकेज का नाम है: com.abc.def। 2 जार फाइलें हैं, जिनमें इस पैकेज से कक्षाएं शामिल हैं jar1 और jar2 अर्थात कुछ कक्षाएं jar1 और अन्य jar2 में मौजूद हैं। इन जार फ़ाइलों को एक ही कीस्टोर का उपयोग करके साइन इन किया जाता है लेकिन बिल्ड में अलग-अलग समय पर (यानी अलग-अलग)। ऐसा लगता है कि jar1 और jar2 में फ़ाइलों के लिए अलग-अलग हस्ताक्षर हैं।

मैंने सभी फाइलों को jar1 में डाला और उन सभी को एक साथ बनाया (और हस्ताक्षरित)। समस्या दूर हो जाती है।

पुनश्च: पैकेज के नाम और जार फ़ाइल नाम केवल उदाहरण हैं


1

यदि आपने b Councilycastle.org (crypto-159.zip से मेरे मामले में) में सभी जार जोड़े हैं, तो उन JDK के लिए जो आप पर लागू नहीं होते हैं उन्हें हटा दें। अतिरेक हैं। आपको शायद "jdk15on" जार की आवश्यकता है।


यह वास्तव में मेरा मुद्दा था, मैं एक बीसी एप्लिकेशन को एक एप्लिकेशन सर्वर में तैनात कर रहा था जिसके पास पहले से ही अपने साझा किए गए लिबास फ़ोल्डर में उसी का एक कस्टम हस्ताक्षरित संस्करण है, समाधान उन्हें हटाने और नए लोगों का उपयोग करना था।
GChiappe 15

1

यह सवाल लंबे समय तक चला है लेकिन मैं किसी चीज में पिच करना चाहता हूं। मैं एक स्प्रिंग प्रोजेक्ट चुनौती पर काम कर रहा हूं और मुझे पता चला कि ग्रहण आईडीई में है। यदि आप स्प्रिंग बूट रेस्ट एपीआई के लिए मावेन या ग्रैडल का उपयोग कर रहे हैं, तो आपको बिल्ड पथ में Junit 4 या 5 को निकालना होगा और Junit को अपनी pom.xml या Gradle build file में शामिल करना होगा। मुझे लगता है कि yml कॉन्फ़िगरेशन फ़ाइल पर भी लागू होता है।


0

यह तब भी होता है जब आप एक फ़ाइल को अलग-अलग नामों से या दो बार अलग-अलग स्थानों से शामिल करते हैं, खासकर यदि ये एक ही फ़ाइल के दो अलग-अलग संस्करण हैं।


मुझे खेद है लेकिन मुझे समझ नहीं आ रहा है। किस तरह की फाइल? मेरे मामले में त्रुटि वर्ग के साथ है। org.jboss.security.xacml.jaxb.PoluritiesType और मुझे यकीन है कि यह केवल एक जार में है जो JBoss EAP 5.2 (/EnterterPlatform-5.2.0/jboss-eap-5.2// के साथ आता है। jboss-के रूप में / सामान्य / lib / jbossxacml.jar)
Leandro

0

मैं इसे ठीक कर सकता था।

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

रिज़ॉल्यूशन: JAXB ऑप्टिमाइज़ेशन जो कि हस्ताक्षरित जार के साथ संगत नहीं है, को निष्क्रिय करने के लिए निम्न सिस्टम प्रॉपर्टी जोड़ें: -Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize = true

Ref: https://access.redhat.com/site/solutions/42149


0

@Mohit Phougat प्रतिक्रिया के आधार पर, यदि आप @Grab एनोटेशन के साथ ग्रूवी चला रहे हैं, तो आप इस तरह के एनोटेशन को फिर से ऑर्डर करने का प्रयास कर सकते हैं।


0

JUnit + बाकी एश्योर्ड + हैमरेस्ट का उपयोग करते समय मेरे साथ ऐसा हुआ, इस मामले में, पथ के निर्माण के लिए जूनिट को न जोड़ें, यदि आपके पास मावेन प्रोजेक्ट है, तो इससे मुझे हल हो गया, नीचे pom.xml है

<dependencies>

    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <version>3.0.0</version>
    </dependency>

    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-all</artifactId>
        <version>1.3</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>

    </dependency>


</dependencies>

0

मैं JUNIT 5 चला रहा था और Hamcrest बाहरी जार का भी उल्लेख कर रहा था । लेकिन Hamcrest भी JUNIT 5 लाइब्रेरी का हिस्सा है । इसलिए, मुझे JUNIT 5 लाइब्रेरी के बाहरी हैमरेस्ट जार फ़ाइल के निर्माण के क्रम को बदलना होगा ।

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.