TPDFlibEUTSLTrustSource

Segurança e assinaturas

Descrição

Carrega uma lista da UE de listas confiáveis e as listas nacionais de serviços confiáveis referenciadas por ela, verifica suas assinaturas XML e fornece âncoras de confiança conscientes do tempo à TPDFlibSignatureVerifier

A origem também avalia declarações de certificados qualificados, qualificadores de serviços confiáveis, critérios de qualificação, extensões de escopo de serviço e histórico de serviços para classificar assinaturas e selos eletrônicos qualificados sob o eIDAS

Unidade

PDFlibEUTSL

Inicialização da confiança

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

Um aplicativo deve fixar pelo menos um certificado de assinatura LOTL independentemente confiável antes de carregar um LOTL

Clear descarta o LOTL carregado e cada snapshot TSL nacional, seus ponteiros, serviços e estado de diagnóstico, sem tocar nos certificados de assinatura LOTL fixados; a instância fica então pronta para carregar um snapshot novo O certificado de assinatura embutido no

O certificado de assinatura embutido no KeyInfo XML deve corresponder byte a byte a um certificado fixado, então um signatário autodeclarado não pode estabelecer a própria confiança

Cada TSL nacional deve, por sua vez, ser assinada por um certificado transportado no ponteiro LOTL correspondente, já verificado

Carregamento de listas confiáveis

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;

O carregamento XML desabilita DTDs e entidades externas, aplica um limite de tamanho configurável, exige uma assinatura envelopada sobre a raiz do documento e rejeita referências detached, assinaturas duplicadas, falhas de digest, divergências de signatário e divergências de território

LoadLOTLFromURL e LoadTSLFromURL exigem HTTPS por padrão e aplicam NetworkTimeoutMS e MaxXMLBytes a cada requisição; a propriedade RequireHTTPS (padrão True) controla a verificação de esquema, e desativá-la destina-se apenas a ambientes de teste controlados

RefreshAllTSLs baixa e valida cada ponteiro atual antes de substituir o conjunto de serviços ativo, então uma falha parcial de rede ou de assinatura preserva o snapshot verificado anterior

Snapshots LOTL e TSL expirados falham fechando por padrão e permanecem inutilizáveis depois do horário de NextUpdate; AllowExpiredLists está disponível apenas para workflows controlados de arquivamento ou diagnóstico

Inspeção

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;

Informações de ponteiro expõem território, localização, tipo MIME e contagem de signatários TSL permitidos

Informações de serviço expõem o nome, tipo, status, horário de início do status, contagem de certificados e contagem de histórico do serviço atual

GetLOTLLocation, GetLOTLNextUpdate, GetRevision e GetLastError expõem o estado do snapshot e de diagnóstico

Verificação de assinatura

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 armazena uma referência sem posse, então a origem deve permanecer viva até ser desanexada ou o verificador ser destruído

GetTrustAnchors(VerificationTime, Certificates) armazena uma referência não proprietária, de modo que a fonte deve permanecer viva até ser desanexada ou o verificador ser destruído EvaluateCertificateChain(Certificates, VerificationTime, Report) e TPDFlibSignatureQualificationReport são os dois ganchos que o verificador invoca na fonte: o primeiro retorna as âncoras codificadas em DER dos serviços confiáveis no horário solicitado, o segundo classifica uma cadeia validada em um

O verificador combina âncoras da origem com quaisquer âncoras personalizadas manuais em um único motor de cadeias exclusivo e coloca esse motor em cache por revisão da origem e horário de verificação

Quando uma origem é atribuída e nem ela nem o conjunto manual fornecem uma âncora, a verificação falha fechando em vez de recuar para as raízes do sistema Windows

Relatório de qualificação

TPDFlibSignatureChainReport.QualificationReport retorna TPDFlibSignatureQualificationReport depois de uma cadeia válida ser avaliada

O relatório identifica o território do serviço, nome, tipo, status, horário de início do status, qualificadores aplicados, finalidade do certificado, status de qualificação e status do dispositivo de criação de assinaturas qualificadas

Os valores de status distinguem resultados de não avaliado, não aplicável, não qualificado, certificado qualificado, assinatura eletrônica qualificada e selo eletrônico qualificado, com variantes QSCD separadas

Veja também

TPDFlibSignatureVerifier