Java SecurityException: imzalayan bilgileri eşleşmiyor


121

Sınıflarımı her zamanki gibi yeniden derledim ve aniden aşağıdaki hata mesajını aldım. Neden? Nasıl düzeltebilirim?

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)

Yanıtlar:


137

Bu, aynı pakete ait sınıflar farklı JAR dosyalarından yüklendiğinde ve bu JAR dosyalarının farklı sertifikalarla imzalanmış imzaları olduğunda veya belki de daha sık olarak, en az biri imzalandığında ve bir veya daha fazla diğerleri olmadığında (yüklenen sınıfları içerir) meydana gelir. AFAIK imzalanamadığı için dizinlerden).

Bu nedenle, tüm JAR'ların (veya en azından aynı paketlerden sınıfları içerenlerin) aynı sertifika kullanılarak imzalandığından emin olun veya çakışan paketler içeren JAR dosyalarının bildiriminden imzaları kaldırın.


Aynı sertifikayı kullandım ama süresi doldu, nasıl yeniden yenileyebilirim?
Frank

34
Birisi yeni başlayanlara bunun nasıl yapılacağını açıklayabilir mi? Bir hafta önce java ve bahar ile çalışmaya başladım ve kayboldum.
mghz

Benzer bir sorunla karşı karşıyayım, ancak hazırda bekletme kavanozlarında. Bu kavanozlar imzalı değil, hala bu sorunla karşı karşıyayım. Neden? Lütfen stackoverflow.com/questions/24386463/… sayfasına
user613114

aynı sertifika ile birden fazla kavanoz imzalamak için belirli bir süreç var mı? Aynı sertifikayla kavanozları (tek tek) imzalamayı denedim, ancak yine de şu istisnaya sahibim: imzalayan bilgileri aynı paketteki diğer sınıfların imzalayan bilgileriyle eşleşmiyor
vegeta

@vegeta: üzgünüm, imzalama prosedürü ile ilgili herhangi bir deneyimim yok.
Michael Borgwardt

45

Bunu aşmanın basit bir yolu, içe aktarılan jar dosyalarınızın (Eclipse) içinden yapılabilecek sırasını değiştirmeyi denemektir. Paketinize sağ tıklayın -> Oluşturma Yolu -> Oluşturma yolunu yapılandır -> Referanslar ve Kitaplıklar -> Sırala ve Ver. İmza dosyalarını içeren kavanozların sırasını değiştirmeyi deneyin.


Test edilecek imzalı bir jar dosyam var, aynı paket, junit, jre ve diğer kavanozlara sahip test sınıfı dosyaları. Tutulmada doğru sıra hangisi? Henüz tüm kombinasyonları denediğimden emin değilim. Ancak sınıf yükleyici SecurityException'ın ötesine
geçmedi

Bu çözüm için teşekkürler, az önce junit5 ve hamcrest-all.jar'ımın sırasını değiştirdim ve şimdi testlerim tekrar çalışıyor :)
Wallnussfolie

41

A. maven kullanıyorsanız, çakışan kavanozlarda hata ayıklamanın yararlı bir yolu şudur:

mvn dependency:tree

Örneğin, bir istisna için:

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

yaparız:

mvn dependency:tree|grep servlet

Çıktısı:

