TPDFlibEUTSLTrustSource

Безопасность и подписи

Описание

Загружает список ЕС из доверенных списков и указанные в нем национальные списки доверенных служб, проверяет их подписи 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

Каждый национальный 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 и внешние сущности, применяет настраиваемый предел размера, требует одну конвертную подпись над корнем документа и отклоняет отсоединенные ссылки, дублирующиеся подписи, ошибки дайджеста, несовпадения подписывающего и несовпадения территории

Загрузка XML отключает DTD и внешние сущности, применяет настраиваемый лимит размера, требует одну обёртывающую подпись над корнем документа и отклоняет отсоединённые ссылки, дублирующиеся подписи, сбои дайджеста, несовпадения подписанта и несовпадения территории LoadLOTLFromURL и LoadTSLFromURL по умолчанию требуют HTTPS и применяют NetworkTimeoutMS и MaxXMLBytes к каждому запросу; свойство RequireHTTPS (по умолчанию True) управляет проверкой схемы, а его отключение предназначено только для контролируемых тестовых сред

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

Информация службы раскрывает текущие имя, тип, статус службы, время начала статуса, число сертификатов и число записей истории

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) и TPDFlibSignatureQualificationReport — два хука, которые верификатор вызывает у источника: первый возвращает закодированные в DER якоря служб, доверенных в запрошенное время, второй классифицирует проверенную цепочку в

Верификатор объединяет якоря источника с любыми ручными пользовательскими якорями в одном эксклюзивном движке цепочек и кэширует этот движок по редакции источника и времени проверки

Когда источник назначен и ни он, ни ручной набор не поставляют якорь, проверка отказывает в закрытом режиме вместо отката к системным корням Windows

Отчет о квалификации

TPDFlibSignatureChainReport.QualificationReport возвращает TPDFlibSignatureQualificationReport после оценки действительной цепочки

Отчет идентифицирует территорию службы, имя, тип, статус, время начала статуса, примененные квалификаторы, назначение сертификата, статус квалификации и статус устройства создания квалифицированных подписей

Значения статуса различают не оценено, неприменимо, не квалифицировано, квалифицированный сертификат, квалифицированная электронная подпись и квалифицированная электронная печать, с отдельными вариантами QSCD

См. также

TPDFlibSignatureVerifier