TPDFlibEUTSLTrustSource

보안 및 서명

설명

EU 신뢰 목록(LOTL)과 그것이 참조하는 각국 신뢰 서비스 목록을 로드하고, 그 XML 서명을 검증하며, 시간을 인식하는 트러스트 앵커를 TPDFlibSignatureVerifier에 공급합니다

이 소스는 또한 적격 인증서 진술, 신뢰 서비스 한정자, 적격성 기준, 서비스 범위 확장, 서비스 이력을 평가해 eIDAS 아래 적격 전자 서명과 적격 전자 인장을 분류합니다

단위

PDFlibEUTSL

신뢰 부트스트랩

Function AddLOTLSigningCertificateDER(
  Const CertificateDER: AnsiString): Boolean;
Function AddLOTLSigningCertificateFromFile(
  Const CertificateFile: WideString): Boolean;
Procedure ClearLOTLSigningCertificates;
Procedure Clear;

애플리케이션은 LOTL을 로드하기 전에 독립적으로 신뢰되는 LOTL 서명 인증서를 하나 이상 고정해야 합니다

Clear는 로드된 LOTL과 모든 국가별 TSL 스냅샷, 그 포인터, 서비스, 진단 상태를, 고정된 LOTL 서명 인증서는 건드리지 않고 버립니다. 이후 인스턴스는 새 스냅샷을 로드할 준비가 됩니다

XML KeyInfo에 내장된 서명 인증서는 고정된 인증서와 바이트 단위로 일치해야 하므로, 자칭 서명자가 스스로의 신뢰를 세울 수 없습니다

각 국가별 TSL은 차례로, 일치하며 이미 검증된 LOTL 포인터가 실은 인증서로 서명되어야 합니다

신뢰 목록 로딩

Function LoadLOTLFromString(Const XMLData: AnsiString): Boolean;
Function LoadLOTLFromFile(Const FileName: WideString): Boolean;
Function LoadLOTLFromURL(Const URL: WideString): Boolean;
Function LoadTSLFromString(PointerIndex: Integer;
  Const XMLData: AnsiString): Boolean;
Function LoadTSLFromFile(PointerIndex: Integer;
  Const FileName: WideString): Boolean;
Function LoadTSLFromURL(PointerIndex: Integer): Boolean;
Function RefreshAllTSLs: Integer;

XML 로딩은 DTD와 외부 개체를 비활성화하고, 구성 가능한 크기 한도를 적용하며, 문서 루트에 대한 하나의 봉입 서명을 요구하고, 분리 참조, 중복 서명, 다이제스트 실패, 서명자 불일치, 영역 불일치를 거부합니다

LoadLOTLFromURL과 LoadTSLFromURL은 기본으로 HTTPS를 요구하며 각 요청에 NetworkTimeoutMS와 MaxXMLBytes를 적용합니다. RequireHTTPS 속성(기본 True)이 스킴 검사를 제어하며, 끄는 것은 통제된 테스트 환경만을 위한 것입니다

RefreshAllTSLs는 활성 서비스 집합을 교체하기 전에 모든 현재 포인터를 내려받아 검증하므로, 부분적인 네트워크나 서명 실패는 이전 검증 스냅샷을 보존합니다

만료된 LOTL과 TSL 스냅샷은 기본으로 폐쇄적으로 실패하며 NextUpdate 시각 이후에도 쓸 수 없습니다. AllowExpiredLists는 통제된 아카이브나 진단 워크플로에만 제공됩니다

검사

Function GetPointerCount: Integer;
Function GetPointerInfo(Index: Integer;
  Out Info: TPDFlibEUTSLPointerInfo): Boolean;
Function GetPointerSigningCertificateDER(PointerIndex,
  CertificateIndex: Integer; Out CertificateDER: AnsiString): Boolean;
Function GetServiceCount: Integer;
Function GetServiceInfo(Index: Integer;
  Out Info: TPDFlibEUTSLServiceInfo): Boolean;
Function GetServiceCertificateDER(ServiceIndex, CertificateIndex: Integer;
  VerificationTime: TDateTime;
  Out CertificateDER: AnsiString): Boolean;

포인터 정보는 영역, 위치, MIME 유형, 허용된 TSL 서명자 수를 노출합니다

서비스 정보는 현재 서비스 이름, 유형, 상태, 상태 시작 시각, 인증서 수, 이력 수를 노출합니다

GetLOTLLocation, GetLOTLNextUpdate, GetRevision, GetLastError가 스냅샷과 진단 상태를 노출합니다

서명 검증

var
  TrustSource: TPDFlibEUTSLTrustSource;
  ChainReport: TPDFlibSignatureChainReport;
begin
  TrustSource:= TPDFlibEUTSLTrustSource.Create;
  try
    TrustSource.AddLOTLSigningCertificateFromFile('EU-LOTL-Signer.cer');
    if not TrustSource.LoadLOTLFromURL(LOTLURL) then
      raise Exception.Create(String(TrustSource.GetLastError));
    if TrustSource.RefreshAllTSLs<> TrustSource.GetPointerCount then
      raise Exception.Create(String(TrustSource.GetLastError));

    Verifier.SetTrustSource(TrustSource);
    try
      Result:= Verifier.VerifySignerCertificateChainEx(
        0, 0, srmOnline, 0, ChainReport);
    finally
      Verifier.SetTrustSource(nil);
    end;
  finally
    TrustSource.Free;
  end;
end;

SetTrustSource는 비소유 참조를 저장하므로, 소스는 분리되거나 검증자가 파괴될 때까지 살아 있어야 합니다

GetTrustAnchors(VerificationTime, Certificates)와 EvaluateCertificateChain(Certificates, VerificationTime, Report)이 검증자가 소스에 호출하는 두 훅입니다. 첫째는 요청 시각에 신뢰되는 서비스의 DER 인코딩 앵커를 반환하고, 둘째는 검증된 체인을 그 시각 기준 현재 서비스 집합으로 TPDFlibSignatureQualificationReport에 분류합니다. 애플리케이션은 보통 직접이 아니라 검증자를 통해 간접 호출합니다

검증자는 소스 앵커와 수동 커스텀 앵커를 하나의 배타적 체인 엔진에 결합하고 그 엔진을 소스 리비전과 검증 시각으로 캐시합니다

소스가 할당되었는데 그것도 수동 집합도 앵커를 공급하지 않으면, 검증은 Windows 시스템 루트로 폴백하는 대신 폐쇄적으로 실패합니다

적격성 보고서

유효한 체인이 평가된 후 TPDFlibSignatureChainReport.QualificationReport가 TPDFlibSignatureQualificationReport를 반환합니다

보고서는 서비스 영역, 이름, 유형, 상태, 상태 시작 시각, 적용된 한정자, 인증서 용도, 적격 상태, 적격 서명 생성 장치 상태를 식별합니다

상태 값은 평가 안 됨, 적용 대상 아님, 비적격, 적격 인증서, 적격 전자 서명, 적격 전자 인장 결과를 구별하며 QSCD 변형은 별도입니다

참고 항목

TPDFlibSignatureVerifier