【问题标题】:Embedding CRL response in signed PDF breaks PDF/A-2B conformance在签名的 PDF 中嵌入 CRL 响应会破坏 PDF/A-2B 的一致性
【发布时间】:2015-01-14 15:25:36
【问题描述】:

在 iText 5.5.4 中,如果我选择在签名过程中嵌入 CRL,则会因为 String too long 错误而破坏 PDF/A-2B 一致性:

Adobe Preflight http://img4.hostingpics.net/pics/234201so5.jpg

正如您在 Adob​​e Acrobat Pro 11.0.09 的预检中所见,CRL 的长度为 67107 个字符,而这个特定的 PDF 标准要求字符串的最大长度不得超过 32767 个字节。

这是 Itext 中的一个错误,还是有办法在这种情况下保持 PDF/A-2B 的一致性?

【问题讨论】:

  • CRL 长度为 67107 个字符 - 好吧,为签名容器保留的空间很可能具有该大小,但嵌入其中的 CRL 确实似乎需要大部分空间.您能否分享有问题的 PDF 以检查 CRL 是否确实有那么大,或者是否为签名保留了太多空间。一种选择可能是用于 CRL 而不是签名容器的 PAdES-4 样式文档安全存储。不过,必须检查 PDF/A-2 和 DSS 的兼容性。

标签: pdf itext


【解决方案1】:

这是 Itext 中的错误吗?

正如您在 Adob​​e Acrobat Pro 11.0.09 的预检中所见,CRL 的长度为 67107 个字符,而这个特定的 PDF 标准要求字符串的最大长度不得超过 32767 个字节

考虑到问题字符串被引用为1 0 obj/Contents 似乎表明它实际上是为 CMS 签名容器保留的字符串,而不是普通的 CRL。

查看 PDF/A 规范(我手头只有第 3 部分,但此处第 2 部分和第 3 部分应该一致)有两个部分似乎相互矛盾:

符合标准的文件不得包含任何长度超过 32767 字节的字符串。

(第 6.1.13 节实施限制)

时间戳和撤销信息应包含在 [PDF 签名(DER 编码的 PKCS#7 二进制数据对象)中],以提高签名的长期不可否认性。

(附件 B 对 PDF/A 中数字签名的要求)

在您的情况下,遵循后一个建议会破坏前一个要求,因为 PKCS#7 / CMS 对象作为字符串嵌入到 PDF 中。

但是,由于我们对推荐有要求,因此只要不违反要求,就需要遵循该推荐。规范甚至明确表示:

在生成签名外观和任何其他 PDF 对象作为签名过程的一部分时, 符合标准的读者应确保它不会使对 ISO 19005 的这一部分的符合性无效

(第 6.4.3 节数字签名)

因此,确实,iText 签名应该在签名过程中失败...如果您使用了 PDF/A 感知 API,也就是说。很遗憾您没有提供源代码,因此不清楚您使用的是PdfAStamper 还是仅仅PdfStamper

或者有没有办法在这种情况下保持 PDF/A-2B 的一致性?

你没有提供你的源代码,所以只能用更一般的方式来回答。

首先检查为签名容器预留的空间是否真的需要,或者是否有很多填充字节。在后一种情况下,微调预订代码。

如果这还不够,将 CRL 嵌入签名容器会自动导致违反 PDF/A 一致性,因此是不允许的。

然后,一种选择是尝试在此处使用 OCSP 响应而不是 CRL。 OCSP 响应通常只包含一个或最多很少几个证书的信息,而 CRL 可能会变得非常大。

如果 CA 没有 OCSP 服务器,我看不到真正的 PDF/A-2'ish 解决方案。您可能希望尝试将验证相关信息嵌入 PAdES 第 4 部分 (ETSI TS 102 778-4) DSS(文档安全存储)结构而不是签名容器中。普通的 PDF/A 查看器很可能无法识别,更不用说使用那里的 CRL,但更多功能的查看器,例如当前的 Adob​​e Reader 版本,应该。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 2016-03-08
    • 2017-10-31
    • 2015-10-19
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多