【问题标题】:class "org.bouncycastle.asn1.ASN1ObjectIdentifier"'s signer information does not match signer information of other classes in the same package类“org.bouncycastle.asn1.ASN1ObjectIdentifier”的签名者信息与同一包中其他类的签名者信息不匹配
【发布时间】:2015-07-19 21:43:43
【问题描述】:

有人可以帮我解决这个例外吗?这是否意味着我必须使用 1.5 的 java 版本运行 keytool?

我以前可以用,但现在我明白了。

Exception in thread "main" java.lang.ExceptionInInitializerError
at com.itextpdf.text.pdf.security.CertificateInfo.getSubjectFields(CertificateInfo.java:356)
at com.itextpdf.text.pdf.PdfSignatureAppearance.getAppearance(PdfSignatureAppearance.java:884)
at com.itextpdf.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:1268)
at com.itextpdf.text.pdf.security.MakeSignature.signDetached(MakeSignature.java:140)
at org.deloitte.cms.efi.controller.signature.SignatureAppearance.sign4(SignatureAppearance.java:181)
at org.deloitte.cms.efi.controller.signature.SignatureAppearance.main(SignatureAppearance.java:208)

原因:java.lang.SecurityException:类“org.bouncycastle.asn1.ASN1ObjectIdentifier”的签名者信息与同一个包中其他类的签名者信息不匹配

这是我的代码:

    public void sign4(String src, String name, String dest,
        Certificate[] chain, PrivateKey pk,
        String digestAlgorithm, String provider, CryptoStandard subfilter,
        String reason, String location)
                throws GeneralSecurityException, IOException, DocumentException {
    // Creating the reader and the stamper
    PdfReader reader = new PdfReader(src);
    FileOutputStream os = new FileOutputStream(dest);
    PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
    // Creating the appearance
    PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
    //appearance.setReason(reason);
    //appearance.setLocation(location);
    appearance.setVisibleSignature(name);
    // Default text and scaled background image
    appearance.setImage(Image.getInstance(IMG));
    //appearance.setImageScale(-1);
    appearance.setImageScale(0);
    // Creating the signature
    PrivateKeySignature pks = new PrivateKeySignature(pk, digestAlgorithm, provider);
    ExternalDigest digest = new BouncyCastleDigest();
    MakeSignature.signDetached(appearance, digest, pks, chain, null, null, null, 0, subfilter);
}

这是我的 pom.xml

       <dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.6</version>
   </dependency>
   <dependency>
       <groupId>org.bouncycastle</groupId>
       <artifactId>bcpkix-jdk15on</artifactId>
       <version>1.52</version>
    </dependency>      
   <dependency>
       <groupId>org.bouncycastle</groupId>
       <artifactId>bcprov-jdk15on</artifactId>
       <version>1.52</version>
    </dependency>
    <dependency>
        <groupId>org.apache.santuario</groupId>
        <artifactId>xmlsec</artifactId>
        <version>2.0.4</version>
    </dependency>

【问题讨论】:

  • 听起来您的类路径上有多个 BouncyCastle 版本,而不仅仅是您声明为依赖项的版本。

标签: java maven itext digital-signature bouncycastle


【解决方案1】:

请检查您的 Maven 依赖树。您的 pom 请求 bc 版本 1.5.2,但根据 http://mvnrepository.com/artifact/com.itextpdf/itextpdf/5.5.6 ,itext 需要版本 1.49。从 pom 中删除两个 bc 元素。

【讨论】:

  • 谢谢你救了我的命 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
相关资源
最近更新 更多