Digital Signature/ eSign verification fails
我有一个eSigned /经过数字签名的PDF,使用iText lib在分离的签名中对该文档进行了签名。我在验证签名时遇到问题,收到消息"签名人身份无效,因为它已过期或尚未生效",并且在签名人信息中"构建从签名人证书到颁发者证书的路径时出错。"
我尝试了多种方法来验证签名,但未成功。如果我将签名者证书明确添加为受信任的证书,那么我会获得绿色的勾号并能够验证签名,但是我认为那不是正确的方法。
Adob??e Signature设置如下:-
数字签名的pdf可以在此处找到数字签名的文档
任何人都可以帮助解决此问题。
I have tried many ways to validate the signature but couldn't get any success.
这并不奇怪:您的签名无效。在PDF签名字段值中,签名时间为格林尼治标准时间2020/06/11 09:28:35,但您的签名者证书有效期仅在格林尼治标准时间2020/06/11 09:29:44之前,而不是在2020/06/11 09之后格林尼治标准时间:59:44。因此,在声明的签名时间,您的签名者证书尚未生效,并且无法创建有效的签名。
显然,您使用签名服务进行签名,该服务会在您的签名请求到达时及时创建一个短期证书。不幸的是,这是在iText在签名过程开始时作为签名时间存储在PDF中之后的时间。
因此,解决此问题的一种方法是告诉iText将来使用一点时间(例如两分钟)。
您可以通过PdfSignatureAppearance方法setSignDate来做到这一点。
您的签名实际上还违反了规范中的建议:仅当签名(嵌入式签名容器)中的签名时间不可用时,才应使用存储在签名字段值字典中的上述签名时间。但是,在您的情况下,嵌入式签名容器确实包含一个值为11/06/2020 09:29:44 GMT的signingTime签名属性,该属性不在证书有效期开始之前。
这仅是一个建议,因此具有两个签名时间值不会使您的PDF签名无效。但是由于值不同,这可能导致不同的验证者使用一个或另一个值产生不同的验证结果。
因此,解决此问题的另一种方法是确保根本没有将签名时间值添加到签名值字典中。此外,这还使您签名的PDF遵循上面的建议,因此更加精确。
不幸的是,使用PdfSignatureAppearance方法setSignDate设置null值不起作用,稍后在签名过程中这会导致NullPointerException出现。但是,如果在签名代码中使用自定义的ExternalSignatureContainer实现(而不是ExternalSignature实现),则可以在modifySigningDictionary实现中删除该条目。密钥是PdfName.M。
顺便说一句,由于您的签名证书仅有效半小时,如果验证者的验证策略仅信任数字时间戳,而不信任不安全的日期时间值,则验证者也可以拒绝该证书。
因此,您应该在证书的有效期内添加吊销信息并为整个结构添加数字时间戳,以确保长期验证。
- 非常感谢您这么详细地解释了这个问题,现在清楚地知道了我做错了什么。您建议的第一种方法可以快速解决,但第二种方法看起来更完美。我也想添加嵌入式签名容器signingTime和Signer信息,因为我事先也没有签名者的名字,因为外部演唱服务仅返回带有签名响应的公共证书。是否可以使用ExternalSignatureContainer实现此目的,如果可以,那么任何示例代码片段都将有所帮助。
-
@mlk外部签名服务不提供吊销信息,因为证书仅用于一次签名,如何在没有吊销信息的情况下处理长期验证。有什么办法可以纠正已经签名的文档(如他的帖子中所述)的问题,并从嵌入式签名容器中设置签名时间,而不是设置在签名之前出现的时间。据我所知,这听起来可能是个愚蠢的疑问,但请澄清一下。谢谢 :)
-
"是否有任何方法可以纠正已经签名的文档的问题" \\-如果可以像这样更改签名的相关属性而无需再次签名,则签名方案将不值一毛钱。您的签名无效(或至少与一种无效的解释含糊)。句号要获得没有无效解释的签名,您需要再次签名(或说服标准化委员会更改标准以使您的签名明确有效)。
-
"外部签名服务不提供吊销信息,因为证书仅用于一次签名" –如果这些签名应通过Adobe Reader等标准组件进行验证,则没有任何意义。验证者应该如何知道?验证者必须假定任何常规的签名证书都可以在任何时候被吊销。因此,它需要能够检查吊销状态。我确实知道一些类似的服务,这些服务会返回相关的吊销信息以及签名。否则,必须是crls或ocsp响应者。
-
"我还要添加嵌入式签名容器的signingTime和Signer信息"-停止。我说过可以阻止itext设置自己的签名时间。但这并不是您可以更改任何以前的信息。例如。如果签名可视化中有信息,则通常只能使用Adobe Reader进行更改,至少显示警告:某些内容已更改。
-
"外部签名服务不提供吊销信息,因为证书仅用于一次签名"-告诉您此信息的人似乎并不知道所涉及的签名服务。根据有问题的证书,在https://esign.cdac.in/ca/esignCA2019.crl中有一个CRL分发点,您可以在该位置下载当前的CRL ...
-
非常感谢您宝贵的意见和时间。