2013-03-05 2 views
1

PDF 파일의 지정된 서명에 대한 타임 스탬프가 있는지 확인하려고합니다. 내가 분명히 서명에 대한 액세스 권한을 가지고iText로 타임 스탬프 확인 2.1.7

RandomAccessFileOrArray random = 
    new RandomAccessFileOrArray(new File("temp.pdf").getAbsolutePath()); 

PdfReader reader = new PdfReader(random, null); 
AcroFields af = reader.getAcroFields(); 
ArrayList<?> names = af.getSignatureNames(); 

//this are the signatures? 
for (Object o : names){ 

    AcroFields.Item item = (Item) af.getFields().get((String)o); 

    //this is the class for verifying the signature, 
    //how do I get it from the item? 
    PdfPKCS7 pdfPKCS7 = null; //XYZ ??? 

    Calendar signingDate = pdfPKCS7.getTimeStampDate(); 
} 

,하지만 난 서명을 검증 PdfPKCS7 클래스에 도착해야합니다 지금까지이 코드에왔다. 아무도 내가 어떻게 거기에 갈 수 있을지 전혀 모른다.

답변

1

AcroFields 메서드 verifySignature(String name)을 사용하여 확인을 계속 진행하기 위해 PdfPKCS7 개체를 반환해야합니다.

그 방법의 JavaDoc을 그 사용의 예를 보여줍니다

여기
KeyStore kall = PdfPKCS7.loadCacertsKeyStore(); 
PdfReader reader = new PdfReader("my_signed_doc.pdf"); 
AcroFields af = reader.getAcroFields(); 
ArrayList names = af.getSignatureNames(); 
for (int k = 0; k < names.size(); ++k) { 
    String name = (String)names.get(k); 
    System.out.println("Signature name: " + name); 
    System.out.println("Signature covers whole document: " + af.signatureCoversWholeDocument(name)); 
    PdfPKCS7 pk = af.verifySignature(name); 
    Calendar cal = pk.getSignDate(); 
    Certificate pkc[] = pk.getCertificates(); 
    System.out.println("Subject: " + PdfPKCS7.getSubjectFields(pk.getSigningCertificate())); 
    System.out.println("Document modified: " + !pk.verify()); 
    Object fails[] = PdfPKCS7.verifyCertificates(pkc, kall, null, cal); 
    if (fails == null) 
     System.out.println("Certificates verified against the KeyStore"); 
    else 
     System.out.println("Certificate failed: " + fails[1]); 
} 

쉽게 PdfPKCS7 인스턴스를 사용하여 추가 코드를 추가 할 수 있습니다.

Ceterum Censeo ... (예 : 호환성 또는 라이센스 문제로 인해) 고대 iText 버전에 구속되지 않는 한 현재 버전으로 업데이트하는 것이 좋습니다.

+0

이전에이 솔루션을 사용했지만 컴파일되지 않았습니다. itext 버전을 다운로드하고 af.verifySignature (name)가 작동한다는 것을 알았습니다. 내가 사용했던 제 3 자 버전이 수정되었습니다. 감사. – mrcaramori