Enterprise 에디션
Certificate Transparency — 심층 참조
한눈에 보기
섹션 제목: “한눈에 보기”이 페이지는 NextPDF Enterprise의 Certificate Transparency(CT) 표면에 대한 심층 레퍼런스입니다. 이 표면은 하나의 불변 값 객체인 NextPDF\Enterprise\Security\CertificateTransparency\CtValidationResult 입니다. 이 객체는 X.509 서명 인증서의 Signed Certificate Timestamp(SCT) 상태를 요약합니다. SCT 확장 플래그, 전체 및 유효 SCT 개수, 그리고 발급 로그 식별자를 담습니다. 최소 SCT 임계값 검사인 정책 메서드 meetsPolicy() 하나를 노출합니다. 이 타입은 결과를 나타내며, SCT를 추출하거나 SCT 서명을 검증하거나 CT 로그에 접속하지 않습니다. 워크플로 수준의 가이드는 서명 인증서를 위한 Certificate Transparency 정책을 참고하세요.
가용성 및 라이선스
섹션 제목: “가용성 및 라이선스”이 기능은 NextPDF Enterprise(nextpdf/enterprise)에 포함되어 있으며 Enterprise 등급 라이선스 봉투로 활성화됩니다. 해당 권한이 없는 배포판은 이 기능의 클래스를 로드하지 않습니다. 에디션을 비교하고 라이선스를 받으세요.
공개 API 표면
섹션 제목: “공개 API 표면”| 심볼 | 매개변수 | 기본 동작 | 반환값 | 던지거나 실패하는 경우 | 비고 |
|---|---|---|---|---|---|
CtValidationResult | — | 인증서의 SCT 상태를 요약하는 불변 값 객체 | — | 예외를 던지지 않음 | final readonly; 생성자로 승격된 네 개의 속성은 모두 public |
CtValidationResult::__construct | bool $hasSctsExtension, int $totalScts, int $validScts, array<string> $logIds | 제공된 값을 검증이나 조정 없이 그대로 저장 | 새로운 CtValidationResult 인스턴스 | 선언된 @throws 없음; strict_types에서 인수 타입이 맞지 않으면 PHP가 TypeError를 발생시킴 | 승격된 public readonly 속성 |
CtValidationResult::meetsPolicy | int $minimumScts = 2 | 유효 SCT 개수를 임계값과 비교: validScts >= $minimumScts | bool | 예외를 던지지 않음 | 유효 SCT만 셈; 로그 고유성이나 확장 존재 여부는 검사하지 않음 |
final readonly class CtValidationResultpublic function __construct( public bool $hasSctsExtension, public int $totalScts, public int $validScts, public array $logIds,) {}public function meetsPolicy(int $minimumScts = 2): boolPublic readonly 속성
| 속성 | 타입 | 의미 |
|---|---|---|
$hasSctsExtension | bool | 인증서가 SCT 확장을 포함하는지 여부 |
$totalScts | int | 확장에서 발견된 전체 SCT 개수 |
$validScts | int | 상위 단계에서 판정된, 유효한 서명을 가진 SCT의 개수 |
$logIds | array<string> | SCT를 발급한 CT 로그의 로그 식별자(SHA-256 해시) |
동작 계약
섹션 제목: “동작 계약”CtValidationResult는 결과 값입니다. 호출자의 환경이 수행한 SCT 추출 및 검증의 결과를 나타냅니다. 인증서를 파싱하거나, SCT 서명을 검증하거나, 로그를 조회하거나, 인증서를 로그에 제출하지 않습니다.- 여기서 말하는 확장은 OID
1.3.6.1.4.1.11129.2.4.2로 식별되는 임베디드 SCT X.509v3 인증서 확장입니다 — RFC 6962 §3.3. SCT는 버전, 로그 식별자, 타임스탬프, 확장, 그리고 엔트리에 대한 로그 서명을 담습니다 — RFC 6962 §3.2. $logIds의 각 항목은 RFC 6962 §3.2에서 정의한 로그 식별자입니다: 로그 공개 키의 DER 인코딩된SubjectPublicKeyInfo에 대해 계산한 SHA-256 해시입니다. 이 타입은 제공된 문자열을 그대로 저장하며 재계산하거나 검증하지 않습니다.meetsPolicy()는 정확히 하나의 비교를 구현합니다: 유효 SCT 개수가 임계값 이상인지 여부입니다. 기본 임계값은2입니다.meetsPolicy()는$hasSctsExtension을 참조하지 않습니다. 확장이 없을 때 실패해야 하는 정책은 임계값 검사 이전 또는 함께 이 속성을 별도로 게이트합니다.meetsPolicy()는$logIds를 중복 제거하지 않습니다. 독립적인 로그에서 발급된 SCT를 요구하는 정책은$logIds자체를 통해 고유성을 검사합니다.- 생성자는 입력을 그대로 저장합니다. 범위 검사나 필드 간 일관성 검사를 수행하지 않습니다.
- 인스턴스는 불변입니다(
final readonly). 모든 읽기와 임계값 검사는 결정적이며 부작용이 없습니다. - 임계값은 운영자의 정책 선택입니다. NextPDF는 특정 숫자를 강요하지 않습니다. 패키지 소스는 하나의 생태계 참조 지점을 주석으로 달아둡니다: 2024년 기준 Chrome의 CT 정책은 수명이 180일까지인 인증서에 대해 서로 다른 로그에서 발급된 최소 두 개의 SCT를, 더 오래 사용되는 인증서에 대해서는 세 개를 기대합니다. 이는 브라우저 프로그램 정책이며 IETF 요구사항이 아닙니다.
- 의도된 배치 위치는 서명 전 게이트입니다: 서명 워크플로는 검사가 실패하면 서명자를 생성하기를 거부합니다. 그 근거는 CT 신뢰 모델을 따릅니다: SCT는 인증서를 편입하겠다는 로그의 약속이며, 신뢰 당사자는 유효한 SCT가 없는 인증서를 거부합니다 — RFC 6962 §3. CT 버전 2.0은 동일한 모델을 유지합니다: 제출을 수락한 로그는 SCT를 반환하며, 제출자는 그것을 신뢰하기 전에 검증합니다 — RFC 9162 §3.
엣지 케이스 및 실패 모드
섹션 제목: “엣지 케이스 및 실패 모드”- 0 또는 음수 임계값.
meetsPolicy(0)은 음수가 아닌 어떤$validScts에 대해서도true를 반환합니다. 이 메서드는 그 값을 거부하지 않습니다. 임계값은 최소1을 선택하세요. - 확장은 없지만 개수는 양수.
$hasSctsExtension이false이지만$validScts가 임계값을 충족하면meetsPolicy()는 여전히true를 반환합니다. 확장 부재가 실패해야 한다면 게이트가$hasSctsExtension을 명시적으로 검사해야 합니다. 기능 페이지에 이 패턴이 나와 있습니다. - 중복 로그 식별자. 단일 로그에서 발급된 N개의 유효 SCT는 N이라는 임계값을 충족합니다. 임계값 검사는 독립성에 대해 어떤 주장도 하지 않습니다. 로그 고유성 정책은
$logIds를 검사합니다. - 일관성 없는 개수.
$totalScts보다 큰$validScts, 또는 음수 개수는 제공된 대로 저장됩니다. 예외는 발생하지 않습니다. 입력 일관성은 상위 추출 단계가 담당합니다. - 검증되지 않은 로그 식별자 문자열. 이 타입은
$logIds항목에 32바이트나 16진수 형태를 강제하지 않습니다. 형식이 잘못된 식별자도 변경 없이 통과합니다. - 예외 경로 없음. 이 표면의 어떤 메서드도 유효한 PHP 타입 하에서는 예외를 던지지 않습니다. 정책 검사의 실패 모드는 예외가 아니라 거부(
false)입니다. 인수 타입이 맞지 않으면 여느 타입 지정 PHP API와 마찬가지로strict_types하에서 PHPTypeError가 발생합니다.
FIPS 모드 동작
섹션 제목: “FIPS 모드 동작”CtValidationResult는 어떤 암호 연산도 수행하지 않습니다. 다이제스트를 계산하지 않고 서명을 검증하지 않습니다. SCT 서명이 유효한 것으로 집계되었는지는 결과를 생성하기 전에 검증을 수행한 컴포넌트가 상위 단계에서 결정합니다. 따라서 보안 모듈과 함께 문서화된 Enterprise FIPS 140-3 암호 정책 프로파일은 이 타입의 동작을 바꾸지 않습니다.
적합성
섹션 제목: “적합성”| 주장 | 표준 | 조항 |
|---|---|---|
| SCT는 인증서를 편입하겠다는 로그의 약속이며, 신뢰 당사자는 유효한 SCT가 없는 인증서를 거부한다. | RFC 6962 | §3 |
| SCT는 버전, 로그 식별자, 타임스탬프, 확장, 그리고 엔트리에 대한 로그 서명을 담는다. | RFC 6962 | §3.2 |
로그 식별자는 로그 공개 키의 DER 인코딩된 SubjectPublicKeyInfo에 대한 SHA-256 해시이다. | RFC 6962 | §3.2 |
임베디드 SCT는 OID 1.3.6.1.4.1.11129.2.4.2로 식별되는 X.509v3 인증서 확장에 실린다. | RFC 6962 | §3.3 |
| CT 버전 2.0에서 제출을 수락한 로그는 SCT를 반환하며, 제출자는 그것을 신뢰하기 전에 검증한다. | RFC 9162 | §3 |
모든 조항은 의역된 것이며, NextPDF는 규범 텍스트를 재현하지 않습니다. NextPDF는 어떠한 Certificate Transparency 적합성 또는 인증 주장도 하지 않습니다. NextPDF Enterprise는 CT 로그, 감사자, 또는 모니터가 아닙니다. 인증서를 로그에 제출하지 않으며 CT 검증 결과를 단언하지 않습니다. 이 타입은 호출자의 환경이 생성한 개수와 식별자를 나타내며, 호출자가 선택한 임계값을 평가합니다. Chrome의 정책과 같은 브라우저 CT 프로그램은 IETF 규범 요구사항이 아니라 생태계 정책입니다. 그러한 정책을 선택하고 충족하는 것은 운영자의 책임입니다.
개발 노트
섹션 제목: “개발 노트”- 이 값 객체는 의존성도 I/O도 없습니다. 단위 테스트에서 인스턴스를 직접 생성하세요.
- 권장 경계 테스트: 임계값과 정확히 같은 유효 개수, 임계값보다 하나 아래, 개수는 임계값을 충족하지만 확장이 없는 경우, 그리고 고유성 정책에 대한 중복 로그 식별자.
- 이 클래스는 타입 지정된 승격 속성과 함께
strict_types=1하에서 선언됩니다. 잘못된 인수 타입은 호출자에서 PHPTypeError를 발생시킵니다. - 이 클래스는 패키지
@since주석1.0.0을 지니며 소스 문서에서 RFC 6962와 RFC 9162를 참조합니다. $logIds매개변수는array<string>으로 문서화됩니다. 정적 분석은 이 속성을 문자열 배열로 취급합니다. 결과를 생성할 때 그 형태를 유지하세요.- 상위 CT 검증과 이 임계값 게이트를 서명자 생성보다 앞에 배치하여, 로그 등록이 부족한 인증서가 절대 서명 작업에 도달하지 않게 하세요. 기능 페이지에 워크플로와 완성된 게이트 예제가 문서화되어 있습니다.
함께 보기
섹션 제목: “함께 보기”- 서명 인증서를 위한 Certificate Transparency 정책 — 기능 페이지: 워크플로, 구성, 그리고 완성된 정책 게이트.
- 보안 — NextPDF Enterprise — 통합된 Enterprise 보안 표면.
- Signature — 심층 레퍼런스 — PAdES B-LT 및 B-LTA 장기 생성기.
- 보안 / 서명 (Core) — Core CMS 서명자 및 서명 전략 계약.
- Certificate Transparency · SCT — 용어집 항목.
발행 경계
섹션 제목: “발행 경계”이 페이지는 외부에서 관측 가능한 동작과 지원되는 공개 API 표면만 문서화합니다. 내부 네임스페이스 경로, 헬퍼 클래스, 메커니즘 표, 런북 파일명, 티켓 접두사는 범위를 벗어납니다.