我要从客户端站点签名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#签名的。
请帮助!
最好的问候, 埃里克
答案 0 :(得分:0)
我有类似的问题。这不是Java语言的问题。解决该问题的一种方法是执行以下操作: