TPDFlibEUTSLTrustSource

安全性與簽章

描述

載入歐盟信任清單清單(LOTL)及其參照的各國信任服務清單(TSL),驗證其 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 與外部實體、套用可設定的大小限制、要求對文件根的一個內嵌簽章,並拒絕 detached 參照、重複簽章、摘要失敗、簽署者不符與領域不符

LoadLOTLFromURL 與 LoadTSLFromURL 預設要求 HTTPS,並對每個請求套用 NetworkTimeoutMS 與 MaxXMLBytes;RequireHTTPS 屬性(預設 True)控制 scheme 檢查,關閉它只適合受控的測試環境

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)狀態

狀態值區分未評估、不適用、不合格、合格憑證、合格電子簽章與合格電子印章結果,QSCD 另有獨立變體

另請參閱

TPDFlibSignatureVerifier