【问题标题】:org.bouncycastle.asn1.ASN1ObjectIdentifier"'s signer information does not match signer informationorg.bouncycastle.asn1.ASN1ObjectIdentifier"的签名者信息与签名者信息不匹配
【发布时间】:2016-04-06 07:45:37
【问题描述】:

当我从我的代码库调用PdfEncryptor.encrypt() 时,我遇到了上述异常。在 SO 我发现它通常是由于 itextpdf 和 bouncycastle jar 的错误组合而发生的。但我在下面提到 依赖关系,我认为这是正确的。

   <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itextpdf</artifactId>
      <version>5.1.3</version>
    </dependency>
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk16</artifactId>
      <version>1.46</version>
    </dependency> 
    <dependency>
      <groupId>com.test</groupId>
      <artifactId>test</artifactId>
      <version>1.0.0</version>
    </dependency> 

我们通过其他项目(测试)间接依赖于 itext。 “测试”项目有以下条目

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.0.4</version>
</dependency>

堆栈跟踪:

“org.bouncycastle.asn1.ASN1ObjectIdentifier”类的签名者 信息与其他类的签名者信息不匹配 同一个包 在 java.lang.ClassLoader.checkCerts(ClassLoader.java:952) 在 java.lang.ClassLoader.preDefineClass(ClassLoader.java:666) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:794) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 在 org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2494) 在 org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:860) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1302) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167) 在 com.itextpdf.text.pdf.PdfEncryption.(PdfEncryption.java:147) 在 com.itextpdf.text.pdf.PdfWriter.setEncryption(PdfWriter.java:2041) 在 com.itextpdf.text.pdf.PdfStamper.setEncryption(PdfStamper.java:295) 在 com.itextpdf.text.pdf.PdfStamper.setEncryption(PdfStamper.java:330) 在 com.itextpdf.text.pdf.PdfEncryptor.encrypt(PdfEncryptor.java:206)

如果您有任何解决方案,请告诉我。会很有帮助的

【问题讨论】:

  • 你为什么依赖com.itextpdf:itextpdfcom.lowagie:itext?回答您的问题:BouncyCastle 是在 iText 的 pom.xml 中定义的传递依赖项,因此如果您的应用程序不直接使用 BouncyCastle,则无需在自己的 pom.xml 中定义它。我什至不知道 BouncyCastle 的 9 年历史 版本需要哪个版本的 com.lowagie:itext 作为依赖项。
  • 运行此命令:mvn dependency:tree -Dverbose | tee depends.txt(在 Linux/OSX 上)或mvn dependency:tree -Dverbose &gt; depends.txt 在 Windows 上,并将输出添加到您的问题中。

标签: java maven itext


【解决方案1】:

您正在混合使用两个 iText 版本:一个是 2007 年 6 月的过时版本 (com.lowagie),一个是 2011 年 11 月的更新版本 (com.itextpdf)。这两个不同的 iText 版本需要不同版本的 BouncyCastle .您应该限制自己使用一个版本的 iText(最好是 2016 年的版本)并使用相应的 BouncyCastle 版本。您将在您使用的 iText 版本随附的 POM 中找到您需要的 BouncyCastle 版本。请注意,您还必须小心检查部署代码的位置。一些 Web 服务器附带的 BouncyCastle 版本与您需要的版本不同。这可能导致不一致。另一个例子是安卓。 Android 随附旧版本的 BouncyCastle 和需要更新版本的软件与旧版本冲突。这就是为什么 iTextG(iText 的 Android 端口)使用 SpongyCastle 而不是 BouncyCastle。 SpongyCastle 与 BouncyCastle 相同,只是包名不同。这样,SpongyCastle 不会与 Android 上可用的 BouncyCastle 版本发生冲突。

长话短说:你说我有下面提到的依赖项,但是你的假设我认为是正确的是错误的,因为你'正在混合两个不同版本的 iText。

【讨论】:

  • 感谢您的回复。你能把你的评论的最后一行删掉吗:)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2017-08-30
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 2020-05-14
相关资源
最近更新 更多