2017-08-25 7 views
0

TSAサーバーを使用してタイムスタンプをPDFファイルに追加しようとしていますが、タイムスタンプが追加された後、文書が署名された後に変更または破損している。PDFにタイムスタンプを追加するとファイルが破損する

テストコード:

@SpringBootApplication 
public class TestTimestampApplication implements CommandLineRunner { 

public static void main(String[] args) { 
    SpringApplication.run(TestTimestampApplication.class, args); 
} 

@Override 
public void run(String... arg0) throws Exception { 
    TSAClient tsa = new TSAClientBouncyCastle("http://tsa.buenosaires.gob.ar/TSS/HttpTspServer"); 

    try (OutputStream os = new FileOutputStream("I:/output.pdf")) { 
     PdfReader reader = new PdfReader("I:/input.pdf"); 
     PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0', null, true); 

     PdfSignatureAppearance sap = stamper.getSignatureAppearance(); 
     LtvTimestamp.timestamp(sap, tsa, "Atenea"); 
    } 
} 

}

私はタイムスタンプを行うために、これらのフレームワークを使用しています:

<dependency> 
     <groupId>com.itextpdf</groupId> 
     <artifactId>itextpdf</artifactId> 
     <version>5.5.12</version> 
    </dependency> 
    <dependency> 
     <groupId>org.bouncycastle</groupId> 
     <artifactId>bcprov-jdk15on</artifactId> 
     <version>1.58</version> 
    </dependency> 
    <dependency> 
     <groupId>org.bouncycastle</groupId> 
     <artifactId>bcpkix-jdk15on</artifactId> 
     <version>1.58</version> 
    </dependency> 

をそして、私は、出力ファイルを開いたときに、私はこの取得:

enter image description here

問題がどのようなものか何か考えていますか?

出力ファイル例:https://drive.google.com/file/d/0B5OSF4ESCy5gRU5xTXQxU2NEMmM/view?usp=sharing

おかげで、 フリアンすべての

+0

このサンプルを見てください... http://developers.itextpdf.com/examples/security/digital-signatures-white-paper/digital-signatures-chapter-5#888-c5_04_ltv.java – joelgeraci

+0

共有してくださいサンプル時間はpdfです。 – mkl

+0

@mklは例を – shulito

答えて

2

まず、タイムスタンプのTSTInfoMessageImprintは、タイムスタンプバイト範囲の正しいハッシュ値が含まれています。したがって、問題は異なるものでなければなりません。

拡張キー使用法

TSA証明書の拡張キー使用法拡張のASN.1表現は次のようになります。

951 49: . . . . . . . . SEQUENCE { 
953 3: . . . . . . . . . OBJECT IDENTIFIER extKeyUsage (2 5 29 37) 
     : . . . . . . . . . . (X.509 extension) 
958 42: . . . . . . . . . OCTET STRING, encapsulates { 
960 40: . . . . . . . . . . SEQUENCE { 
962 8: . . . . . . . . . . . OBJECT IDENTIFIER 
     : . . . . . . . . . . . . serverAuth (1 3 6 1 5 5 7 3 1) 
     : . . . . . . . . . . . . (PKIX key purpose) 
972 8: . . . . . . . . . . . OBJECT IDENTIFIER 
     : . . . . . . . . . . . . codeSigning (1 3 6 1 5 5 7 3 3) 
     : . . . . . . . . . . . . (PKIX key purpose) 
982 8: . . . . . . . . . . . OBJECT IDENTIFIER 
     : . . . . . . . . . . . . timeStamping (1 3 6 1 5 5 7 3 8) 
     : . . . . . . . . . . . . (PKIX key purpose) 
992 8: . . . . . . . . . . . OBJECT IDENTIFIER 
     : . . . . . . . . . . . . ocspSigning (1 3 6 1 5 5 7 3 9) 
     : . . . . . . . . . . . . (PKIX key purpose) 
     : . . . . . . . . . . . } 
     : . . . . . . . . . . } 
     : . . . . . . . . . } 

これ特に証明書は、サーバーで使用するためにマークされていることを意味し認証、コード署名、タイムスタンプ、およびOCSP署名が含まれます。さらに、拡張は重要ではないとマークされています。 3161

RFCは、他の一方で、必要とします。

2.3。 TSAの識別

TSAは各タイムスタンプメッセージに、その目的のために予約された鍵 を使用して署名しなければならない。 TSAは異なるポリシー、異なるアルゴリズム、 異なる秘密鍵サイズに対応するため、またはパフォーマンスを向上させるために、個別の秘密鍵 を持つことができます。

ID-KP-タイムスタンプ:KeyPurposeID値を有する[RFC2459]セクション 4.2.1.13に定義されているよう 対応する証明書は 拡張鍵使用フィールド拡張のインスタンスを1つだけ含まなければなりません。この拡張は重要でなければなりません。

RFC 3161 section 2.3

したがって、そのTSAの証明書はそれで生成されたすべてのタイムスタンプが有効でない、RFC 3161のタイムスタンプを生成するために使用することはできません。

関連する問題