[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

servlet-api 2.5 ve javax.servlet 3.0.0.x'in çakıştığını gösterir.

B. Diğer yararlı ipuçları (güvenlik istisnasında nasıl hata ayıklanacağı ve maven depolarının nasıl hariç tutulacağı), İmzalayan bilgilerinin eşleşmediği sorusundadır .


STS'yi bir IDE olarak kullanıyorum, konsolu maven konsoluna geçirdim ve yukarıda komutu çalıştırmayı denedim ama hiçbir şey olmadı ... Görünüşe göre STS / eclipse'deki maven konsolu çıktıyı görüntülemek için ama herhangi bir komutu kabul etmiyor. Yoksa yanılıyor muyum?
nanosoft

1
nanosoft, Sorunuzun STS ile ilgili olduğu anlaşılıyor, bu yüzden onun için yeni bir üst düzey soru oluşturabilirsiniz. mvn kesinlikle komut satırı argümanlarını kabul eder.
Eugene Gr. Philippov

@ EugeneGr.Philippov bu nasıl bağlantılı? Bağımlılık nedir: ağaç şovları, kavanozların versiyonudur, bu imzalayanla ilgili değildir
Gavriel

@Gavriel Çok kazmadım ama çatışmalardan kurtulduğunuzda istisna olmuyor.
Eugene Gr. Philippov

Bu, bazı durumlarda doğru olabilir ama tamamen değil. Örneğin com.microsoft.azure grubundaki farklı yapılar, birden çok kaynaktan derlenmiş gibi görünüyor, bu nedenle bazıları aynı sürüme sahip bile değil. Ve çoğu durumda birden fazla sürüme sahip olmak hatayı üretmez (uygulayıcı eklentisi bu nedenle uyarı verse veya başarısız olsa bile)
Gavriel

23

Benim durumumda, kütüphane yolumda BouncyCastle'ın JAR sürümünü kopyaladım: S


2
Aynısı bana da oldu. Tüm BC kavanozlarını kaldırmak ve doğru sürümleri yüklemek sorunu çözdü.
Broken_Window

1
@Cedric - Same BouncyCastle benim için
geçerliydi

Benim durumumda, Spring-Cloud'un jdk15on gerektirmesi ve projem için bcprov-jdk16 kullanmamdı.
Glats

8

Benzer bir istisnam vardı:

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

Temel sorun, Hamcrest kitaplığını iki kez dahil etmemdi. Maven pom dosyasını kullanırken. Ve ayrıca JUnit 4 kütüphanesini (ayrıca bir Hamcrest kütüphanesi içeren) projenin inşa yoluna ekledim. Sadece JUnit'i yapı yolundan çıkarmak zorunda kaldım ve her şey yolundaydı.


6

Bu, cglib aracılı proxy'lerde meydana gelebilir çünkü CGLIB, uygulama hedef sınıfının imzalayan bilgileri yerine kendi imzalayan bilgilerini kullanır.


4
Durum buysa ne yapabiliriz?
Leandro

@Jarek: Burada çözüm ne olabilir? bu çözümü kullanabilir miyiz? developer.jboss.org/thread/241718
gaurav

@gaurav İmzalı kavanozları kullanmayı bıraktık. Sadece Java Web Start için gerekliydi ve uzun süredir terk edildi.
Jarek Przygódzki

4
  1. İmzalamadan sonra erişim: dist \ lib
  2. Fazladan .jar bulun
  3. Winrar'ı kullanarak, bir klasör için ayıklayın ("klasör adı" na çıkartın) seçeneği
  4. Erişim: META-INF / MANIFEST.MF
  5. Her imzayı şu şekilde silin:

Ad: net / sf / jasperreports / engine / util / xml / JaxenXPathExecuterFactory.c lass SHA-256-Özet: q3B5wW + hLX / + lP2 + L0 / 6wRVXRHq1mISBo1dkixT6Vxc =

  1. Dosya 'yı kaydet
  2. Tekrar sıkıştır
  3. Renaime ext'den .jar'a geri
  4. Zaten

Senden tavsiye aşağıdaki bazı sorunlar yaşıyorum: stackoverflow.com/questions/33988136/...
Halka

2

Eclipse'de çalıştırıyorsanız, derleme yoluna eklenen tüm projelerin kavanozlarını kontrol edin; veya control-shift-T yapın ve aynı ad alanıyla eşleşen birden çok kavanozu tarayın. Ardından, gereksiz veya eski kavanozları projenin oluşturma yolundan kaldırın.


2

Eclipse ve JUnit 5 ile bu problemi yaşıyorum. Çözümüm, user2066936 tarafından verilen önceki cevaptan ilham alıyor. İçe aktarma kitaplıklarının sırasını yeniden yapılandırmak:

  1. Projeye sağ tıklayın.
  2. [Java Derleme Yolu] 'nu açın.
  3. Sipariş Ver ve Dışa Aktar'ı tıklayın.
  4. Daha sonra JUNIT düğmesine en yüksek önceliğe basın.

1

Benim durumumda bir paket adı çakışmasıydı. Mevcut proje ve imzalı referans kitaplığı ortak bir pakete sahipti package.foo.utils. Mevcut proje hatasına açık paket adını başka bir şeyle değiştirdim.


1

Biraz fazla eski iş parçacığı ama bu konuda oldukça uzun bir süre takılıp kaldığım için işte düzeltme var (umarım birine yardımcı olur)

Senaryom:

Paket adı: com.abc.def. Bu paketteki sınıfları içeren 2 jar dosyası vardır, örneğin jar1 ve jar2 yani bazı sınıflar jar1'de ve diğerleri jar2'de mevcuttur. Bu jar dosyaları, aynı anahtar deposu kullanılarak ancak derlemede farklı zamanlarda (yani ayrı ayrı) imzalanır. Bu, jar1 ve jar2'deki dosyalar için farklı imzalarla sonuçlanıyor gibi görünüyor.

Tüm dosyaları jar1'e koydum ve hepsini bir araya getirdim (ve imzaladım). Sorun ortadan kalkar.

Not: Paket adları ve jar dosyası adları yalnızca örnektir


1

Tüm kavanozları bouncycastle.org'dan eklediyseniz (benim durumumda crypto-159.zip'den), sizin için geçerli olmayan JDK'ları kaldırın. Fazlalıklar var. Muhtemelen sadece "jdk15on" kavanozlarına ihtiyacınız vardır.


