2

我正在尝试使用 PdfBox(和 BouncyCastle)对 PDF 进行数字签名(加密?)

我创建了密钥库和证书:

%java_home%\bin\keytool -genkey -alias razor -keypass testkeypass -storepass teststorepass  -keystore test-keystore.jks -validity 360 -dname "CN=razor, OU=myorg, O=my.org, L=Mycity, C=PL"
%java_home%\bin\keytool -export -alias razor -keypass testkeypass -storepass teststorepass  -keystore test-keystore.jks -file test-cert.cer  

现在我正在尝试使用 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)

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

我可以在已签名(由 iText)PDF 上使用 PDFBox ShowCertificate:签名算法:SHA1withDSA,OID = 1.2.840.10040.4.3

4

2 回答 2

1

我不熟悉 PDFBox,但我认为您的问题是“加密”命令行工具不进行签名。您似乎已经创建了 DSA 证书/密钥。DSA 用于数字签名。该例外反映了 DSA 不是有效的加密算法这一事实。

我看到了一些关于使用 PDFBox 签名的参考资料,但我认为这不是方法。

于 2011-09-11T06:44:07.463 回答
-1

您将需要添加提供者。

您可以使用单行代码来完成此操作。

Security.addProvider(new BouncyCastleProvider());

安全性 - 来自 java.security.Security

显然,您需要先导入 BouncyCastleProviderStuff。


哎呀-我刚刚注意到您正在使用一些 PDFBox 工具从命令行执行此操作。不知道如何在那里添加提供者。

于 2011-10-06T14:52:13.853 回答