2011-06-01 102 views
2

我试图进行数字签名使用PDFBOX(和BouncyCastle的)PDFBox的+充气城堡签署PDF

我已经创建密钥库和证书(加密?)PDF想要使用PDFBOX

org.apache.pdfbox.PDFBox Encrypt -certFile test-cert.cer -canModify false -canPrint false test.pdf test-signed-out.pdf 

,我已经有了:

Encrypt failed with the following exception: 
org.apache.pdfbox.exceptions.COSVisitorException: Cannot find any provider supporting 1.2.840.10040.4.1 
    at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1025) 
    at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:914) 
    at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:895) 
    at org.apache.pdfbox.Encrypt.encrypt(Encrypt.java:189) 
    at org.apache.pdfbox.Encrypt.main(Encrypt.java:53) 
    at org.apache.pdfbox.PDFBox.main(PDFBox.java:40) 
org.apache.pdfbox.exceptions.CryptographyException: Cannot find any provider supporting 1.2.840.10040.4.1 
    at org.apache.pdfbox.pdmodel.encryption.PublicKeySecurityHandler.prepareDocumentForEncryption(PublicKeySecurityHandler.java:344) 
    at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1016) 

什么问题?我做错了什么?

我可以使用PDFBox的ShowCertificate上已经签约(由iText的)PDF: 签名算法:SHA1的DSA,OID = 1.2.840.10040.4.3

回答

1

我不熟悉PDFBox的,但我觉得你的问题是, “加密”命令行工具不会执行签名。您似乎已创建DSA证书/密钥。 DSA用于数字签名。异常反映了DSA不是有效的加密算法。

我看到一些提及使用PDFBox进行签名,但我不认为这是方式。

-1

您将需要添加提供者。

你可以用单行代码来做到这一点。

Security.addProvider(new BouncyCastleProvider());

安全 - 从java.security.Security

显然,你需要先导入BouncyCastleProviderStuff。


哎呀 - 我只是注意到你正在从命令行使用一些PDFBox工具。 不知道如何在那里添加提供程序。

+0

请参考文章:http://stackoverflow.com/questions/22354607/how-to-digitally-sign-a-dynamically-created-pdf-document-using-pdfbox – AVA 2014-04-17 11:36:33