当前位置: 首页 > 知识库问答 >
问题:

添加LTV(长期验证)会使byterange无效

益英逸
2023-03-14

我正在编写一个小型库,旨在成为一个高级(简单易用)库,用于对使用WeasyPrint库生成的pdf进行数字签名(https://github.com/Kozea/WeasyPrint).

我已经让它为自签名证书工作,现在我正在从GlobalSignDSS API(https://www.globalsign.com/en/resources/apis/api-documentation/digital-signing-service-api-documentation.html)开发数字签名适配器

除了LTV(长期验证)之外,我的一切都正常工作,LTV需要一个DSS字典,列出OCSP信息和链中的任何证书(用于处理撤销)。

当我添加DSS时(必须在签名数据写入之后),我在Adobe Acrobat中得到一个错误,指出byterange的签名无效。

如何在不使byterange失效的情况下启用DSS功能?

我已经深入研究了iText库,但是它太抽象了,很难理解正在写入的实际数据。我仍然冒昧地标记iText,因为它在某种程度上是处理PDF中数字签名的行业标准。

共有1个答案

齐承泽
2023-03-14

多亏了这个名字优美的文档,我才明白了这一点:电子签名和基础设施(ESI);PDF高级电子签名配置文件;第4部分: PADES长期-PADES-LTV配置文件标题可能是一个冗长的混乱,但该文档实际上是一个非常简洁和有用的阅读。

DSS可以添加到原始byterange之后,方法是在文件末尾添加一个时间戳,该时间戳获取包含整个文件(包括DSS)的另一个byterange的摘要。您必须启用扩展才能正常工作,请参阅“第4.4章扩展字典”。链接文档中有更详细的细节。

我认为值得一提的是,我通过使用ApachePDFBox实用程序在PDF中发现了一些语法错误。我要是早点找到就好了。

如果您感兴趣,我在github上发布了该库:https://github.com/hejsan/WeasySign.它已经起作用了,但需要一些润色。

 类似资料:
  • 将LTV添加到数字签名后,它显示文档已更改。 参考后:LTV认证签名后,PDF显示“文档已更改” 我对代码进行了更改,它可以很好地用于除此文档以外的所有文档:https://www.sendspace.com/file/3ulwn7-显示无效签名。 我们还使用来自global sign的文档签名服务。 以下代码用于添加LTV: 编辑:我认为我在代码中操作pdf的方式导致了阅读/编写pdf的问题。不

  • 我们正在尝试启用签名LTV。我正在使用下面的代码添加验证。签名时。isTsp()为false,PDF表示签名未启用LTV,但在另一种情况下(Signature.isTsp()为true),它显示为有效。当我们打开PDF并尝试通过右键单击签名手动添加验证信息时,它将启用LTV,而不会出现任何问题。不知道我们在这里遗漏了什么。任何输入都将非常有用。

  • 我试图'完成到ltv'的pdf已经签署,我发现这个代码使用它的文本: http://developers.itextpdf.com/question/how-enable-ltv-timestamp-signature 我读到它与Adobe有一个“问题”,因为应用的时间戳不被识别为支持LTV,并建议应用一个新的dss来解决这个问题。 我的问题: > > 如果是...这是ETSI批准的?iText能

  • 问题内容: 我试图在没有LTV格式的已签名PDF文档中启用LTV。在所有情况下,我都找到了相同的示例,如链接中所述。如何为时间戳签名启用LTV,启用iText LTV-如何添加更多CRL?,它定义了获得预期结果的过程。碰巧我没有工作,它没有给我任何错误,但是我没有添加LTV。 为什么在执行以下代码时不会给我任何错误,但是我不添加LTV的一些想法。 这是我尝试添加LTV的方法: 我正在使用的版本:

  • 我正在尝试在一个已经签名的PDF文档中启用LTV,而不使用LTV格式。我在所有情况下都发现了相同的示例,如链接“如何为时间戳签名启用LTV”,iText LTV enabled-如何添加更多CRL?”中所述,定义了获得预期结果的过程。碰巧我没有工作,它没有给我任何错误,但我没有添加LTV。 关于为什么在执行以下代码时没有给我任何错误的想法,但是我没有添加LTV。 这就是我尝试添加LTV的方法: 我

  • (1). 配置路由 配置路由 myobject/myadmin/urls.py 加入如下代码 .... # 后台管理员路由 url(r'^login$', index.login, name="myadmin_login"), url(r'^dologin$', index.dologin, name="myadmin_dologin"), url(r'^log