【问题标题】:at least one signature is invalid in pdf signingpdf签名中至少一个签名无效
【发布时间】:2016-05-09 11:19:49
【问题描述】:

当我使用带有电子令牌的 IText 签署 PDF 时,签名的 pdf 在 Acrobat Adob​​e 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();

【问题讨论】:

标签: pdf itext signing


【解决方案1】:

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

详情

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

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

自从应用此签名后,文档未被修改

但问题出在您的证书上:

签名者的证书无效

如果您进一步点击进入您将看到的证书视图

所以签名者的证书无效的原因是:

无效。

确实,您在上面看到了预期的用法:

加密密钥

要创建签名,您需要 SigningNon-Repudiation

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

【讨论】:

  • 谢谢它解决了我的问题。问题是两个证书在电子令牌中具有相同的别名。
猜你喜欢
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多