Java的抛出:SecurityException:签名者信息不匹配Java的抛出:Security

2019-05-10 11:12发布

我重新编译我的课像往常一样,突然得到了以下错误消息。 为什么? 我怎样才能解决这个问题?

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)

Answer 1:

这发生在属于同一包中的类是由不同的JAR文件加载,和那些JAR文件已用不同的证书签名的签名 - 或者,也许更多的时候,至少有一个是带符号和一个或多个其他人不(包括加载的类从目录中,因为这些AFAIK不能签字)。

所以,无论是确保所有的JAR(或至少那些包含来自同一包中的类)都使用相同的证书签名,或删除的JAR文件清单签名重叠包。



Answer 2:

它周围的一个简单方法就是尝试改变可以从(Eclipse中)来完成导入的jar文件的顺序。 右键点击你的包 - >构建路径 - >配置构建路径 - >参考和库 - >在线订单和出口。 尝试改变包含签名文件罐子的顺序。



Answer 3:

答:如果您使用的是Maven,调试冲突罐子一个有用的方法是:

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.其他有用的提示(如何调试安全异常以及如何排除行家DEPS)是在在这个问题签名者信息不匹配 。



Answer 4:

就我而言,我在库路径已经复制BouncyCastle的罐子版本:S



Answer 5:

我有一个类似的例外:

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

问题的根源是,我包括Hamcrest库的两倍。 一旦使用Maven POM文件。 而且我还添加了JUnit 4库(其中也包含了Hamcrest库)到项目的构建路径。 我索性就从构建路径中删除JUnit和一切都很好。



Answer 6:

这可能是因为CGLIB用自己的签名者信息,而不是应用程序目标类的签署者信息与CGLIB的仪器代理发生。



Answer 7:

  1. DIST \ lib目录下:标志,访问之后
  2. 查找额外的.jar
  3. 用WinRAR,你提取一个文件夹(解压到“文件夹名称”)选项
  4. 交通:META-INF / MANIFEST.MF
  5. 删除这样的每个签名:

名称:净/ SF / JasperReports的/发动机/ util的/ XML / JaxenXPathExecuterFactory.c小姑娘SHA-256-文摘:q3B5wW + HLX / + LP2 + L0 / 6wRVXRHq1mISBo1dkixT6Vxc =

  1. 保存文件
  2. 再次邮编
  3. Renaime转来的.jar回
  4. 已经


Answer 8:

如果你在Eclipse中运行它,检查添加到构建路径中的任何项目,瓶; 或做控制移T和扫描多个罐子匹配相同的命名空间。 然后,从该项目的构建路径中删除冗余或过时的罐子。



Answer 9:

就我而言,这是一个包名称冲突。 当前项目,并签署引用的库有一个共同的包package.foo.utils 。 只是改变了当前项目容易出​​错的包名到别的东西。



Answer 10:

有点太旧线,但因为我被卡住了这个相当长的一段时间,这里的修复(希望它可以帮助别人)

我的情况:

包名称是:com.abc.def。 有包含从该包中的类2个jar文件说jar1和jar2即一些类存在于jar1和其他jar2。 这些jar文件都使用相同的密钥库,但在不同时期的版本(即单独)签署。 这似乎导致成在jar1和jar2文件不同的签名。

我把所有的文件jar1和建(并签署)他们都在一起。 问题消失。

PS:包名和jar文件名只是例子



Answer 11:

如果你有一个文件有不同的名称或从不同位置的两倍,尤其是如果这是两个不同版本的同一文件中也会出现这种情况。



Answer 12:

我可以修复它。

根本原因:这是一个常见的问题,使用的是Sun JAXB实现与签约时罐子。 基本上JAXB实现正试图通过产生类直接访问属性,而无需使用反射来避免反射。 不幸的是,它产生于为被访问的类,这就是这个错误来自于同一个包这个新类。

解决方法:添加以下系统属性禁用JAXB优化,不兼容签署罐子:-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize =真

参考: https://access.redhat.com/site/solutions/42149



Answer 13:

基于@Mohit Phougat回应,如果你运行一个Groovy与@Grab注解,你可以尝试重新整理这样的标注。



Answer 14:

如果您添加了所有从bouncycastle.org的罐子(在我的情况下,从crypto-159.zip),只是去掉了那些不适用于你的JDK的人。 有冗余。 你可能只需要“jdk15on”罐子。



文章来源: Java SecurityException: signer information does not match