如何操作:由Java iText 5.5生成的iTextSharp 5.5符号哈希

时间:2019-01-24 05:03:42

标签: java c# itext

我要从客户端站点签名PDF。 我将创建一个Web服务,以使用itext5.5(Java)生成PDF哈希,然后将其发送到客户端代理以对该哈希进行签名(使用iTextSharp-5.5),然后将签名的哈希发送回该Web服务以关闭该哈希。签名状态。

但是在验证签名时,签名的PDF出现以下错误:

Error during signature verification.  
Error encountered while BER decoding:

在服务器端(Java):

ExternalDigest externalDigest = new BouncyCastleDigest();

PdfPKCS7 sign = new PdfPKCS7(null, chain, "SHA1", null, externalDigest, false);

        InputStream data = appearance.getRangeStream();

        byte[] digestHash = DigestAlgorithms.digest(data, externalDigest.getMessageDigest(hashAlgorithm));                      

        ocsp = null;

        if (chain.length >= 2 && ocspClient != null) {
            ocsp = ocspClient.getEncoded((X509Certificate)chain[0], (X509Certificate)chain[1], null);
        }

        byte[] sh = sign.getAuthenticatedAttributeBytes(digestHash, signCal, ocsp, crlBytes, SIGN_TYPE);                        
        this.hash = digestHash;
        this.hashForSign = sh;                                  

在C#中,我使用以下代码进行签名:

IExternalSignature es = new X509Certificate2Signature(cert, "SHA1");

byte[] signedHash = es.Sign(hashForSign);

this.hashForSign 是从Java生成的哈希,而 signedHash 是用C#签名的。

请帮助!

最好的问候, 埃里克

1 个答案:

答案 0 :(得分:0)

我有类似的问题。这不是Java语言的问题。解决该问题的一种方法是执行以下操作:

  1. 转到Windows证书管理器(certmgr.msc)
  2. 尝试删除“个人”下的所有证书
  3. 使用“安全性”设置在Adobe中重新创建ID。