Информация о подписывающем не совпадает
Я получаю следующую ошибку в файле журнала.
(java.lang.SecurityException: информация о подписчике класса "com.adventnet.snmp.snmp2.SecurityModelTable" не совпадает с информацией о подписчике других классов в том же брошенном пакете
Дело в том, что когда я запускаю команду ниже, она говорит, что jar проверен.
/usr/jdk/instances/jdk1.5.0/bin/jarsigner -verify -verbose Jarfile.jar
Если файл JAR проверен, то как может возникнуть эта проблема?
6 ответов
Это означает, что у вас есть два или более классов в одном пакете с разными данными подписи. Обычно это означает, что классы приходят из разных JAR-файлов, один из которых подписан, а другой - без знака.
Проверьте дерево зависимостей POM для одинаковых пакетов разных версий.
У меня была эта проблема с itext-2.1.7
в том числе старый bouncycastle's bcpkix
что было включено в позже version
в другом месте.
Использовать этот pattern
:
<dependency>
package X
<exclusions>
<exclusion>
old package Y
</exclusion>
</exclusions>
</dependency>
<dependency>
latest package Y
</dependency>
Обновление: для проверки деталей дерева зависимостей package_Y вы можете использовать mvn dependency:tree -Dverbose -Dincludes=package_Y
, Для получения дополнительной информации обратитесь к документации maven по решению проблем дерева зависимостей. Также у Eclipse есть довольно хороший просмотрщик дерева зависимостей.
Я столкнулся с этим исключением при запуске проекта Scala/Spark в Eclipse (Mars) в Windows, и он не позволил мне отладить и запустить проект в IDE. В проекте использовался файл Maven pom.xml. Решение заняло некоторое время, поэтому я выкладываю подробные шаги, чтобы помочь другим:
- Перейдите в папку, где находится файл вашего проекта pom.xml
- Запустите команду: mvn dependency:tree -Dverbose >Depends.Txt Убедитесь, что у вас нет Depends.Txt, иначе он будет перезаписан!
- Найдите в файле Depends.Txt неподписанный класс, на который жалуется Eclipse IDE. В моем случае это был javax.servlet.
Вы можете найти его в разделе, который выглядит следующим образом:
+ - org.apache.hadoop: hadoop-mapreduce-client-core: jar: 2.6.0: предоставляется
+- javax.servlet:servlet-api:jar:2.5: предоставляется
Идентификатор группы Maven, из которого вы хотите исключить дублирующийся класс из приведенного выше: hadoop-mapreduce-client-core
Добавьте раздел исключений, перечисляющий groupid исключения в файле pom.xml после пакета с ошибками. В моем случае это был groupid javax.servlet.
Обратите внимание, что вы не можете решить эту проблему, переупорядочив путь сборки Java, поскольку некоторые опубликовали аналогичную проблему.
В моей программе я загрузил две версии одинаковых пакетов. Один boprov-jdk15-140.jar
другой bcprov-jdk15-151.jar
, Два находятся в противоречии.
В файле MANIFEST.MF пакета JAR он содержит следующий дайджест:
Name: org/bouncycastle/crypto/digests/SM3Digest.class
SHA1-Digest: xxxxxxxx
Два файла JAR имеют различную информацию SHA1-Digest.
Я столкнулся с этой проблемой в загрузочном приложении Spring. Моя проблема заключалась в том, что у меня был Junit в пути сборки, который имеет Org.hamcrest.Matchers.* И Hamcrest, который находился в библиотеке Spring framework в моем pom.xml в репозитории eclipse. Я удалил Junit со своего пути сборки. Включил Junit только в мой pom.xml. Итак, мое приложение зависело от Maven для Junit и *Matchers. Так или иначе, у вас есть две банки для одной потребности. Может быть, как библиотека и как файл конфигурации.
В моем случае у меня было:
Caused by: java.lang.SecurityException: class "org.bouncycastle.util.Strings"'s signer information does not match signer information of other classes in the same package
Это был проект с множеством зависимостей и зависимостью mvn: информация о дереве мне не особо помогла.
Вот как я решил свою проблему:
- Я сделал поиск "Найти в файлах", используя notepad++ на всех M2_REPO
- Я нашел проект, который переопределил класс "Strings" в пакете, точно идентичном "org.bouncycastle.util.Strings", который должен происходить из зависимости "org.bouncycastle:bcprov-jdk15on".
- После обнаружения я переместил все эти проблемные классы в новый пакет и обновил эту версию проекта.
- Наконец, я обновил pom проекта, что вызвало у меня проблемы с использованием моей зависимости, использующей имя нового пакета.
Задача решена.
java.lang.SecurityException: информация подписавшего класса "org.bouncycastle.asn1.ASN1ObjectIdentifier" не совпадает с информацией подписавшей других классов в том же пакете
Ответ: Я также столкнулся с тем же исключением, когда пытался защитить PDF паролем.
Я добавил ниже банки, чтобы решить то же самое.
Xtitextpdf-5.2.1.jar ◾bcmail-jdk16-1.46.jar ◾bcprov-jdk16-1.46.jar ◾bctsp-jdk16-1.46.jar