콘텐츠로 이동
getnextpdf.com

TSA 구성

NextPDF는 PAdES B-T 이상으로 서명할 때만 타임스탬프 기관(TSA)에 연결합니다. B-B에는 타임스탬프도 네트워크 호출도 없으므로, 이 페이지는 B-B 서명에는 해당하지 않습니다.

B-T가 별도 설정 없이 동작하도록, NextPDF는 내장 기본 TSA를 함께 제공합니다. 그 기본값은 편의를 위한 것입니다. 추가 구성 없이도 타임스탬프가 포함된 서명이 성공하도록 해 줍니다. 이 기본값은 공개 신뢰 대상이 아니며 eIDAS 적격도 아니므로, 의도적인 선택 없이 프로덕션이나 규정 준수 용도로 사용하기에는 적합하지 않습니다. 이 페이지는 기본값이 정확히 무엇인지, NextPDF가 직접 운영하는 TSA를 가리키도록 하는 방법, 타임스탬프를 끄는 방법, 그리고 두 가지 업그레이드 경로를 설명합니다.

세 가지 속성은 서로 독립적이므로 혼동해서는 안 됩니다.

  • 자체 호스팅 — 누가 서버를 운영하며 그 인증서가 어느 루트로 체인되는지에 관한 것입니다.
  • 공개 신뢰 — 별도의 수동 설정 없이, 사설 루트를 직접 설치할 필요 없이, 검증 상대방이 사용하는 검증 생태계(그들의 신뢰 저장소 또는 신뢰 목록)가 이미 그 루트를 신뢰하는지 여부에 관한 것입니다. 이는 Web PKI 같은 특정 프로그램이 아니라 검증 상대방의 신뢰 앵커에 관한 것입니다.
  • eIDAS 적격 — 타임스탬프가 EU에서 적격 법적 효력을 갖는지 여부에 관한 것입니다.

함께 제공되는 기본값은 자체 호스팅일 뿐입니다. 공개 신뢰 TSA는 두 번째 속성을 더합니다. eIDAS 적격 TSA는 추가로 EU 신뢰 목록을 통해 검증되는 적격 법적 지위를 가지며, 제3자 QTSP가 운영할 수 있습니다. 세 가지 속성은 독립적입니다. 하나가 다른 하나를 함의하지 않습니다.

기본 엔드포인트는 NextPDF 자체의 RFC 3161 타임스탬프 서버인 https://timestamp.pateon.com.tw입니다. 이는 자체 호스팅입니다. 그 타임스탬프 단위 인증서는 공개 신뢰 프로그램이 아니라 사설 PATEON 루트로 체인됩니다. 따라서 검증 상대방은 그 PATEON 루트를 별도로 설치하고 신뢰하지 않는 한 기본값이 발급한 타임스탬프를 검증할 수 없습니다.

RFC 3161 토큰은 단언된 시간이 올바르다는 외부 증거를 전혀 담지 않으므로, 그런 타임스탬프에 대한 신뢰는 전적으로 발급 TSA를 신뢰하는 데 달려 있습니다 (ISO/IEC 18014-2 §7.3). 함께 제공되는 기본값의 경우 그 신뢰 앵커가 사설이며, 이것이 기본값이 규정 준수 등급이 아니라 편의 및 개발용 기본값인 이유입니다.

기본 엔드포인트가 사용 중이고 프레임워크에 로거가 구성되어 있으면, NextPDF는 프로세스 시작 시 기본값이 공개 신뢰 대상이 아님을 알리고 이 구성을 가리키는 1회성 경고를 내보냅니다. 이 경고는 정보 제공용이며, 서명은 여전히 성공합니다.

프레임워크 어댑터의 구성에서 TSA 엔드포인트를 설정하십시오. 정확한 키는 어댑터마다 다릅니다(프레임워크별 표 참조). Laravel에서는 NEXTPDF_TSA_URL 환경 변수, Symfony에서는 nextpdf.tsa.url 번들 노드, CodeIgniter에서는 nextPdf.tsa.url 환경 키입니다.

