0

我正在使用 aws cloudHSM 和 itext7 签署 pdf。一切都很好,直到我没有启用 LTV。

但是在启用 LTV 后出现错误“至少一个签名有问题”并显示签名字节范围无效的原因。

下面是代码

private void ltvEnable(PdfSigner signer, OutputStream baos, String name11,
        OcspClientBouncyCastle ocspClient, CrlClientOnline crlClient, CustomTSAClient tsc) {
    ByteArrayInputStream signedPdfInput = new ByteArrayInputStream(((ByteArrayOutputStream)baos).toByteArray());
    try {
        
        PdfReader pdfReader = new PdfReader(signedPdfInput);
        PdfDocument document = new PdfDocument(pdfReader.setUnethicalReading(true), new PdfWriter(baos),
                new StampingProperties().useAppendMode());
        LtvVerification ltvVerification = new LtvVerification(document);
        SignatureUtil signatureUtil = new SignatureUtil(document);
        List<String> names = signatureUtil.getSignatureNames();
        String sigName = names.get(names.size() - 1);
        PdfPKCS7 pkcs7 = signatureUtil.readSignatureData(sigName);
        if (pkcs7.isTsp()) { 
            ltvVerification.addVerification(sigName, ocspClient, crlClient, LtvVerification.CertificateOption.WHOLE_CHAIN,
                    LtvVerification.Level.OCSP_CRL, LtvVerification.CertificateInclusion.YES);
        } else {
            for (String name : names) {
                ltvVerification.addVerification(name, ocspClient, crlClient, LtvVerification.CertificateOption.WHOLE_CHAIN,
                        LtvVerification.Level.OCSP_CRL, LtvVerification.CertificateInclusion.YES);
            }
        }
        
        ltvVerification.merge();
        //signer.timestamp(tsc, null);
        document.close();
        pdfReader.close();

    } catch (IOException | GeneralSecurityException e) {
        logger.error("Error while making signature ltv enabled");
    }
}

在启用 ltv 之前 -:

在此处输入图像描述

后 -:

在此处输入图像描述

4

1 回答 1

1

在您的架构中,您有一个ByteArrayOutputStream参数,您可以在其中检索 pdf 以启用 LTV,并且您最终还返回启用 LTV 的结果 pdf。

在这样的架构中,必须清除ByteArrayOutputStream从中检索原始内容和向其中添加新内容之间的界限。

因此,在您的情况下,您必须在

ByteArrayInputStream signedPdfInput = new ByteArrayInputStream(((ByteArrayOutputStream)baos).toByteArray());

PdfDocument document = new PdfDocument(pdfReader.setUnethicalReading(true), new PdfWriter(baos),
                new StampingProperties().useAppendMode());
于 2021-05-08T07:22:40.243 回答