1
0
解释如下。 就第一个案例而言,这是我的错。为了详细说明,根据我的理解,使用signingService.fillParameters()方法将签名参数提供给DSS方法两次。
这对于两种方法都很重要,因为第一次计算要签名的文档的哈希/摘要。由于我选择了要封装的签名,即要包含在要签名的文档中,因此我们需要首先应用签名,然后根据该“最终”文档计算摘要。 据我在DSS代码中看到的(大约),在getdatatosign期间,对上传的PDF的内存表示进行签名,并计算其摘要,但结果被丢弃。 在实际的signdocument方法期间(在此期间,摘要已返回安装了nexu的客户机,并返回到已签名的服务器),上载的PDF将再次签名,其摘要将再次计算,但这次实际的已签名摘要(我们从客户机获得)也将应用于该文档以及IS操作作为已签名的PDF文档发送回客户端。 我做错的是,在第一次,我丢失了我要添加的变量作为原因(它在模型属性中的某个地方丢失了-我没有在请求之间传递它),我传递给getdatatosign的第一个参数映射的结果与第二个参数映射不同-所以它只是逻辑上,文档的实际哈希/摘要与保存的签名中的摘要不同(因为在计算要签名的摘要时,我没有传递原因)。这就是为什么当我传递一个硬编码值时,因为它是硬编码的,所以它在两次调用fillparameters时都存在。我知道这是个愚蠢的错误。我应该知道这一点,因为在将原因(或位置等其他字段)传递给签名时绝对没有任何困难。 顺便说一句,签名是使用ApachePDFBox完成的,并且是增量完成的。 至于第二件事,我们决定保持原样,尽管签名时间戳和时间戳权限1之间有一个相当大的差距。我真的不知道在这种情况下应该允许什么样的差距。我想这是因为
这更像是-当然,我愿意接受其他评论和回答。谢谢您! |