2017-01-03 4 views
1

Ich baue eine App, mit der Benutzer ein PDF digital signieren können. Ich benutze das PlugPDF SDK. Es hat keine integrierte Unterstützung für das Erzeugen von Bytebereichs-Digest, so dass ich es selbst tun muss. PlugPDF erzeugt die PDF-Inhalte aus dem ich Hash in Terminal unterzeichnet generieren:Computing Byte Range Digest

openssl dgst -hex -sha256 -sign privateKey.pem -out encrypted.out invoice.content 

Von diesem Hash ich das PKCS # 7-Objekt erzeugen:

openssl cms -in encrypted.out -sign -signer signer.pem -outform der -out cert.p7b 

Dann habe ich es in das PDF injizieren mit der plugPDF SDK . Wenn ich es in Adobe Acrobat öffne, ist das PDF signiert, aber die Signatur ist ungültig. Dort steht: "Das Dokument wurde geändert oder beschädigt, seit die Signatur angewendet wurde."

Ich nehme an, das Problem ist ein falscher Hash-Wert, aber ich habe keine Ahnung, wie ich es sonst erzeugen könnte.

Hier ist ein Beispiel Tutorial: https://plugpdf.com/how-to-sign-pdf-document-with-pki-certificate-on-ios/

Antwort

0

Das Byte für PDFs typischerweise den Bereich des PDF ausschließen verdaut Bereich, in dem die Signatur injiziert werden wird, so dass der Digest-Wert gleich sein sollte vor und nach der Unterschrift hinzufügen. Wenn sie nicht identisch sind, dann wird davon ausgegangen, dass die Datei in irgendeiner Weise modifiziert wurde, seit sie signiert wurde.

Es sieht nicht so aus, als könnten Sie mit dem Befehl openssl dgst diskontinuierliche Bytebereiche angeben.

+0

PlugPDF SDK generiert die Datei invoice.content. Sie sagen, es ist die Quelle für die Berechnung der Digest. Sollte ich annehmen, dass der von mir verwendete Signiervorgang korrekt ist und das Problem ist, dass invoice.content nicht korrekt generiert wird? –