Информация о подписывающем не совпадает

Я получаю следующую ошибку в файле журнала.

(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. Решение заняло некоторое время, поэтому я выкладываю подробные шаги, чтобы помочь другим:

  1. Перейдите в папку, где находится файл вашего проекта pom.xml
  2. Запустите команду: mvn dependency:tree -Dverbose >Depends.Txt Убедитесь, что у вас нет Depends.Txt, иначе он будет перезаписан!
  3. Найдите в файле Depends.Txt неподписанный класс, на который жалуется Eclipse IDE. В моем случае это был javax.servlet.
  4. Вы можете найти его в разделе, который выглядит следующим образом:

    + - org.apache.hadoop: hadoop-mapreduce-client-core: jar: 2.6.0: предоставляется

    +- javax.servlet:servlet-api:jar:2.5: предоставляется

  5. Идентификатор группы Maven, из которого вы хотите исключить дублирующийся класс из приведенного выше: hadoop-mapreduce-client-core

  6. Добавьте раздел исключений, перечисляющий groupid исключения в файле pom.xml после пакета с ошибками. В моем случае это был groupid javax.servlet.

  7. Обратите внимание, что вы не можете решить эту проблему, переупорядочив путь сборки 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

Другие вопросы по тегам