org.bouncycastle.asn1.ASN1ObjectIdentifier“的签名者信息与签名者信息不符

时间:2016-04-06 07:45:38

标签: java maven itext

当我从代码库中调用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>

Stacktrace:

  

class“org.bouncycastle.asn1.ASN1ObjectIdentifier”的签名者   信息与其他类的签名者信息不匹配   相同的包裹            在java.lang.ClassLoader.checkCerts(ClassLoader.java:952)            at java.lang.ClassLoader.preDefineClass(ClassLoader.java:666)            at java.lang.ClassLoader.defineClass(ClassLoader.java:794)            at 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)            at com.itextpdf.text.pdf.PdfWriter.setEncryption(PdfWriter.java:2041)            at com.itextpdf.text.pdf.PdfStamper.setEncryption(PdfStamper.java:295)            at com.itextpdf.text.pdf.PdfStamper.setEncryption(PdfStamper.java:330)            at com.itextpdf.text.pdf.PdfEncryptor.encrypt(PdfEncryptor.java:206)

如果您有任何解决方案,请告诉我。这将非常有帮助

1 个答案:

答案 0 :(得分:4)

你混合了两个iText版本:一个过时的版本,指的是我的名字(com.lowagie),可以追溯到2007年6月,还有一个较新的版本(com.itextpdf),可以追溯到2011年11月。这两个不同的iText版本需要不同版本的BouncyCastle。您应该限制使用单个版本的iText(最好是2016年之前的版本)并使用相应的BouncyCastle版本。您将在POM中找到所需的BouncyCastle版本,该版本随您正在使用的iText版本一起提供。请注意,您还必须小心检查代码的部署位置。某些Web服务器附带的BouncyCastle版本与您需要的版本不同。这可能导致不一致。另一个例子是Android。 Android附带旧版本的BouncyCastle和软件,需要与旧版本发生新版本冲突。这就是iTextG(iText的Android端口)使用SpongyCastle而不是BouncyCastle的原因。 SpongyCastle与BouncyCastle相同,但包名称除外。这样SpongyCastle就不会与Android上提供的BouncyCastle版本冲突。

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