web-dev-qa-db-fra.com

Java SecurityException: les informations sur le signataire ne correspondent pas

J'ai recompilé mes cours comme d'habitude, et j'ai soudainement reçu le message d'erreur suivant. Pourquoi? Comment puis-je le réparer?

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)
112
Frank

Cela se produit lorsque les classes appartenant au même package sont chargées à partir de fichiers JAR différents et que ces fichiers JAR portent des signatures signées avec des certificats différents - ou, le plus souvent, au moins un est signé et un ou plusieurs autres ne le sont pas (y compris les classes chargées des répertoires puisque ces informations ne sont pas signées).

Vous devez donc vous assurer que tous les JAR (ou au moins ceux contenant des classes des mêmes packages) sont signés à l'aide du même certificat, ou supprimer les signatures du manifeste des fichiers JAR contenant des packages qui se chevauchent.

125

Une solution simple consiste simplement à modifier l’ordre des fichiers JAR importés à partir de (Eclipse). Faites un clic droit sur votre package -> Chemin de construction -> Configurer le chemin de construction -> Références et bibliothèques -> Commande et exportation. Essayez de changer l'ordre des pots contenant des fichiers de signature.

43
Mohit Phougat

A. Si vous utilisez maven, un moyen utile de déboguer des bocaux en conflit est le suivant:

mvn dependency:tree

Par exemple, pour une exception:

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

nous faisons:

mvn dependency:tree|grep servlet

Sa sortie:

[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

montre des conflits entre servlet-api 2.5 et javax.servlet 3.0.0.x.

B. D'autres astuces utiles (comment déboguer l'exception de sécurité et exclure les députées maven) se trouvent à la question à Les informations sur le signataire ne correspondent pas .

39

Dans mon cas, j'avais dupliqué la version JAR de BouncyCastle dans le chemin de la bibliothèque: S

22
Cedric Simon

J'ai eu une exception similaire:

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

Le problème fondamental est que j'ai inclus la bibliothèque Hamcrest à deux reprises. Une fois en utilisant le fichier pom Maven. Et j'ai également ajouté la bibliothèque JUnit 4 (qui contient également une bibliothèque Hamcrest) au chemin de génération du projet. Je devais simplement supprimer JUnit du chemin de compilation et tout allait bien.

7
Marvin

Cela peut se produire avec les mandataires cglib-instrumentés car CGLIB utilise ses propres informations de signataire au lieu des informations de signataire de la classe cible de l'application.

6
Jarek Przygódzki
  1. Après le signe, accès: dist\lib
  2. Trouver des fichiers .jar supplémentaires
  3. En utilisant Winrar, vous extrayez pour un dossier (extraire dans "nom du dossier") option
  4. Accès: META-INF/MANIFEST.MF
  5. Supprimer chaque signature comme ça:

Nom: net/sf/jasperreports/engine/util/xml/JaxenXPathExecuterFactory.c lass SHA-256-Digest: q3B5wW + hLX/+ lP2 + L0/6wRVXRHq1mISBo1dkixT6xVxc =

  1. Sauvegarder le fichier
  2. Zip à nouveau
  3. Renaime ext à .jar retour
  4. Déjà
4
Douglas Tybel

Si vous l'exécutez dans Eclipse, vérifiez les fichiers JAR de tous les projets ajoutés au chemin de génération. ou faites control-shift-T et recherchez plusieurs fichiers JAR correspondant au même espace de nom. Supprimez ensuite les fichiers JAR redondants ou obsolètes du chemin de génération du projet.

2
user2066936

Un fil un peu trop vieux, mais comme je suis resté bloqué pendant un bon bout de temps, voici le correctif (j'espère que cela aidera quelqu'un)

Mon scénario:

Le nom du paquet est: com.abc.def. Il y a 2 fichiers jar contenant les classes de ce paquetage, à savoir jar1 et jar2, c'est-à-dire que certaines classes sont présentes dans jar1 et d'autres dans jar2. Ces fichiers jar sont signés à l’aide du même magasin de clés, mais à des moments différents de la construction (c’est-à-dire séparément). Cela semble entraîner une signature différente pour les fichiers dans jar1 et jar2.

J'ai mis tous les fichiers dans jar1 et les ai construits (et signés) tous ensemble. Le problème s'en va.

PS: Les noms de package et les noms de fichier jar ne sont que des exemples.

1
mukeshkumar

Dans mon cas, c'était un conflit de nom de paquet. Le projet en cours et la bibliothèque référencée signée ont un package en commun package.foo.utils. Vient de changer le nom du paquet en cours susceptible de générer des erreurs du projet actuel.

1
buzz2buzz

Si vous avez ajouté tous les pots de bouncycastle.org (dans mon cas, ceux de crypto-159.Zip), supprimez simplement ceux des kits JDK qui ne vous concernent pas. Il y a des licenciements. Vous n'avez probablement besoin que des bocaux "jdk15on".

0
Bertrand_Szoghy

Cela se produit également si vous incluez deux fois un fichier avec des noms différents ou à des emplacements différents, en particulier s'il s'agit de deux versions différentes du même fichier.

0
Tomas Walek

Je pourrais le réparer.

Cause fondamentale: il s'agit d'un problème courant lors de l'utilisation de la mise en œuvre Sun JAXB avec des fichiers JAR signés. Pour l’essentiel, l’implémentation JAXB tente d’éviter la réflexion en générant une classe permettant d’accéder directement aux propriétés sans utiliser la réflexion. Malheureusement, cette nouvelle classe est générée dans le même package que la classe utilisée, d'où provient cette erreur.

Solution: ajoutez la propriété système suivante pour désactiver les optimisations JAXB incompatibles avec les fichiers jar signés: -Dcom.Sun.xml.bind.v2.bytecode.ClassTailor.noOptimize = true

Réf.: https://access.redhat.com/site/solutions/42149

0
Leandro

Sur la base de la réponse @Mohit Phougat, si vous exécutez un Groovy avec des annotations @Grab, vous pouvez essayer de réorganiser ces annotations.

0
ATorras

Cette question a duré longtemps, mais je veux ajouter quelque chose. J'ai travaillé sur un projet de projet Spring et je l'ai découvert dans Eclipse IDE. Si vous utilisez Maven ou Gradle pour les API Spring Boot Rest, vous devez supprimer Junit 4 ou 5 dans le chemin de génération et inclure Junit dans votre fichier de génération pom.xml ou Gradle. Je suppose que cela s’applique également au fichier de configuration yml.

0
tksilicon