TPDFlibEUTSLTrustSource

安全和签名

描述

加载欧盟受信任列表的列表(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 和外部实体、应用可配置的大小限制、要求对文档根有一个封装签名,并拒绝分离引用、重复签名、摘要失败、签名者不匹配和地域不匹配 LoadLOTLFromURLLoadTSLFromURL 默认要求 HTTPS,并对每个请求应用 NetworkTimeoutMSMaxXMLBytesRequireHTTPS 属性(默认 True)控制 scheme 检查,关闭它仅用于受控的测试环境

RefreshAllTSLs

NextUpdate 在替换活动服务集合之前会下载并验证每个当前指针,因此部分网络或签名失败会保留先前已验证的快照 过期的 LOTL 和 TSL 快照默认采取失败关闭策略,在其 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 签名者数量 服务信息公开当前服务名称、类型、状态、状态起始时间、证书数量和历史数量 GetLOTLLocationGetLOTLNextUpdateGetRevisionGetLastError 公开快照与诊断状态

签名验证

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)TPDFlibSignatureQualificationReport 是验证器在源上调用的两个挂钩:前者返回在请求时间受信任服务的 DER 编码锚,后者使用当时当前的服务集合把已验证的链分类到

资质报告

在有效链被评估之后,TPDFlibSignatureChainReport.QualificationReport 返回 TPDFlibSignatureQualificationReport 该报告标识服务地域、名称、类型、状态、状态起始时间、应用的限定符、证书用途、合格状态以及合格签名创建设备状态 状态值区分未评估、不适用、不合格、合格证书、合格电子签名和合格电子印章结果,并带有单独的 QSCD 变体

另请参阅

TPDFlibSignatureVerifier