我正在尝试了解和实施基于欧盟委员会赞助的数字签名服务项目的解决方案。在Nowina NexU客户端软件的帮助下,我目前已经成功地使用了前面提到的github链接中提到的DSS-DEMO应用程序提供的抽象。我的愿望是使用以下配置对 PDF 文档进行数字签名:
- 没有容器
- PAdES 签名表
- 笼罩
- PAdES_BASELINE_LT 签名级别
- SHA256 摘要算法
我希望签名有一个可见的部分,即在文档的第一页上可以看到。这一点在这里有所体现。就个人而言,我需要实际的签名时间戳和她证书中的签名者姓名。在上面的演示中,这是通过向签名函数提供“参数”来完成的。
我还想填写签名的原因字段 - 随后在您使用 Adobe Acrobat Reader 等程序查看签名属性时显示。
到目前为止,我的问题如下,我似乎既找不到示例也找不到有关它们的其他类型的信息。
- 如果我想显示我将从时间戳授权服务获得的签名时间戳,我将如何获得它,因为与时间戳服务器的通信是在签名过程中完成的,即在指定上面提到的参数之后。我想我必须深入研究 DSS 代码并自己完成所有步骤。
- 目前,发生了一件奇怪的事情。当我指定硬编码的原因(如“testtest”)或根本没有原因时,签名似乎被认为是有效的,或者至少是未知的。当我从其他结果中填写它时,签名无效。因为这样的事情通常不会靠魔法发生,所以我一定是做错了什么。
代码大致是这样组织的——两台机器之间有一个 REST 通信——一个服务器和一个安装了 NexU 的客户端。NexU 与客户端计算机上的智能卡或任何其他证书存储进行所有通信 - 它与服务器交换摘要值和签名摘要值。服务器代码中有两个特定阶段:
- getDataToSign - 这里是根据 PDF 内容计算摘要
- signDocument - 这里是实际的签名 - (将签名嵌入到文档中,我猜?)发生。
我为这两个阶段提供了许多参数,其中包括指定签名时间戳、原因以及我希望出现在第一页上的文本的视觉参数。我在两个阶段使用相同的参数来执行此操作(因为我不确定应该在哪个阶段给出哪个)
我的签名日期 - 尽可能接近时间戳权威服务器的时间戳不是合乎逻辑的吗?好的 - 我在签名过程开始时将其设置为我自己服务器的当前时间戳。
我正在使用 PAdESSignatureParameters.setReason 设置原因。感谢任何有用的见解 - 谢谢。