我是iText的新手。我想签署一个PDF并添加LTV到它。签署PDF是好的但当我想添加LTV到PDF时,它不显示我的OCSP和时间戳证书的CRL信息。首先,我想描述一下我是如何签约的。-我的证书链:签名证书,签名证书根,时间戳证书,时间戳证书根。(我忘了锁链上有什么东西吗?)
要签名PDF,我使用的是:
MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, crlList, ocsp2, tsa1, 0, CryptoStandard.CMS);
之后,我将为签名和时间戳添加LTV。
PdfReader r = new PdfReader(this.Source);
FileStream fos = new FileStream(this.Output, FileMode.Create);
PdfStamper stp = PdfStamper.CreateSignature(r, fos, '\0', null, true);
LtvVerification v = stp.LtvVerification;
AcroFields fields = stp.AcroFields;
List<String> names = fields.GetSignatureNames();
String sigName = names[names.Count - 1];
PdfPKCS7 pkcs7 = fields.VerifySignature(sigName);
if (pkcs7.IsTsp)
v.AddVerification(sigName, this.ocspClient, this.crlClient, LtvVerification.CertificateOption.SIGNING_CERTIFICATE, LtvVerification.Level.OCSP_CRL, LtvVerification.CertificateInclusion.NO);
else
foreach (String name in names)
v.AddVerification(name, this.ocspClient, this.crlClient, LtvVerification.CertificateOption.WHOLE_CHAIN, LtvVerification.Level.OCSP_CRL, LtvVerification.CertificateInclusion.NO);
PdfSignatureAppearance sap = stp.SignatureAppearance;
LtvTimestamp.Timestamp(sap, this.tsaClient, null);
谢谢你。
签署PDF是好的但当我想添加LTV到PDF时,它不显示我的OCSP和时间戳证书的CRL信息。
当我控制时间戳证书时,可以看到没有要显示的OCSP-CRL信息。
如何为时间戳证书嵌入OCSP和CRL?
不过,这个结论是错误的。如果你仔细看消息
你会知道上面写着
如果您想要一个实际的分析是否已嵌入撤销信息,请提供有问题的PDF文件。
关于您的代码的一些观察:
>
如果PDF的最外层签名是文档时间戳,则您的代码假定存在内部签名的所有所需验证相关信息。情况不一定是这样的:
b.LTV的充分验证相关信息并不是绝对的,它可能因上下文而异,特别是基于哪些证书是信任锚。
因此,您对带有最外层文档时间戳的PDF的处理是非常乐观的(关于PDF中是否存在验证信息)。
您的代码假设,如果最外面的签名不是文档时间戳,则PDF中没有可用的验证相关信息,并且它还假设它仍然可以在线检索所有所需信息。情况不一定是这样的:
b.即使没有文档时间戳的PDF文件也可能包含使用旧的pre-PAdES机制的所有必要的验证信息。在这种情况下,您还尝试进行不必要的嵌入。
c.您不必要地尝试嵌入的信息可能不再在线可用。这将使您的代码的行为与您的期望不同。
因此,您对没有最外层文档时间戳的PDF的处理是非常悲观的(关于PDF中是否存在验证信息)和非常乐观的(关于这些信息的在线可用性)。
您的代码似乎没有在CRL和OCSP响应中嵌入签名的验证相关信息。这可能导致验证程序无法通过LTV验证。
您的代码作为最终操作为文档打上时间戳。这显然可能导致与该时间戳相关的证书缺乏验证信息。
顺便说一句,如果您在问题中所关注的时间戳证书是最终时间戳的证书,那么您关于它的CRL或OCSP响应都没有嵌入的假设可能是正确的--毕竟您没有有意嵌入任何时间戳。
示例PDF有3个签名字段,一个常规签名和两个文档时间戳。支持这些证书的CA不是Adobe Reader自动信任的,因此我必须检索相应的根证书,并将Adobe Reader配置为信任它们。在签名的情况下,这很容易:根证书已经添加到嵌入式签名容器中。对于时间戳,我必须从这里检索根证书。
对于常规签名,我得到了与OP相同的撤销选项卡,即签名者证书根据嵌入的OCSP响应被信任。
对于这两个时间戳签名,选项卡如下所示:
https://imgs.xnip.cn/cj/n/57/59cfe6aa-0d30-47aa-a8f0-a514533bdec6.png" width="100%" height="100%" />
根据上面的第3项,请注意,关于最终文档时间戳,您是幸运的:您的代码没有为它添加撤销信息,并且只是因为您已经为第一个时间戳嵌入了一个CRL,一个直到明年9月有效的CRL,您的第二个时间戳(为同一证书创建)也有它的验证信息。
我试图签署一个pdf与时间戳和LTV启用,以便它是这样显示在Adobe Reader: 在英语中,它意味着“签名包括嵌入的时间戳”和“签名启用了LTV”。下面是我使用的代码: 基于此答案,我需要一种方法将TSA证书的CRL获取到,但是。。如何获得TSA证书?我是否需要向TSA发出请求并读取响应,然后将其添加到?注意,这已经在。请注意,我使用的是免费的TSA服务器。 更新 因为它是一个免费的TSA服
我有一个带有签名字节的数组和一个带有ocsp字节的数组,用于将ltv信息添加到我的pdf中。该签名是时间戳签名。现在,我尝试将这些信息添加到一个pdf文件中,该文件可用于 ... 好的,这样行。但在签名中,我必须设置标志认证级别1(不允许更改),我的应用程序将无法工作。因为添加LTV后,我更改了文档。我尝试创建自己的DSS字典并将其添加到文档中,但失败了。有谁能帮忙吗?提前谢谢
这个问题与另一个问题相连。 由于我想完全验证添加到PAdES签名(过期和撤销)中的时间戳,我还需要将crl文件或创建时间戳时捕获的TSA证书的ocsp响应添加到签名中。 据我所知,iText 5.4.1似乎没有提供此功能。特别是通过 com.itextpdf.text.pdf.security.TSAClientBouncyCastle和 com.itextpdf.text.pdf.securit
我正在使用iText 5.5.3来签署PDF文档。我需要这些文件是时间戳和LTV启用。我按照说明使用addLtv方法(代码示例5.9,Lowagie白皮书第137页)。我得到一个带有2个签名的PDF,这是正常的:第一个是我自己的签名,第二个是文档级时间戳。 但是,Acrobat告诉我我的签名启用了LTV,但时间戳签名没有: 图片来自Acrobat Pro XIhttp://img15.hostin
我有一个应用程序生成一个PDF,需要签名。 我们没有用于签署文档的证书,因为它们在HSM中,而我们可以使用证书的唯一方法是使用WebService。 这是我们的代码,首先,我们得到签名外观,并计算散列 在这一点上,我们得到一个已签名的PDF,但签名无效。Adobe称“文档自签署以来已被更改或损坏”。 我已经通过使用外部服务和iText,PDF签名iText pkcs7多签名和是否可能签署一个PDF
遵循http://itextpdf.com/book/digitalsignatures中的“使用智能卡和PKCS#11签名文档”主题并创建与所提供的代码示例类似的代码示例后,签名的文件签名在Adobe Reader中无效,签名外观具有不可否认证书的名称(即eID所有者的名称),但在Adobe Reader的签名面板中显示: 我使用的是金雅拓PinPad和葡萄牙语eID与eID中间件软件一起安装,