TPDFlibEUTSLTrustSource

Güvenlik ve imzalar

Açıklama

Bir AB güvenilen listeler listesini (LOTL) ve onun atıfta bulunduğu ulusal güvenilen hizmet listelerini yükler, XML imzalarını doğrular ve zamana duyarlı güven çıpalarını TPDFlibSignatureVerifier'a sağlar

Kaynak ayrıca nitelikli sertifika ifadelerini, güvenilen hizmet niteleyicilerini, nitelik ölçütlerini, hizmet kapsam uzantılarını ve hizmet geçmişini değerlendirerek eIDAS altındaki nitelikli elektronik imza ve mühürleri sınıflandırır

Birim

PDFlibEUTSL

Güven önyüklemesi

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

Bir uygulama, bir LOTL yüklemeden önce bağımsız olarak güvenilen en az bir LOTL imzalama sertifikasını sabitlemelidir

Clear yüklenmiş LOTL'yi ve her ulusal TSL anlık görüntüsünü, bunların işaretçilerini, hizmetlerini ve tanısal durumunu, sabitlenmiş LOTL imzalama sertifikalarına dokunmadan atar; örnek bundan sonra yeni bir anlık görüntü yüklemeye hazırdır

XML KeyInfo içinde gömülü imzalama sertifikası, sabitlenmiş bir sertifika ile bayt bayt eşleşmelidir; böylece kendini imzalayıcı ilan eden biri kendi güvenini kuramaz

Her ulusal TSL sırayla, eşleşen ve halihazırda doğrulanmış LOTL işaretçisinin taşıdığı bir sertifika ile imzalanmış olmalıdır

Güvenilir listelerin yüklenmesi

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 yükleme DTD'leri ve dış varlıkları devre dışı bırakır, yapılandırılabilir bir boyut sınırı uygular, belge kökü üzerinde bir zarflı imza ister ve ayrık başvuruları, yinelenen imzaları, özet başarısızlıklarını, imzalayan uyuşmazlıklarını ve bölge uyuşmazlıklarını reddeder

LoadLOTLFromURL ve LoadTSLFromURL varsayılan olarak HTTPS ister ve her isteğe NetworkTimeoutMS ile MaxXMLBytes'i uygular; RequireHTTPS özelliği (varsayılan True) şema denetimini yönetir ve onu kapatmak yalnızca denetimli test ortamları içindir

RefreshAllTSLs etkin hizmet kümesini değiştirmeden önce her güncel işaretçiyi indirir ve doğrular; böylece kısmi bir ağ veya imza başarısızlığı önceki doğrulanmış anlık görüntüyü korur

Süresi dolmuş LOTL ve TSL anlık görüntüleri varsayılan olarak kapalı kalarak başarısız olur ve NextUpdate zamanlarından sonra kullanılamaz kalır; AllowExpiredLists yalnızca denetimli arşivleme veya tanısal iş akışları için sunulur

İnceleme

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;

İşaretçi bilgisi bölgeyi, konumu, MIME türünü ve izin verilen TSL imzalayıcı sayısını açığa çıkarır

Hizmet bilgisi geçerli hizmet adını, türünü, durumunu, durum başlangıç zamanını, sertifika sayısını ve geçmiş sayısını açığa çıkarır

GetLOTLLocation, GetLOTLNextUpdate, GetRevision ve GetLastError anlık görüntü ve tanısal durumu açığa çıkarır

İmza doğrulama

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 sahiplik içermeyen bir başvuru saklar; böylece kaynak, ayrılana veya doğrulayıcı yok edilene dek canlı kalmalıdır

GetTrustAnchors(VerificationTime, Certificates) ve EvaluateCertificateChain(Certificates, VerificationTime, Report), doğrulayıcının kaynakta çağırdığı iki kanca'dır: ilki istenen zamanda güvenilen hizmetlerin DER kodlu çıpalarını döndürür, ikincisi doğrulanmış bir zinciri o andaki güncel hizmet kümesini kullanarak bir TPDFlibSignatureQualificationReport'a sınıflandırır; uygulamalar bunları normalde doğrudan değil, doğrulayıcı üzerinden dolaylı çağırır

Doğrulayıcı, kaynak çıpalarını varsa el ile özel çıpalarla tek bir münhasır zincir motorunda birleştirir ve o motoru kaynak revizyonu ile doğrulama zamanına göre önbelleğe alır

Bir kaynak atandığında ve ne o ne de el ile küme bir çıpa sağlamadığında doğrulama, Windows sistem köklerine düşmek yerine kapalı kalarak başarısız olur

Nitelendirme raporu

Geçerli bir zincir değerlendirildikten sonra TPDFlibSignatureChainReport.QualificationReport, bir TPDFlibSignatureQualificationReport döndürür

Rapor; hizmet bölgesini, adını, türünü, durumunu, durum başlangıç zamanını, uygulanan niteleyicileri, sertifika amacını, nitelik durumunu ve nitelikli imza oluşturma aygıtı durumunu tanımlar

Durum değerleri; değerlendirilmedi, uygulanamaz, niteliksiz, nitelikli sertifika, nitelikli elektronik imza ve nitelikli elektronik mühür sonuçlarını ayırt eder; QSCD varyantları ayrı tutulur

Ayrıca bkz

TPDFlibSignatureVerifier