iText添加ltv信息

时间:2016-09-26 19:49:33

标签: java 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);
}

我读到它有一个问题&#39;使用Adobe,因为应用的时间戳未被识别为启用LTV,并建议应用新的dss来解决此问题。

我的问题:

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

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

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

正如你所看到的......我不是专家,我需要一些帮助。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

  

我的问题:

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

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

验证者是否接受此类信息取决于。

ETSI TS 102 778-4 V1.1.1说:

  

4.3验证过程

     

建议验证过程如下:

     
      
  1. “最新”文档时间戳应在当前时间验证,并在此处收集验证数据   当前时间。

  2.   
  3. “内部”文档时间戳应在上一个文档的时间戳时间验证   在先前的DSS中存在验证数据(并为连续的包络时间戳加上时间戳)。

  4.   
  5. 签名和签名时间戳应在最新的最里面的LTV文档时间戳验证   时间使用存储在DSS中的验证数据并加上时间戳(通过连续的包络时间戳)

  6.         

    验证没有文档的文档时间戳不在此配置文件的范围内。

如果验证者根据这些建议进行验证,它将不会按您的要求接受您的验证信息,至少它不会识别标记信息的时间戳以进行验证。

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