PDFBox + надувной замок - подписание PDF - PullRequest
2 голосов
/ 01 июня 2011

Я пытаюсь поставить цифровую подпись (зашифровать?) PDF, используя PdfBox (и BouncyCastle)

Я создал хранилище ключей и сертификат:

%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)

В чем проблема? что я делаю не так?

Я могу использовать PDFBox ShowCertificate на уже подписанном (iText) PDF: Алгоритм подписи: SHA1 с DSA, OID = 1.2.840.10040.4.3

Ответы [ 2 ]

1 голос
/ 11 сентября 2011

Я не знаком с PDFBox, но я думаю, что ваша проблема в том, что инструмент командной строки «Encrypt» не выполняет подписывание.Вы, кажется, создали сертификат / ключ DSA.DSA для цифровых подписей.Исключение отражает тот факт, что DSA не является допустимым алгоритмом шифрования.

Я видел некоторые ссылки на подписывание с помощью PDFBox, но я не думаю, что это так.

0 голосов
/ 06 октября 2011

Вам нужно будет добавить провайдера.

Вы можете сделать это с помощью одной строки кода.

Security.addProvider (новый BouncyCastleProvider ());

Безопасность - от java.security.Security

Очевидно, что сначала вам нужно будет импортировать BouncyCastleProviderStuff.


Ой, я только что заметил, что вы делаете это из командной строки с помощью некоторых инструментов PDFBox Не уверен, как можно добавить провайдера туда.

...