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

pdf签名中至少有一个签名无效

夏侯航
2023-03-14

当我使用带电子令牌的IText对PDF进行签名时,签名的PDF在Acrobat Adobe Reader中显示“至少一个签名无效”。我正在使用有效的电子代币。以下是签署Pdf的代码。

//path of destination file    
String destFile = "D://sign_test.pdf";  
// load key store    
KeyStore ks = KeyStore.getInstance("Windows-MY");       
ks.load(null, "password".toCharArray());    
Enumeration enumeration = ks.aliases();    
String alias = null;    
while(enumeration.hasMoreElements()){  
alias = (String)enumeration.nextElement();  
if(alias.equalsIgnoreCase("alias of the certificate"))// to get specific certificate from keystore  
break;  
}  
PrivateKey pk = (PrivateKey)ks.getKey(alias, "password".toCharArray());  Certificate[] chain = ks.getCertificateChain(alias);  
PdfReader reader = new PdfReader(sourceFile);  
FileOutputStream os = new FileOutputStream(destFile);  
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');  
PdfSignatureAppearance appearance = stamper .getSignatureAppearance();  
appearance.setReason("I've written this.");  
appearance.setLocation("Foobar");  
appearance.setVisibleSignature(new Rectangle(72, 732, 144,      780),1,"first");  
ExternalSignature es = new PrivateKeySignature(pk, "SHA-256", "SunMSCAPI");    
ExternalDigest digest = new ProviderDigest("SunMSCAPI");  
MakeSignature.signDetached(appearance, digest, es, chain, null, null,    null, 0, CryptoStandard.CMS);    
stamper.close();

共有1个答案

佘京
2023-03-14

原因是:您选择的证书无效

如果您查看Acrobat Adobe Reader的确切内容,您会在签名面板中找到:

因此,签名本身在数学上是正确的:

自应用此签名以来,文档未被修改

但问题在于您的证书:

签名者的证书无效

如果进一步单击证书视图,您将看到

因此,签名者的证书无效的原因是:

使用无效。

事实上,您可以看到上面的预期用法:

加密密钥

要创建签名,需要签名或不可否认性。

因此,您只需选择一个用于签名的证书。

 类似资料:
  • 我试图使用MiniKube构建和部署微服务映像到运行在我的开发机器上的单节点Kubernetes集群。我正在使用谷歌的cloud-native微服务演示应用在线精品,以了解Kubernetes、Istio等技术的使用。 我在尝试构建LoadGenerator时收到这些错误。如何解决此问题?

  • 我正在按代码创建一个签名PDF,但由于某种原因,我收到此错误: 至少一个签名无效-文档签名后已被更改或损坏 我将DSS属性与VRI、Certs和CRL一起使用。重要的一点是,我使用的版本与我在讨论此过程的其他文章中看到的版本相同。所以我有第一部分的签名(内容<>和byterange[])和第二部分与他的孩子的DSS。我注意到,如果删除第二个生成的部分,Adobe Acrobat将给出: 已签名且所

  • 我对iTextSharp有意见。我有一个带有表单字段的文档,并且我已经为签名生成了字段。当第一个人在文件上签字时,它就会正常工作。Adobe Reader显示有效签名。当我让第二个人在文档上签名时,Adobe Reader显示签名1现在是“未知签名”,签名无效。Adobe reader显示: 此签名中包含的格式或信息有错误(支持信息:SigDict/Contents非法数据)

  • 作为我对客户机/服务器pdf签名研究的一部分,我测试了itext pdf延迟签名示例。不幸的是,我得到的合并空签名pdf和哈希值的pdf ie输出显示无效签名。 下面是我的代码片段 我正在使用pkcss11 usb令牌进行签名

  • PDF下载示例:https://drive.google.com/file/d/12wv1Pb7gh4vCKOGhX4cZ3aOrLSiOo4If/view?usp=sharing 因此,当PDF在A.Reader(连续版本)中打开时,它表示证书无效,因为对该文档所做的更改导致签名无效。 但我看不出有什么变化。我们自己的应用程序只添加了一个签名(证书),为数千个其他PDF添加了正确的签名。未执行其

  • 我找不到为什么Foxit PDF阅读器显示我的签名文件无效。首先,我将空白签名容器插入pdf 我发送到外部Web服务以使用合格的签名进行签名。 接下来,我使用webservice的结果对pdf进行了签名。这是外部签名容器: 这是签名代码: 并且有结果: 找不到我做错了什么。