2013-03-22 6 views
0

Itext 5와 BouncyCastle 1.48을 사용하여 PDF 서명의 유효성을 검사하려고합니다. 내 코드는 많은 서명 된 pdf에서 작동하지만 특정 고객의 일부 pdf에서는 작동합니다.Itext를 사용하여 Pdf 서명의 유효성을 검사 할 때 오류가 발생했습니다.

java.lang.IllegalArgumentException가 : 여기 내 자바 코드

// The entry point 
public static void verifySignatures(String path) throws IOException, GeneralSecurityException { 
    System.out.println(path); 
    PdfReader reader = new PdfReader(path); 
    AcroFields fields = reader.getAcroFields(); 
    ArrayList<String> names = fields.getSignatureNames(); 
    System.out.println("Il y a "+names.size()+" signatures"); 
    for (String name : names) { 
     System.out.println("===== " + name + " ====="); 
     verifySignature(fields, name); 
    } 
    System.out.println(); 
} 

public static PdfPKCS7 verifySignature(AcroFields fields, String name) 
     throws GeneralSecurityException, IOException { 
    System.out.println("Signature covers whole document: "+ fields.signatureCoversWholeDocument(name)); 
    System.out.println("Document revision: " + fields.getRevision(name) 
      + " of " + fields.getTotalRevisions()); 
    PdfPKCS7 pkcs7 = fields.verifySignature(name); 
    System.out.println("Integrity check OK? " + pkcs7.verify()); 
    return pkcs7; 
} 

이다 때때로 나는이 예외를 얻을의 getInstance에 알 수없는 물체가 : org.bouncycastle.asn1.ASN1Sequence에서 을 org.bouncycastle.asn1.ASN1Enumerated org.bouncycastle.asn1.ocsp.BasicOCSPResponse에서 org.bouncycastle.asn1.ocsp.ResponseData.getInstance (알 소스)에 .getInstance (알 소스) . (알 소스)에 org.bouncycastle.asn1.ocsp.BasicOCSPResponse .getInstance (알 수없는 소스) at com.i com.itextpdf.text.pdf.AcroFields에서 textpdf.text.pdf.security.PdfPKCS7.findOcsp com.itextpdf.text.pdf.security.PdfPKCS7에서 (PdfPKCS7.java:1284) . (PdfPKCS7.java:382) .verify 시그니처 (AcroFields.java:2317)

누구도이 문제를 해결해야합니까?

+0

예외는 OCSP 검사에 대한 응답 처리시 문제가 있음을 나타냅니다 (인증서가 취소되지 않았는지 확인하기 위해 - 일반적으로 HTTP 요청을 통해 검사가 수행됩니다). 특정 고객의 인증서에만 해당되는 경우 해당 인증서는 AuthorityInformationAccess 확장의 URI를 통해 특정 OCSP 응답자를 지정하고 해당 응답자는 어떤 방식 으로든 결함이 있거나 해당 URI에서 실제로 사용할 수 없습니다. –

+0

이 동작을 보여주는 샘플 문서를 제공하십시오. – mkl

+0

의견을 보내 주셔서 감사합니다. 그 점을 확인하겠습니다. – jeremp

답변

0

나는 잘못되어 가고있는 것을 발견 할 수있었습니다.

BouncyCastle 라이브러리간에 충돌이있었습니다. Grails (프레임 워크)가 다른 버전의 Bouncycastle을 포함하고 있음을 발견했습니다.

나는 나의 BuildConfig.groovy

// inherit Grails' default dependencies 
    inherits("global") { 
     excludes 'bcprov-jdk15', 'bcpg-jdk15', 'bcmail-jdk15' 
    } 

에서 양태에서는 단지를 제외 ... 그리고 그것은 작동합니다.

관련 문제