2016-04-13 3 views
0

Ich habe ein Array mit Signatur-Bytes und ein Array mit Occ-Bytes, um ltv Informationen zu meinem PDF hinzuzufügen. Die Signatur ist eine Timestamp-Signatur. Jetzt versuche ich, diese Informationen in einer PDF-Datei hinzuzufügen, die mitFügen Sie separate Signatur und separate Occ-Bytes zu PDF mit iText

arbeitet
//add signature 
PdfLiteral pdfLiteral = (PdfLiteral) pdfSignature.get(PdfName.CONTENTS); 
byte[] outc = new byte[ (pdfLiteral.getPosLength() - 2)/2 ]; 
Arrays.fill(outc, (byte) 0); 
System.arraycopy(externalSignature, 0, outc, 0, externalSignature.length); 
PdfDictionary dic2 = new PdfDictionary(); 
PdfString pdfString = new PdfString(outc).setHexWriting(true); 
dic2.put(PdfName.CONTENTS, pdfString); 

pdfSignatureAppearance.close(dic2); 

...

//add LTV 
for (String sigName : stamper.getAcroFields().getSignatureNames()) { 
     addVerification = validation.addVerification(
       sigName, // Signature Name 
       ocspColl, // OCSP 
       crlColl, // CRL 
       null // certs 
     ); 
    } 

validation.merge(); 
stamper.close(); 

OK, das funktioniert. Aber in der Signatur muss ich die Flag Zertifizierungsstufe 1 setzen (keine Änderungen sind erlaubt) und meine Anwendung wird nicht funktionieren. Weil ich beim Hinzufügen von LTV das Dokument ändere. Ich habe versucht, mein eigenes DSS-Wörterbuch zu erstellen und es zu meinem Dokument hinzuzufügen, aber es ist fehlgeschlagen. Wer kann bitte helfen? Vielen Dank im Voraus

Antwort

0

Als Mitglied des ISO-Ausschusses für ISO-32000-2, habe ich Zugriff auf die Spezifikation, so erlauben Sie mir, ein paar Dinge zu erklären.

Es können drei Arten von Signaturen (*) in einem PDF-Dokument sein:

  • Höchstens eine Zertifizierung Signatur (auch bekannt als Autor Unterschrift),
  • Eine oder mehrere Genehmigungssignaturen (auch bekannt als Empfänger Signaturen),
  • Beliebige Anzahl von Dokument-Zeitstempelsignaturen (von denen der SubFilter-Wert ETSI.RFC3161 ist).

(*) Es gibt eine vierte Art, eine so genannte Nutzungsrechte Unterschrift, aber , die 2.0 in PDF veraltet wird.

Quelle: Abschnitt 12.8.1 Titel „Allgemein“ in Abschnitt 12.8 Titel „Digitale Signaturen“ von ISO 32000-2 (Entwurf)

Sie sind über ein Dokument Zeitstempelsignatur sprechen (hinzugefügt für LTV Gründe), aber Sie sprechen auch über DocMDP (MDP steht für Modification Detection and Prevention).

MDP ist nur für die Zertifizierung Signaturen zur Verfügung:

Die DocMDP Transformationsverfahren zu verwenden Änderungen an einem Unterschriftsfeld relativ zu erfassen, die durch den Autor eines Dokument (die Person, die eine Zertifizierung der Anwendung unterzeichnet Unterschrift). Ein Dokument kann nur ein Unterschriftsfeld enthalten, das eine DocMDP-Transformation Methode enthält. Es ermöglicht dem Autor zu spezifizieren, welche Änderungen erlaubt werden, um das Dokument gemacht werden und welche Änderungen die Unterschrift des Autors ungültig machen.

Quelle: Abschnitt 12.8.2.2.1 dem Titel "Allgemein" in Abschnitt 12.8.2.2 dem Titel "DocMDP" von ISO 32000-2 (Entwurf)

Zugegeben, können Sie eine Referenz hinzufügen Eintrag in das Signaturwörterbuch, das "Ein Array von Signaturreferenzwörterbüchern" enthält.

Ein Signaturbezugswörterbuch kann einen TransformMethod Eintrag mit Werten:

  • DocMDP: Gebrauchte Modifikationen an ein Dokument relativ zu einem Unterschriftsfeld zu erfassen, der durch den Urheber eines Dokument signiert ist.
  • FieldMDP: Wird verwendet, um Änderungen an einer Liste von Formularfeldern zu erkennen, die in TransformParams angegeben sind.

Quelle: Tabelle 259 "Einträge in einer Signaturbezugswörterbuch" in Abschnitt 12.8.1 der ISO 32000-1

Wenn MDP ist, was Sie wollen, können Sie DocMDP bei Verwendung von Zertifizierungssignaturen und FieldMDP im Falle anderer Signaturen. Wenn wir jedoch Referenz Eintrag in Tabelle 255: Einträge in einem Signatur-Wörterbuch, sehen wir, dass "Wenn SubFilter ETSI.RFC3161 ist, soll dieser Eintrag nicht verwendet werden."

Mit anderen Worten, Sie können kein DocMDP oder FieldMDP für Dokument-Zeitstempel haben. Das ist irgendwie normal, denn wie wir in Abschnitt 12.8.5.1 „Allgemein“ im Abschnitt 12.8.5 „Dokument Zeitstempel (DTS) Wörterbuch“ lesen:

Ein Dokument Zeitstempel Wörterbuch die genauen Inhalte etabliert die vollständige PDF-Datei zu dem in dem Zeitstempeltoken angegebenen Zeitpunkt.

Es sagt nichts über die Möglichkeit, ein Flag auf "Zertifizierungsstufe 1 (keine Änderungen sind erlaubt)" zu setzen. Dafür gibt es keinen Dokument-Zeitstempel. Es ist normal, dass der Code fehlschlägt.

Die Festlegung der Zertifizierungsstufe kann nur mit der ersten Signatur durchgeführt werden, wenn die Signatur eine Zertifizierungssignatur ist. Wer Ihnen gesagt hat, dass Sie die Zertifizierungsstufe mit einer Dokument-Zeitstempelsignatur (ETSI.RFC3161) festlegen sollen, fordert Sie auf, etwas zu tun, was gemäß dem kommenden ISO-Standard für PDF 2.0 nicht möglich ist.

Wenn Ihre Folgefrage ist: Wie wurde es in ISO 32000-1 gemacht, dann ist die Antwort einfach: Dokument Zeitstempel Signaturen gab es in ISO 32000-1 nicht.

+0

Bruno, Vielen Dank für diese detaillierte Antwort! – FenFen