【问题标题】:iText adding ltv infoiText 添加 ltv 信息
【发布时间】:2016-09-26 19:49:32
【问题描述】:

我正在尝试“完成到 ltv”一个已经签名的 pdf,我使用 itext 找到了这段代码:

http://developers.itextpdf.com/question/how-enable-ltv-timestamp-signature

public void addLtv(String src, String dest, OcspClient ocsp, CrlClient crl, TSAClient tsa)
throws IOException, DocumentException, GeneralSecurityException {

    PdfReader r = new PdfReader(src);
    FileOutputStream fos = new FileOutputStream(dest);
    PdfStamper stp = PdfStamper.createSignature(r, fos, '\0', null, true);
    LtvVerification v = stp.getLtvVerification();
    AcroFields fields = stp.getAcroFields();
    List<String> names = fields.getSignatureNames();
    String sigName = names.get(names.size() - 1);
    PdfPKCS7 pkcs7 = fields.verifySignature(sigName);
    if (pkcs7.isTsp()) {
        v.addVerification(sigName, ocsp, crl,
            LtvVerification.CertificateOption.SIGNING_CERTIFICATE,
            LtvVerification.Level.OCSP_CRL,
            LtvVerification.CertificateInclusion.NO);
    }
    else {
        for (String name : names) {
            v.addVerification(name, ocsp, crl,
                LtvVerification.CertificateOption.WHOLE_CHAIN,
                LtvVerification.Level.OCSP_CRL,
                LtvVerification.CertificateInclusion.NO);
        }
    }
    PdfSignatureAppearance sap = stp.getSignatureAppearance();
    LtvTimestamp.timestamp(sap, tsa, null);
}

我读到它与 Adob​​e 存在“问题”,因为应用的时间戳未被识别为启用 LTV,并建议应用新的 dss 来解决此问题。

我的问题:

  • 可以在应用时间戳之前添加此信息吗?如果我要添加一个 dss 来完成,我也可以添加 TSA 时间戳信息(ocsp、crl ...)(可能使用假符号来获取信息),然后应用时间戳而无需再次使用新的 dss。

    • 如果是……这是否得到 ETSI 的批准? iText 可以处理吗?我注意到 addVerification 从已包含的签名中添加信息,但似乎我无法使用此方法添加所需的信息。还有另一种方法可以添加“免费”验证或 addVerification 让我来,我没注意到?

    • 如果没有...为什么?那为什么我不需要再次为添加的新 dss 打时间戳?

如您所见...我不是专家,我需要一些帮助。

非常感谢您的帮助!

【问题讨论】:

    标签: java pdf itext


    【解决方案1】:

    我的问题:

    • 可以在应用时间戳之前添加此信息吗?如果我要添加一个 dss 来完成,我也可以添加 TSA 时间戳信息(ocsp,crl ...)(可能使用假符号来获取信息),然后应用时间戳而无需再次使用新的 dss。
      • 如果是...这是否已获得 ETSI 的批准? iText 可以处理吗?我注意到 addVerification 从已包含的签名中添加信息,但似乎我无法使用此方法添加所需的信息。还有另一种方法可以添加“免费”验证或 addVerification 让我来,我没注意到?
      • 如果没有...为什么?那为什么我不需要为新添加的 dss 再次添加时间戳?

    从技术上讲,您可以在应用相关的签名/时间戳之前添加任何与验证相关的信息。实际上,如果老式的 ISO 32000-1 签名要求验证信息包含在签名属性中,您甚至必须这样做。

    这些信息是否被验证者接受,取决于。

    ETSI TS 102 778-4 V1.1.1 说:

    4.3 验证过程

    建议验证过程如下:

    1. “最新”文档时间戳应在当前时间使用收集的验证数据进行验证 当前时间。

    2. “内部”文档时间戳应在上一个文档时间戳时间处使用 之前的 DSS 中存在验证数据(并为连续的封装时间戳加上时间戳)。

    3. 签名和签名时间戳应该在最新的最里面的 LTV 文档时间戳上进行验证 时间使用存储在 DSS 中的验证数据和时间戳(通过连续的封装时间戳)

    没有文档时间戳的文档验证超出了此配置文件的范围。

    如果验证者根据这些建议进行验证,它不会按照您的意愿接受您的验证信息,至少它不会识别用于验证的时间戳信息。

    但由于这些只是建议,其他 TS 或 EN 文件的建议可能有所不同,您感兴趣的验证者可能会根据您的需要接受您的验证信息。

    【讨论】:

    • 非常感谢 mkl :D 从我的角度来看,我认为“最新的 ts”现在仍然可以验证。我知道这不完全是 ETSI 所说的,但适合启用 Adob​​e LTV ......并且不会破坏 ETSI 验证过程,只是“无用的额外信息”。在时间戳之后添加 dss 是“接近”相同的,对吧?
    • 最后一个问题:使用 iText 5.5.9,如何在时间戳之前添加来自不同 TSA 证书的验证数据? LtvVerification.addVerification() 仅适用于包含的信息,不要让我添加“外部验证数据”,不是吗?再次感谢
    • "LtvVerification.addVerification() 仅适用于包含的信息,不允许我添加“外部验证数据”,不是吗?” - 该方法有接受外部生成的验证数据的重载。不幸的是,即使是重载也希望这些数据引用现有的签名。因此,我建议根本不要使用现有的LtvVerification,而只需将您的验证数据添加到像LtvVerificationmethods createDss()updateDss()outputDss 这样的压模中减去vri 的东西。它实际上没有魔法。
    • @Diadev 我刚刚扫描了 ETSI EN 319 102-1 V1.1.1“AdES 数字签名的创建和验证”的验证部分。内容是ETSI 所说的关于如何验证的内容。在我看来,它在下一个外层寻找时间戳的验证信息,即特别是在下一个外部时间戳的时间(或者在当前时间,如果没有进一步的时间戳)。
    • 有关 LTV 启用签名 PDF 的代码,请查看 this answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多