유효 TSA는 다음 우선순위에 따라 해석되며, 가장 높은 것부터입니다.

  1. 직접 구성하여 주입한 명시적 TsaClient — 항상 이것이 우선합니다.
  2. 어댑터에 구성된 URL — 클라이언트를 주입하지 않을 때 사용됩니다.
  3. 내장 기본값 — 위의 두 가지가 모두 설정되지 않은 경우에만 사용됩니다.
Terminal window
# Laravel (.env): use your own publicly-trusted TSA instead of the shipped default.
NEXTPDF_TSA_URL=http://timestamp.digicert.com

어댑터의 TSA url을 기본값(미구성) 상태로 두면 내장 기본 엔드포인트가 유지됩니다. 그 url을 빈 값으로 설정하는 것은 다릅니다. 이는 타임스탬프를 비활성화합니다. TSA가 구성되지 않은 상태에서 B-T 이상으로 요청된 서명은 조용히 B-B로 떨어지지 않고 “TSA required” 오류와 함께 fail-closed로 실패합니다.

Terminal window
# Laravel (.env):
# NEXTPDF_TSA_URL unset -> use the built-in default (timestamp succeeds against pateon).
# NEXTPDF_TSA_URL empty -> no TSA; a B-T+ request fails closed.
NEXTPDF_TSA_URL=

messageImprint 다이제스트 알고리즘 선택

섹션 제목: “messageImprint 다이제스트 알고리즘 선택”

RFC 3161 타임스탬프 요청은 타임스탬프 대상 데이터의 해시인 messageImprint를 담으며, NextPDF는 기본적으로 그 임프린트에 SHA-256을 사용합니다. 이 기본값은 의도적이고 상호 운용 가능한 선택이므로 변경할 필요가 거의 없습니다.

TsaClient를 직접 구성할 때는 imprintHashAlgorithm 생성자 매개변수를 통해 다른 임프린트 다이제스트를 선택할 수 있으며, 이 매개변수는 TsaImprintHashAlgorithm 케이스를 받습니다: Sha256(기본값), Sha384, Sha512, Sha3_256, Sha3_384, 또는 Sha3_512. 기본값은 내보내는 모든 요청을 이전 릴리스와 바이트 단위로 동일하게 유지하므로, 명시적으로 선택하지 않는 한 업그레이드해도 아무것도 바뀌지 않습니다.

use NextPDF\Security\Timestamp\TsaClient;
use NextPDF\Security\Timestamp\TsaImprintHashAlgorithm;
// Default — SHA-256 imprint, unchanged from earlier releases:
$tsa = new TsaClient('https://timestamp.example.com/tsa');
// Opt in to a stronger imprint digest:
$tsa = new TsaClient(
'https://timestamp.example.com/tsa',
imprintHashAlgorithm: TsaImprintHashAlgorithm::Sha512,
);

기본값에서 벗어나기 전에 알아 둘 만한 두 가지 제약이 있습니다.

  • 생태계 지원은 현재 SHA-256입니다. SHA-256이 아닌 임프린트는 Core 토큰 검증기와는 상호 운용되지만, nextpdf-server PAdES B-T 증명 게이트와 Premium 검증 다이제스트 맵은 현재 SHA-256 임프린트만 인식합니다. 따라서 다른 임프린트 다이제스트로 구성된 서명 타임스탬프는 아직 해당 표면들에서 B-T를 증명하지 못합니다. 타임스탬프를 사용하는 모든 소비자가 선택한 다이제스트를 수용한다고 알려진 경우가 아니라면 기본값을 유지하십시오.
  • 사전 계산된 다이제스트는 알고리즘과 일치해야 합니다. getDocumentTimestamp()는 이미 계산된 문서 해시를 받습니다. 그 해시의 길이가 구성된 임프린트 알고리즘과 일치하지 않으면, 불일치하는 요청을 보내는 대신 네트워크 호출을 하기 전에 fail-closed로 실패합니다.

