【发布时间】:2020-07-11 16:24:46
【问题描述】:
我已阅读 I-TEXT 数字签名电子文本,以及 MKL 之前回答的帖子(他似乎与 Bruno 一起是该主题的权威)。
基本上我有一个 Azure 应用服务,它从公司的签名 API 获取数字签名(base 64)和证书链。该公司的签名 API 返回 Base64 中的签名以及证书链。
我只想在 pdf 中插入一个签名对象/容器,以便在最终用户打开 pdf 时它会显示在签名面板中。我更喜欢使用延迟签名。
我已经从第 4 章的“clientseversigning 示例”转移到了 MKL 的“如何在不提前知道签名者证书的情况下创建 PDF 签名”中的延迟签名。
Company API 返回一个“普通”签名,我很确定,并且还返回一个 3 字符串证书链。
我应该注意我确实提前拥有根证书和子证书(2 个 .cer 文件),但我现在没有在“准备”用于散列的 pdf 中使用它们,因为延迟签名示例没有使用它们明显地。对于容器构建代码(从Company API得到响应后),我使用了company API返回的3个certs链,但我也尝试了2个.cer文件,没有成功。
我的代码与示例中的代码之间的唯一区别是不是 byte[] certificateBytes = THE_RETRIEVED_CERTIFICATE_BYTES; X509Certificate x509Certificate = new X509CertificateParser().ReadCertificate(certificateBytes);我构建了 3 个 x509Certificates(用于从 Company API 返回的链中的每个字符串。
不幸的是,我在 Acrobat 中遇到以下错误:签名无效,此签名中包含的格式或信息有错误,签名的身份尚未验证,签名时间以签名者计算机上的时钟为准...此外,如果我在 Acrobat 中单击此错误下方的证书详细信息,则它是空白的。这几乎是我在尝试“clientserversigning example”时遇到的错误
我真的很努力,想知道它可能是什么...我应该尝试从 12000 修改估计大小并提高它吗?或者我在 Acrobat 中遇到的错误,也许他们暗示来自公司 API 的证书链没有被签名延迟容器构造代码拾取......我正在努力,但任何提示都会非常感激
埃文
澄清一下,我正在关注第 4 章的客户端服务器签名示例,但是一旦使用公司 API 的签名重新创建了我的 pdf,我就会得到以下内容
它的说法1)信息格式有错误 2) 签名者的身份未经验证 3) 签名时间来自签名者电脑上的时钟
现在就在散列以发送签名之前“准备”pdf ......我在 ClientSigning 示例中没有看到任何专门准备它的内容,我可以假设 IText 库正在准备它吗?
【问题讨论】:
-
a)必须在散列要签名的字节范围之前准备 PDF(这不是整个准备好的 PDF!); b) 仅凭签名获取证书是否足够,取决于返回签名的格式。如果公司API返回CMS签名容器,则不需要之前的证书;如果是普通签名,通常需要事先提供证书。
-
“我应该看 PDFBox 而不是 Itext” - 您已表示对您的签名没有特殊要求(例如,您没有提到要创建像 PAdES-LTA 这样的特殊配置文件),所以任何一个图书馆都应该这样做。
-
github 挂了,但是这个女人有几个 pdf 库的解决方案:github.com/crs2195
-
感谢 mkl,我只想说你是这方面的权威;我认为它是公司 API 返回的一个普通签名......我正在阅读所有文本......是否可以安全地假设如果我事先无法访问证书,而不是使用延迟歌唱示例,如果我事先确实有证书我会使用clientserversigningexample吗?换句话说,我很难区分这两者……但我想如果公司 API 只返回普通签名(请注意一串证书),它会迫使我动手,我必须使用 clientseversigningexample?
-
只是一个附录,我确实有两个来自公司 API 的证书,root 和 sub,都是 .cer 文件。在使用 clientserversigningexample 构建对公司 api 的调用时,假设我可以使用这两个证书创建一个链是否安全?您认为公司 API 返回的链返回值有什么不同吗?
标签: pdf itext digital-signature