Java SecurityException:签名者信息不匹配

Fra*_*ank 115 java securityexception certificate

我像往常一样重新编译了我的类,突然收到以下错误消息.为什么?我该如何解决?

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)
Run Code Online (Sandbox Code Playgroud)

Mic*_*rdt 130

当从不同的JAR文件加载属于同一个包的类时,会发生这种情况,并且这些JAR文件具有使用不同证书签名的签名 - 或者更常见的是,至少有一个签​​名,一个或多个其他不签名(包括加载的类)来自目录,因为那些AFAIK无法签名).

因此,要么确保所有JAR(或至少包含来自相同软件包的类的JAR)使用相同的证书进行签名,要么使用重叠的包从JAR文件清单中删除签名.

  • 有人可以向新手解释如何做到这一点吗?一周前我开始使用java和spring,我迷路了. (28认同)

小智 44

一个简单的方法是尝试更改导入的jar文件的顺序,这可以从(Eclipse)完成.右键单击您的包 - >构建路径 - >配置构建路径 - >引用和库 - >订单和导出.尝试更改包含签名文件的jar的顺序.


Eug*_*pov 39

答:如果您使用maven,调试冲突罐的有用方法是:

mvn dependency:tree
Run Code Online (Sandbox Code Playgroud)

例如,对于例外:

java.lang.SecurityException: class "javax.servlet.HttpConstraintElement"'s signer information does not match signer information of other classes in the same package
Run Code Online (Sandbox Code Playgroud)

我们的确是:

mvn dependency:tree|grep servlet
Run Code Online (Sandbox Code Playgroud)

它的输出:

[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
Run Code Online (Sandbox Code Playgroud)

显示冲突的servlet-api 2.5和javax.servlet 3.0.0.x.

B.其他有用的提示(如何调试安全例外以及如何排除maven deps)是签名者信息不匹配的问题.


Ced*_*mon 22

在我的例子中,我在我的库路径中复制了JAR版本的BouncyCastle:S

  • 同样的事发生在我身上.删除所有BC罐并加载正确的版本解决了它. (2认同)

Mar*_*vin 7

我有一个类似的例外:

java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package
Run Code Online (Sandbox Code Playgroud)

根本问题是我两次包括Hamcrest库.一旦使用Maven pom文件.我还在项目的构建路径中添加了JUnit 4库(它还包含一个Hamcrest库).我只需要从构建路径中删除JUnit,一切都很好.

  • 库类路径中有一个“JUnit”。删除它就可以完成工作 (2认同)

Jar*_*zki 6

使用cglib检测的代理可能会发生这种情况,因为CGLIB使用自己的签名者信息而不是应用程序目标类的签名者信息.

  • 如果是这样的话,我们该怎么办? (4认同)