2014-01-24 48 views
0

iText 또는 다른 구성 요소를 사용하여 PDF 문서를 오프라인으로 타임 스탬프 할 수 있습니까?iText를 사용하는 오프라인 PDF 타임 스탬프

나는 iText 및 TSAClient 클래스를 사용하는 표준 솔루션을 검색해 왔지만 온라인 서비스로 TSA가 필요합니다. 우리는 타임 스탬프 시그니처를 생성하는 것을 목적으로하는 TSA (개인 키 포함)의 인증서를 가지고 있지만 iText로 기술적 인 방법을 찾을 수는 없습니다.

어떤 안내해 주셔서 감사합니다. 리치몬드

+0

PDFStamper를 보셨습니까? – epoch

+1

타임 스탬프 서버를 로컬로 설정합니다. 코드에서 온라인 타임 스탬프 서버로 사용할 수 있습니다. – mkl

+0

안녕하세요, 저는 PFDStamper를 살펴 보았지만 모든 샘플은 TSA를 온라인 서비스로 사용합니다 (TSAClient 클래스를 통해). 우리는 TSA 서버 (온라인 또는 로컬)가 없으며 해당 서버의 인증서 (개인 키 포함) 만 있습니다. – user3232054

답변

0

나는 iText를하고 TSAClient 클래스를 이용하여 표준 용액을 봤했지만 그것은 온라인 서비스로 TSA가 필요합니다.

/** 
* Time Stamp Authority client (caller) interface. 
* <p> 
* Interface used by the PdfPKCS7 digital signature builder to call 
* Time Stamp Authority providing RFC 3161 compliant time stamp token. 
* @author Martin Brunecky, 07/17/2007 
* @since 2.1.6 
*/ 
public interface TSAClient { 
    /** 
    * Get the time stamp token size estimate. 
    * Implementation must return value large enough to accomodate the entire token 
    * returned by getTimeStampToken() _prior_ to actual getTimeStampToken() call. 
    * @return an estimate of the token size 
    */ 
    public int getTokenSizeEstimate(); 

    /** 
    * Get RFC 3161 timeStampToken. 
    * Method may return null indicating that timestamp should be skipped. 
    * @param caller PdfPKCS7 - calling PdfPKCS7 instance (in case caller needs it) 
    * @param imprint byte[] - data imprint to be time-stamped 
    * @return byte[] - encoded, TSA signed data of the timeStampToken 
    * @throws Exception - TSA request failed 
    */ 
    public byte[] getTimeStampToken(PdfPKCS7 caller, byte[] imprint) throws Exception; 

} 

따라서, 당신이 할 일은 당신이 원하는 어떤 방식으로 타임 스탬프를 생성하는 인터페이스를 구현하는 것입니다 :

TSAClient 최종 클래스하지만, 단지 인터페이스가 아닙니다. 주석이 일부 온라인 서비스를 암시하는 것처럼 보일지라도 byte[] 타임 스탬프가 주어진 byte[] imprint을 스탬프하면됩니다.

그런 말처럼, 타임 스탬핑은 실제로 그 이름의 가치가 없습니다. 허용할만한 오류 범위 내에서 올바른 타임 스탬프를 작성할 수 있습니까?

따라서 기존의 TSAClient 구현은 거의 찾을 수 없습니다. 그러나 Bouncy Castle과 같은 기존의 보안 라이브러리는 타임 스탬프 요청 응답을 매우 쉽게 만들어야합니다.

+0

감사합니다. 나는 좋은 방향처럼 보인다! 분명히 타임 스탬프의 일반적인 사용법은 아니라는 점을 이해합니다. 그러나 timestamp는 타임 스탬프를 사용하는 서버의 로컬 시간을 기준으로합니다. 현재 "byte [] imprint"입력 매개 변수의 데이터에 타임 스탬프를 만드는 방법을 모릅니다. SecureBlackbox 및 Councy Castle 구현을 검토 한 후 표준 온라인 TSA를 사용하여 "온라인"구현만을 주목했습니다. 임프린트 매개 변수의 데이터에 타임 스탬프를 지정하는 방법을 안내해 주시겠습니까? – user3232054

+0

저는 BouncyCastle 전문가가 아닙니다. 근본적으로 RFC 3161을 사용할 수 있으며 거기에있는 ASN.1 정의에 따라 BC ASN.1 빌더 및 래퍼 클래스를 사용하여 타임 스탬프를 작성합니다. 이미 BC 주 도우미 클래스가 있습니다. 별도의 SO 질문에 "Bouncy Castle을 사용하여 RFC 3161 타임 스탬프를 작성하는 방법"의 라인을 따라 질문 할 수 있습니다. 즉, 타임 스탬프가 타임 스탬프를 사용하는 서버의 로컬 시간을 기반으로하는 것이 전부입니다. * ** 당신은 ** 괜찮습니다. 그러나 PDF는 조직에 남아 있습니까? 그렇지 않은 경우 ** 수취인 **이 아닐 수도 있습니다. – mkl

+0

감사합니다. 나는 이렇게 생성 된 타임 스탬프의 신뢰 문제에 대해 잘 알고 있습니다. RFC 3161에 대해 별도로 질문 할 것입니다. SecureBlackbox 구성 요소에 의한 구현 만 발견했지만 비용이 많이 듭니다. – user3232054