공유 캐시를 사용한 배치 서명 검증
HotPDF는 로드된 문서의 모든 서명을 세 개의 공유 캐시로 한 번에 검증할 수 있습니다. 즉 CMS 인증서 집합과 유효 검증 옵션을 키로 하는 인증서 경로 캐시, CMS blob과 /ByteRange를 키로 하는 타임스탬프 캐시, 발급자 및 일련번호를 키로 하는 THPDFRevocationEvidenceCache 증거 저장소입니다
THotPDF.ValidateLoadedSignatureBatch
문서 수준 진입점은 모든 서명 필드를 열거하고, 각 /ByteRange를 소스에 대해 바이트 검증하며, DSS 및 /VRI 증거를 수집하고, 공유 캐시로 인증서 경로 검증을 실행합니다. WorkerLimit이 1보다 크면 병렬 워커에서 경로를 평가합니다
var
Options: THPDFSignatureBatchOptions;
Result: THPDFSignatureBatchResult;
begin
PDF.LoadFromFile('Signed.pdf');
Options:= THPDFSignatureBatchOptions.Default;
Options.CertificateOptions.TrustAnchors:= MyAnchors;
Result:= PDF.ValidateLoadedSignatureBatch(Options);
if Result.AllSignaturesValid then
WriteLn('All ', Result.SignatureCount, ' signatures valid');
end;
공유 캐시
같은 서명자 체인을 반복하는 서명은 경로 판정을 다시 계산하지 않고 이전 경로 판정을 재사용합니다. 경로 캐시 키는 CMS 인증서 집합, 신뢰 앵커, 중간 인증서, 평가 순서의 모든 OCSP, CRL, delta-CRL blob, 폐지 모드, 검증 시간, 전체 정책 블록을 포함합니다. 캐시에서 주입된 증거는 vesCache 증거 소스로 태그됩니다
폐지 캐시는 배치 중 본 모든 OCSP 응답과 CRL을 발급자 DN, 일련번호, 유효 기간 창을 키로 저장하므로, 나중의 서명과 같은 THPDFRevocationEvidenceCache 인스턴스를 공유하는 나중의 배치가 증거를 다시 제공하지 않고 폐지를 해결합니다
타임스탬프 캐시는 전체 CMS 문서 타임스탬프(ETSI.RFC3161)와 내장 서명 타임스탬프 토큰에 대한 바이트 검증 판정을 메모화합니다. 내장 토큰의 캐시 히트는 THPDFCMSVerifyOptions.SkipSignatureTimestampVerification을 설정하여, 기본 CMS 서명이 여전히 완전히 검사되는 동안 토큰 재검증을 건너뜁니다
독립형 배치 엔진
THPDFSignatureValidationBatch는 소스 스트림을 소유하거나 컴포넌트 외부에서 검증하는 호출자를 위해 Info가 이미 바이트 검증 판정을 담고 있는 작업을 받습니다. FailFast는 첫 번째 부정 판정 이후 디스패치를 중단하고, THPDFCancellationToken은 남은 항목을 sbsCancelled로 남깁니다
Batch:= THPDFSignatureValidationBatch.Create(Options);
try
Batch.AddJob(Job);
Result:= Batch.Run;
finally
Batch.Free;
end;
구조화된 결과
각 항목은 서명 및 인증서 상태, 재사용한 캐시, 서명별 진단을 보고하며, HPDFSignatureBatchResultToJSON은 배치 전체를 캐시 통계와 함께 기계 판독 가능한 JSON으로 렌더링합니다