【问题标题】:Signer information does not match签名者信息不匹配
【发布时间】:2012-02-11 06:42:35
【问题描述】:

我在日志文件中收到以下错误。

(java.lang.SecurityException: 类 “com.adventnet.snmp.snmp2.SecurityModelTable”的签名者信息 与同一类中其他类的签名者信息不匹配 包裹扔了

问题是当我运行以下命令时,它说 jar 已验证。

/usr/jdk/instances/jdk1.5.0/bin/jarsigner -verify -verbose Jarfile.jar

如果jar文件经过验证,怎么会出现这个问题?

【问题讨论】:

    标签: java jar


    【解决方案1】:

    这意味着您在同一个包中有两个或多个具有不同签名数据的类。通常这意味着这些类来自不同的 JAR,其中一个是有符号的,另一个是无符号的。

    【讨论】:

    • 但是如何验证这个 jar 呢?不应该验证失败吗?
    • @mibzer:不,这是一种不同的验证方式。 Jarsigner 只验证那个特定的 JAR。 Java 运行时与许多 JAR 一起工作并检查它们是否兼容。如果它允许来自不同来源的代码作为已签名的 JAR 在同一个包中,则会削弱签名所暗示的安全保证。
    • 很可能有两个版本的 jar 被加载。可能一个在另一个的父类加载器中(例如,一个在公共库区域,一个在应用程序中)。
    • @MichaelBorgwardt 我们终于解决了这个问题。有一个过期的 jar 文件加载到类路径。实际上这个文件属于我们软件的早期版本。但我们不知道它是如何留在那里的。感谢您的回复。
    • 这个帖子帮助我找到了我的这个问题的实例:stackoverflow.com/questions/11577079/…
    【解决方案2】:

    检查 pom 依赖树是否有不同版本的相同包

    我遇到了 itext-2.1.7 的这个问题,包括旧的 bouncycastle's bcpkix,它包含在其他地方的更高版本中。

    使用这种模式:

    <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 documentation。 Eclipse 也有一个相当不错的依赖树查看器。

    【讨论】:

      【解决方案3】:

      我在 Windows 上的 Eclipse (Mars) 中运行 Scala/Spark 项目时遇到了这个异常,它阻止了我在 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:provided

        +- javax.servlet:servlet-api:jar:2.5:provided

      5. 您要从上面排除重复类的 Maven 组 ID 是:hadoop-mapreduce-client-core

      6. 在 pom.xml 中有问题的包之后添加一个排除部分,列出排除的 groupid。在我的例子中,这是 groupid javax.servlet。

      7. 请注意,您无法通过重新排序 Java 构建路径来解决此问题,因为有些人已经发布了类似问题。

      【讨论】:

        【解决方案4】:

        我遇到了以下错误:

        java.lang.SecurityException: class “org.bouncycastle.asn1.ASN1ObjectIdentifier”‘s signer information does not match signer information of other classes in the same package
        

        我在尝试设置 PDF 密码保护时遇到了这个异常。

        我添加了以下 jar 来解决问题。

        ◾itextpdf-5.2.1.jar ◾bcmail-jdk16-1.46.jar ◾bcprov-jdk16-1.46.jar ◾bctsp-jdk16-1.46.jar

        【讨论】:

          【解决方案5】:

          在我的程序中,我加载了同一个包的两个版本。一个是boprov-jdk15-140.jar,另一个是bcprov-jdk15-151.jar。两者有冲突。

          在 JAR 包的 MANIFEST.MF 文件中,它具有以下摘要:

          Name: org/bouncycastle/crypto/digests/SM3Digest.class
          SHA1-Digest: xxxxxxxx
          

          这两个 JAR 文件具有不同的 SHA1-Digest 信息。

          【讨论】:

            【解决方案6】:

            在我的情况下,我有:

            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 dependency:tree 信息并没有真正帮助我。

            这是我解决问题的方法:

            • 我在所有 M2_REPO 上使用 notepad++ 搜索了“在文件中查找”
            • 我发现一个项目在包中重新定义了“Strings”类,该包与“org.bouncycastle.util.Strings”完全相同,它应该源自“org.bouncycastle:bcprov-jdk15on”依赖项。
            • 找到后,我将所有这些有问题的类移到了一个新包中,并更新了这个项目版本。
            • 最后我更新了项目的 pom,这首先给我带来了麻烦,无法使用使用新包名的依赖项。

            问题解决了。

            【讨论】:

              【解决方案7】:

              我在 Spring Boot 应用程序中遇到了这个问题。我的问题是我在构建路径上有 JUnit,它有 Org.hamcrest.Matchers.* 和 Hamcrest,它驻留在我的 pom.xml 中用于 Eclipse 存储库的 Spring 框架库中。我所做的是从我的构建路径中删除 JUnit,并将其仅包含在我的 pom.xml 中。我的应用程序依赖于 Maven 的 JUnit 和 *Matchers,所以不知何故你有两个 jars 来满足一个需求,可能作为一个库和一个配置文件。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-02-22
                • 1970-01-01
                • 1970-01-01
                • 2014-08-14
                • 1970-01-01
                • 2013-06-21
                相关资源
                最近更新 更多