我有一个电子签名/数字签名的PDF,该文档在分离签名中使用iText lib进行签名。我在验证签名时遇到问题,收到消息“签名者身份无效,因为它已过期或尚未有效”,并且在签名者信息中“构建从签名者证书到颁发者证书的路径时出错。”
我尝试了很多方法来验证签名,但都没有成功。如果我明确地将签名者证书添加为可信证书,那么我会得到一个绿色检查,并能够验证签名,但我认为这不是正确的方法。
数字签名的pdf可以在此处找到数字签名的文档
谁能帮忙解决这个问题。
我明白你的问题是什么。有一种全新的方法可以解决它,分三步。
关闭所有弹出窗口。返回签名区,右键单击以选择、验证签名。多恩✅
我尝试了许多方法来验证签名,但都没有成功。
这并不奇怪:你的签名无效。在PDF签名字段值中有一个签名时间2020/06/11 09:28:35 GMT,但您的签名者证书在2020/06/11 09:29:44 GMT之前无效,在2020/06/11 09:59:44 GMT之后无效。因此,在声明的签名时间,您的签名者证书尚未生效,无法创建有效的签名。
显然,您使用的是一个签名服务,当您的签名请求到达时,它会及时创建一个短期证书。不幸的是,这是在签名过程开始时,iText作为签名时间存储在PDF中的时间之后。
因此,解决问题的一种方法是告诉iText在未来稍微使用时间(例如两分钟)。
您可以通过PdfSignatureAppearance
方法setSignDate
来实现这一点。
您的签名实际上也违反了规范中的建议:仅当签名(嵌入的签名容器)中没有签名时间时,才应使用存储在签名字段值字典中的上述签名时间。不过,在您的情况下,嵌入式签名容器确实包含一个值为11/06/2020 09:29:44 GMT
的signingTime
signed属性,该属性不在证书有效期开始之前。
由于这只是一个建议,您的PDF签名不会因为有两个签名时间值而无效。但由于值不同,这可能会导致不同验证器使用一个或另一个值得出不同的验证结果。
因此,解决此问题的另一种方法是确保签名值字典中根本没有添加任何签名时间值。这还可以让你的签名PDF遵循上面的建议,因此更加精确。
不幸的是,使用PdfSignature外观
方法setSignDate
设置null
值不起作用,稍后在签名过程中这会导致NullPointerException
发生。但是如果您在签名代码中使用自定义ExternalSignatureContainer
实现(而不是ExternalSignature
实现),您可以在修改SigningDicpedia
实现中删除该条目。关键是PdfName. M
。
顺便说一句,由于您的签名证书仅在半小时内有效,如果他们的验证策略只信任数字时间戳,而不是不安全的日期时间值,验证者也可能会拒绝它。
因此,您应该在证书的生命周期内添加撤销信息并对整个构造进行数字时间戳,以保证长期验证。
我有字节数组格式的公钥。在我的数据库里。像这样 在此处输入图像描述 总是suc=false。我确信bytetoverify的值与方法符号中的输入值相同。 我不知道我用这种方式生成公钥是问题还是符号有问题。在符号方法中,我使用sh1和pkcs1,但在验证中,我只找到sh1。 每个人都能帮我吗?
在我的应用程序中,我有一个公钥(表示为字符串),普通消息和数字签名,表示为base64编码字符串,用SHA256散列,用RSA加密)。现在,我需要验证数字签名。我试图做如下操作: 从创建(取自此处) 根据原始消息创建SHA256摘要 使用函数验证签名 (我正在努力避免使用OpenSSL函数) 此外,我的数字签名是使用Java的SHA256withRSA方法创建的。我在这里读到SHA256WithR
我的手被https、ssl、PKI之类的东西弄得脏兮兮的。对于自签名证书,有一点我不太理解。假设我想创建一个自签名证书,并在我们想要建立安全连接时将其发送给我的朋友。 所以步骤是: 创建一个私钥。 创建一个公钥。 用我的公钥在证书上签名。 因此,当我的朋友得到我的证书时,他必须验证他得到的证书是我的,他需要解密数字签名。但为了解密和验证他必须拥有我的私钥。所以,我有点困惑。
我在iText web上遵循了这个示例(http://gitlab.itextsupport.com/itextsharp/tutorial/blob/master/signatures/chapter5/C5_03_CertificateValidation/C5_03_CertificateValidation.cs),但结果与我预期的不一样。具体地说,当试图通过OCSP或CRL验证签名时,结
我在Tomcat 7上使用Spring Security SAML 2.0示例webapp,并对其进行了修改,以尝试让其通过Ping身份验证服务。webapp正在与服务对话,并返回一个断言,但在尝试验证签名时失败,如下调试输出所示: 我知道它无法验证签名,并且我已经获得了ping身份管理员要使用的证书,但我不确定如何将其包含在应用程序中。我尝试过使用JDK的keytools程序将其添加到示例应用程
我试图使用Terraform创建一个自签名证书,以便在测试/开发环境中内部使用。 我首先创建一个CA私钥,自签名证书。 然后,为要启用HTTPS的内部域名创建证书签名请求和私钥。 然后我在证书上签字。以下是我使用的整个Terraform清单: 我查了Terraform舱单。然后我从状态文件中提取生成的证书并将它们保存到文件中。 我试图用openssl验证最终证书,但得到一个错误: 你知道问题出在哪