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