Вопрос-ответ

Java SecurityException: signer information does not match

Java SecurityException: информация о подписывающем лице не совпадает

Я перекомпилировал свои классы как обычно, и внезапно получил следующее сообщение об ошибке. Почему? Как я могу это исправить?

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)
Переведено автоматически
Ответ 1

Это происходит, когда классы, принадлежащие одному и тому же пакету, загружаются из разных файлов JAR, и эти файлы JAR имеют подписи, подписанные разными сертификатами - или, возможно, чаще, по крайней мере, один подписан, а один или несколько других нет (что включает классы, загруженные из каталогов, поскольку эти AFAIK не могут быть подписаны).

Поэтому либо убедитесь, что все JAR (или, по крайней мере, те, которые содержат классы из одних и тех же пакетов) подписаны с использованием одного и того же сертификата, либо удалите подписи из манифеста файлов JAR с перекрывающимися пакетами.

Ответ 2

Простой способ обойти это - просто попробовать изменить порядок импортированных файлов jar, что можно сделать из (Eclipse). Щелкните правой кнопкой мыши на вашем пакете -> Путь сборки -> Настроить путь сборки -> Ссылки и библиотеки -> Упорядочить и экспортировать. Попробуйте изменить порядок файлов jar, содержащих файлы подписи.

Ответ 3

A. Если вы используете Maven, полезным способом отладки конфликтующих jar является:

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

показывает конфликтующие servlet-api 2.5 и javax.servlet 3.0.0.x.

B. Другие полезные советы (как отладить исключение безопасности и как исключить Maven deps) относятся к вопросу Информация о подписчике не совпадает.

Ответ 4

In my case, I had duplicated JAR version of BouncyCastle in my library path :S

2024-02-29 15:56 java