2014-01-08 5 views
0

Itext 5.4 및 BouncyCastle 1.49를 사용하여 PDF 서명 (Adobe Reader X를 통해 디지털 인증서에 직접 서명 한)을 확인하려고합니다.Itext로 Pdf 서명의 유효성을 검사 할 때 예기치 않은 결과가 발생했습니다.

그러나 검증 결과는 여기에, 항상 예상치 못한 내 자바 코드가있다 :

**Security.addProvider(new BouncyCastleProvider()); 
    PdfReader reader = new PdfReader("E:/signTest.pdf"); 
    AcroFields acro = reader.getAcroFields(); 
    PdfPKCS7 pkcs7 = acro.verifySignature("signatureField"); 
    System.out.println("Integrity check OK? " + pkcs7.verify());** 

콘솔 보여주는 : 무결성 확인을 확인? true

그러나 "signTest.pdf"문서를 수정했음을 기억하십시오. 예상 결과는 다음과 같아야합니다. 무결성 검사 확인? false

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

나는 어떤 제안든지에 관하여 평가할 것입니다.

답변

2

"무결성 검사 확인"(pkcs7.verify()의 결과로)은 원래 서명 된 개정판, 원래 서명 된 바이트 범위의 PDF가 변경되지 않았 음을 알려줍니다. 증분 업데이트를 사용하는 추가 모드에서 변경 사항을 적용한 경우 원래 서명 된 바이트 범위는 변경되지 않습니다.

당신도 acro.signatureCoversWholeDocument("signatureField") 검사, 변경 증분 업데이트로되었습니다 여부를 확인하려면 : 당신이 실제로 원래 부호있는 바이트 범위를 변경 않은 경우

/** 
* Checks is the signature covers the entire document or just part of it. 
* 
* @param name the signature field name 
* @return <CODE>true</CODE> if the signature covers the entire document, 
* <CODE>false</CODE> otherwise 
*/ 
public boolean signatureCoversWholeDocument(String name) 

, 전후하여 PDF를 제공하시기 바랍니다 가감. 귀하의 의견에 관한

...

나는 당신의 제안을 따라 acro.signatureCoversWholeDocument ("signatureField")을 검사 "false"로 수익을 얻는다. 그렇다면 "원래 서명 된 바이트 범위가 변경되지 않았습니다"라는 의미입니까?

당신은 그 결과 값의 조합을 고려해야한다 :

  • pkcs7.verify()

    는 지정된 서명 자체가 내부적으로 확인 여부를 나타내는 올바르게 관련 서명 사전에 표시된 바이트 범위에 서명합니다.

  • acro.signatureCoversWholeDocument("signatureField")은 표시된 서명으로 서명 된 바이트 범위가 전체 문서를 포함하는지 여부를 나타냅니다 (서명 자체는 제외하고는 분명히). 모두 결과가 true 경우

만, 서명은 긍정적으로 현재 상태에서 문서를 서명 확인됩니다. 전 하나 true이고 후자가 false 경우

는 서명 acro.extractRevision("signatureField") 양을 사용하여 문서로부터 추출 될 수있는 문서의 이전 상태에 서명을 검증한다.

Adobe Reader에서 iText는 아직 컨텐츠의 변경 사항을 확인할 수 없습니다.따라서 변경 내용이 또는 허용되지 않았는지 여부를 알 수 없습니다.

이전의 서명이 거짓 인 경우 서명이 원래 서명 한 상태 (해당 상태가 있었던 경우)는 더 이상 추출 할 수 없습니다.

그러면 서명을 적용하여 전체 문서를 어떻게 처리 할 수 ​​있습니까?

PDF에 서명하면 서명이 전체 문서를 포함합니다. 예 : 샘플 파일 signTest_after.pdf의 서명이 전체 파일을 포함합니다. 나중에 필드를 채우면 샘플 파일 signTest_modified.pdf에 새 개정판이 추가되었으므로 서명이 적용되지 않습니다. 당신이 에 PDF 서명 작업, PDF 파일의 여러 버전에 대한 자세한 내용은 this answerthis answer을 허용 는 서명 된 문서에 변경을 허용하는 방법을 알게 this answer을 읽어보십시오이에 대한 몇 가지 배경

.

iText를 일반에 통합 된 PDF 서명 작업을 위해 당신은 Digital Signatures for PDF documents, 브루노 Lowagie (iText를 소프트웨어), 서명 된 문서 특히 5 장 확인하여 백서를 연구 할 수 있습니다.

+0

안녕하세요 mkl, 답장을 보내 주셔서 감사합니다. 나는 acro.signatureCoversWholeDocument ("signatureField")를 검사 할 때 당신의 제안을 따르고 "false"를 반환합니다. "원래 서명 된 바이트 범위가 변경되지 않았습니다"라는 의미입니까? 그런 다음 서명을 적용하여 전체 문서를 어떻게 처리 할 수 ​​있습니까? 여기서 [my PDF는 수정 전후에 제공] (http://dl.vmall.com/c07q121c94). 감사합니다. –

+0

귀하의 의견에 초점을 맞춘 답변에 일부를 추가했습니다. – mkl

+0

제안과 함께 잘 작동합니다. 많이 감사합니다! –