개발이나 내부 용도를 넘어서는 모든 경우에는, 기본값을 더 강력한 두 가지 옵션 중 하나로 교체하십시오.

검증 상대방이 이미 신뢰하는 공개 루트로 인증서가 체인되는 TSA로 어댑터의 TSA url을 가리키십시오 — 예를 들어 http://timestamp.digicert.com입니다. 사설 루트를 배포할 필요가 없습니다. 프로덕션 등급 TSA는 일반적으로 ETSI EN 319 421 §5 같은 타임스탬프 정책에 대한 적합성을 명시하고 ETSI EN 319 422 §7에 설명된 RFC 3161 프로토콜 프로필을 따릅니다. 공개 신뢰만으로 가정하지 말고 운영자가 발행한 정책과 대조하여 이를 확인하십시오.

유럽 연합에서 적격 법적 효력을 가져야 하는 타임스탬프의 경우, EU 신뢰 목록에 등재된 적격 신뢰 서비스 제공자(QTSP)의 적격 타임스탬프 서비스를 사용하십시오. 적격 전자 타임스탬프는 탐지되지 않는 변경을 합리적으로 방지할 수 있도록 시간을 데이터에 바인딩하고, 협정 세계시(UTC)에 연결된 정확한 시간 소스를 기반으로 하며, QTSP의 고급 전자 서명이나 고급 전자 봉인, 또는 그에 상응하는 방법으로 보호됩니다(Regulation (EU) 910/2014, Art 42). 이는 가장 강력한 옵션이며, 규정이 적격 타임스탬프를 명시적으로 지정할 때 선택해야 하는 것입니다.

기본값은 코어 엔진이 아니라 각 프레임워크 어댑터의 구성에 존재합니다. 코어는 URL을 결코 만들어 내지 않습니다. 직접 구성하는 TsaClient는 명시적 엔드포인트를 요구하며, 비어 있으면 예외를 던집니다. 장기 레벨(B-LT 및 B-LTA)은 B-T와 동일하게 구성된 TSA를 재사용합니다.

통합기본값이 존재하는 위치재정의 방법
Laravelconfig/nextpdf.php -> tsa.url.env에서 NEXTPDF_TSA_URL 설정
Symfony번들 구성 nextpdf.tsa.url노드를 설정하거나 환경 변수에 바인딩
CodeIgniterConfig\NextPdf::$tsa['url']nextPdf.tsa.url 환경 키로 재정의
Plain core암묵적 기본값 없음명시적 URL과 강화된 PSR-18 클라이언트로 TsaClient 구성

모든 어댑터에서 B-B는 결코 TSA 클라이언트를 구성하지 않으므로, 타임스탬프가 없는 서명은 이 구성 전체의 영향을 받지 않습니다.

타임스탬프의 가치는 바이트 자체가 아니라 그 뒤의 신뢰 체인입니다. RFC 3161 토큰은 시간만 단언할 뿐이며, 그 단언이 믿을 만한지는 그것에 서명한 TSA의 속성입니다(RFC 3161 §2; ISO/IEC 18014-2 §7.3). 함께 제공되는 기본값을 유지한다면, 자체 호스팅 사설 신뢰 앵커를 선택하는 것입니다 — 모든 검증 상대방이 PATEON 루트를 설치할 수 있는 개발 및 내부 워크플로에는 적합하지만, 제3자가 검증하는 문서에는 적합하지 않습니다. 그런 경우에는 공개 신뢰 TSA로, 또는 적격 법적 효력이 요구될 때는 eIDAS 적격 TSA로 이동하십시오.

기본값을 직접 운영한다면, 직접 주입한 PSR-18 클라이언트에서 TSA의 공개 키를 고정할 수 있습니다. 함께 제공되는 기본값을 공유 코드에서 고정하지 마십시오. 운영자 측의 키 교체가 그러면 모든 기본값 사용자를 한꺼번에 망가뜨릴 것이기 때문입니다. 타임스탬프의 신뢰는 전송 고정이 아니라 인증서 체인과 PATEON 루트입니다.