문서 타임스탬프
문서 타임스탬프(DTS)는 신뢰기관(TSA)이 “이 문서가 이 시각에 존재했다”를 암호학적으로 증명하는 서명입니다. 사람 서명과 달리 인증서 주체가 TSA이며, 문서 전체를 대상으로 합니다. 전부 서버에서 처리됩니다. getTimeStamper()로 사용합니다.
1.사용 (Java)
두 단계입니다. ① 타임스탬프용 서명 필드 생성, ② TSA 토큰을 받아 주입, 저장. TSA 연동은 콜백으로 위임됩니다. 어느 기관을 쓸지, RFC 3161 요청을 어떻게 보낼지는 사용처가 준비하며, CoreDocs는 콜백이 돌려준 토큰(TST)만 문서에 주입합니다.
JAVA문서 타임스탬프 추가
@GetMapping("/document/{name}/documenttimestamp/add")
public Document addDocumentTimeStamp(@PathVariable String name) throws IOException {
Document document = Document.loadFromPDF(pdfPath.resolve(name));
// 1) 타임스탬프용 SignatureField 생성 (이름 자동 부여. 직접 지정도 가능)
SignatureField signatureField = document.getTimeStamper().createDocumentTimeStampSignatureField();
// 2) TSA에서 토큰을 받아 주입 후 저장
// 콜백: 서명 대상 원문(InputStream)을 받아 타임스탬프 토큰(TST, byte[])을 반환
document.getTimeStamper().addDocumentTimeStamp(
signatureField,
false, // lock: true면 모든 필드를 읽기전용으로 잠금
(signingContent) -> {
return tsaClient.requestToken(signingContent); // RFC 3161 요청
},
pdfPath.resolve(name), // 저장 경로
cachePath.resolve(name), // 이미지 cache 경로 (없으면 null)
true); // close: 저장 후 문서 닫기
return document;
}2.API
| 메서드 | 설명 |
|---|---|
createDocumentTimeStampSignatureField() | DTS용 SignatureField 생성 (이름 자동, 첫 페이지에 크기 0 위젯). 이름 직접 지정 오버로드 있음. 중복이면 IllegalArgumentException |
addDocumentTimeStamp(field, lock, 콜백, path, cachePath, close) | 콜백으로 TSA 토큰을 받아 주입 후 증분 저장. lock=true면 모든 필드 읽기전용 잠금 |
• 참고
콜백이 받는 것은 해시가 아니라 서명 대상 원문(InputStream)입니다. 해시 계산은 TSA 클라이언트(RFC 3161 요청부)가 수행합니다. lock=true로 잠근 문서는 Acrobat에서는 읽기전용으로 표시되지만, 일부 브라우저 내장 PDF 뷰어는 잠금 표시를 지원하지 않을 수 있습니다.
3.예외
| 예외 | 발생 조건 |
|---|---|
IllegalArgumentException | 지정한 필드 이름이 이미 존재 |
RuntimeException("Invalid license") | 라이선스 무효 |
IOException | 저장 실패. 원본 파일은 보존됨 |