Bu tam olarak benim sorunumdu, paylaşılan kütüphaneler klasöründe zaten özel olarak imzalanmış bir sürümü olan bir uygulama sunucusunda bir BC uygulaması dağıtıyordum, çözüm bunları kaldırmak ve yenilerini kullanmaktı.
GChiappe

1

Bu soru uzun süredir devam ediyor, ancak bir şeye girmek istiyorum. Bir Bahar projesi meydan okuması üzerinde çalışıyordum ve bunu Eclipse IDE'de keşfettim. Spring Boot Rest API'leri için Maven veya Gradle kullanıyorsanız, derleme yolundaki Junit 4 veya 5'i kaldırmanız ve pom.xml veya Gradle derleme dosyanıza Junit eklemeniz gerekir. Sanırım bu yml yapılandırma dosyası için de geçerli.


0

Bu ayrıca, farklı adlara sahip bir dosyayı veya iki kez farklı konumlardan eklerseniz, özellikle de bunlar aynı dosyanın iki farklı sürümüyse gerçekleşir.


Üzgünüm ama anlamıyorum Ne tür bir dosya? Benim durumumda hata, org.jboss.security.xacml.jaxb.PoliciesType sınıfındadır ve bunun yalnızca JBoss EAP 5.2 (/EnterprisePlatform-5.2.0/jboss-eap-5.2/) ile birlikte gelen bir kavanozda olduğundan eminim jboss-as / common / lib / jbossxacml.jar)
Leandro

0

Düzeltebilirim.

Temel Neden: Bu, Sun JAXB uygulamasını imzalı kavanozlarla kullanırken yaygın bir sorundur. Esasen JAXB uygulaması, yansıma kullanmadan özelliklere doğrudan erişmek için bir sınıf oluşturarak yansımadan kaçınmaya çalışıyor. Ne yazık ki, bu yeni sınıfı, bu hatanın geldiği yer olan erişilen sınıfla aynı pakette oluşturur.

Çözüm: İmzalı kavanozlarla uyumlu olmayan JAXB optimizasyonlarını devre dışı bırakmak için aşağıdaki sistem özelliğini ekleyin: -Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize = true

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


0

@Mohit Phougat yanıtına göre, @Grab ek açıklamalarıyla bir Groovy çalıştırıyorsanız, bu tür ek açıklamaları yeniden sipariş etmeyi deneyebilirsiniz.


0

JUnit + restured + hamcrest'i kullanırken bu bana oldu, bu durumda, yol oluşturmak için junit eklemeyin, eğer maven projeniz varsa, bu beni çözdü, aşağıda 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'i çalıştırıyordum ve aynı zamanda Hamcrest harici kavanozuna atıfta bulunuyordum. Ancak Hamcrest, JUNIT 5 kütüphanesinin bir parçasıdır . Bu yüzden, derleme yolundaki JUNIT 5 kitaplığındaki harici Hamecrest jar dosyasının sırasını değiştirmem gerekiyor .

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.