PDF, ki ste ga pravkar podpisali, je podpis B-B in nič več. Dokazuje, kdo je podpisal, in da se bajti niso premaknili, ne nosi pa dokaza, da je bilo certifikat podpisnika veljaven ob času podpisovanja, zato mora validator leta od zdaj iti iskat podatke o preklicu, ki morda ne obstajajo več. Zapiranje te vrzeli pomeni pisanje odgovorov OCSP in CRL v varnostno shrambo dokumenta na ravni dokumenta, v HotPDF pa je to en klic: PopulatePAdESLTVEvidence prehodi vsak naložen podpis, izpelje zahteve po preklicu iz nabora certifikatov, izvede jih skozi transport, ki ga preskrbite, in zapiše pridobljeno gradivo plus verigo CMS v DSS. Vrne število podpisov, katerih dokazila so pristala, ali minus ena, ko dokument sploh nima polja podpisa
Odločitev zasnove, vredna razumevanja, preden jo uporabite, je, da knjižnica nikoli ne odpre vtičnice. Vsak bajt, ki prispe iz omrežja, prispe skozi povratni klic, ki ste ga napisali. To ni previdnost sama sebi namen; to je edini način, kako lahko ta funkcija deluje znotraj okolij, ki dejansko zahtevajo dolgoročno validacijo
Zakaj knjižnica odkloni lasten HTTP?
Ker so mesta, ki zahtevajo podpise B-LT, mesta, kjer knjižnici ni mogoče zaupati z omrežjem. Podpisovalne storitve tečejo za overjajočimi posredniki s koreninami podjetja. Podpisovalne plasti v brezzračni reži (air-gapped) nimajo poti do odgovornega in jih je treba hraniti s predpomnjenimi dokazili. Režimi revizije zahtevajo, da vsako odhodno zahtevo zapiše aplikacija in ne zakopana v odvisnost. In testne zbirke potrebujejo deterministične odgovore, kar je nemogoče, če knjižnica klice ven sama
Transport je običajna referenca funkcije s fiksno obliko, zato politika ostane vaša. HotPDF vam izroči zapis zahteve, ki opisuje natanko, kaj pridobiti, vključno s tipom vsebine in omejitvijo velikosti odgovora, vi pa vrnete bajte plus stanje
function FetchEvidence(const Request: THPDFSignatureEvidenceRequest;
Attempt: Integer; CancellationToken: THPDFCancellationToken;
out Response: TBytes; out RetryAfterMS: Cardinal;
out ErrorMessage: UnicodeString): THPDFSignatureEvidenceTransportStatus;
begin
RetryAfterMS := 0;
try
// Request.Kind pove, ali je to OCSP POST ali CRL GET;
// Request.ContentType in Request.Body sta že pripravljena,
// Request.MaxResponseBytes pa je omejitev, ki jo morate upoštevati
Response := HttpExchange(Request.URI, Request.ContentType,
Request.Body, Request.MaxResponseBytes);
Result := setsSucceeded;
except
on E: Exception do
begin
ErrorMessage := E.Message;
// setsRetry pusti politiko ponovitve odstopiti; uporabite
// setsPermanentFailure za 404 ali slab URL
Result := setsRetry;
end;
end;
end;
// Nadgradnja B-B v B-LT z enim klicem za vsak podpis v naloženi datoteki
var
Pdf: THotPDF;
Upgraded: Integer;
begin
Pdf := THotPDF.Create(nil);
try
Pdf.BeginIncrementalUpdate('signed.pdf');
Upgraded := Pdf.PopulatePAdESLTVEvidence(FetchEvidence,
THPDFSignatureEvidenceRetryPolicy.Default);
if Upgraded > 0 then
// Samo-pripeto shranjevanje: bajti, ki jih obstoječi podpisi
// pokrivajo, so ohranjeni dobesedno
Pdf.SaveIncrementalUpdate('signed-lt.pdf');
finally
Pdf.Free;
end;
end;
Odpovedi so na podpis in ne na dokument. Odgovorni, ki mu zteče čas za enega podpisnika, preskoči gradivo tega podpisnika in pusti preostanek prehoda nedotaknjen, kar je vedenje, ki ga želite v paketu: delna dokazila premagajo prekinjen tek, povratna vrednost pa vam pove, koliko podpisov se je dejansko izboljšalo
Veriga, ki je CMS pozabil vključiti
Preverjanje preklica potrebuje certifikat izdajatelja in presenetljivo število podpisovalnih skladi izpusti vmesne iz CMS vsebnika. Pot okrevanja je razširitev Authority Information Access, metoda dostopa 1.3.6.1.5.5.7.48.2, ki oglašuje URL, kjer je certifikat izdajatelja mogoče prenesti. HPDFFetchAIAIntermediates prehodi te URL-je skozi isti transport, razčleni DER iz vsakega odgovora in vrne samo certifikate, ki jih CMS ni že nosil, ključane po DER zgostitvi, tako da podvojitve in zanke ne morejo vrten
Dve podrobnosti odločita, ali to deluje proti pravim certifikacijskim avtoritetam. Prva je kodiranje: končne točke CA strežejo certifikat kot goli DER približno enako pogosto, kot ga strežejo PEM oklepljenega, in ni zanesljivega tipa vsebine za razlikovanje. Trdna sonda je besedilna, nato strukturna. Poiščite oznako -----BEGIN CERTIFICATE-----, odstranite oklep in dekodirajte base64, če je prisoten, in na obeh poteh potrdite, da je prvi bajt rezultata $30, oznaka DER za SEQUENCE. Druga je globina: pridobljena vmesna lahko sama oglašuje URL AIA za svojega izdajatelja, zato prehod pripne nove kandidate v vrsto in dopolni verige, ki so dva ali tri skoki kratki. To je treba omejiti, za kar je parameter MaxFetch
Kaj je vrednost semena podpisa in zakaj odpove tiho?
Vrednost semena (seed value) je omejitev, ki jo avtor dokumenta pripne polju podpisa, da pove podpisniku, kakšna vrsta podpisa je sprejemljiva: kateri SubFilter, kateri algoritem prebave, kateri razlogi, katera najmanjša različica PDF, ali mora biti informacija o preklicu vgrajena. Živi v slovarju /SV na polju in je definirana v ISO 32000-1 §12.7.5.5. HotPDF jo zapiše z AttachPAdESSeedValue in preveri z CheckLoadedSignatureSeedValue, ki vrne True, ko je polje neomejeno ali vsaka prisotna omejitev gre, in ob False poimenuje prvo odpovedano omejitev skozi izhodni parameter, ki ga lahko date naravnost v sporočilo napake
Mehanizem, ki naredi vrednosti semena enostavne za pokvariti, je vnos zastavic /Ff, opisan v §12.7.5.5.3. Nastavljeni bit označi svojo omejitev kot zahtevano: neskladje je napaka in podpisnik mora odkloniti. Čist bit označi isto omejitev kot preferenco: vrednost filtrira, kaj naj vmesnik ponudi, in nič več. Dve pasti sledita iz tega. Prvič, /Ff živi znotraj slovarja /SV in ne na pripombi gradnika (widget annotation), zato koda, ki bere /Ff na ravni polja, dobi prazen odgovor za vedno in sklepa, da nič ni vsiljeno. Drugič, dodelitve bitov niso enostaven tek ena, dva, štiri, osem; v HotPDF zapisovalnik izda 2 za SubFilter, 4 za MinVersion, 32 za AddRevInfo in 64 za DigestMethod. Bralec, ki predpostavi zaporedne bite, dekodira vsako omejitev kot neobvezno in gre vsak test razen tistega, ki šteje
var
Violation: AnsiString;
begin
// Vprašajte polje, ali je profil, s katerim se bomo podpisali, dovoljen
if not Pdf.CheckLoadedSignatureSeedValue(0, 'ETSI.CAdES.detached',
'SHA256', 'Approved for payment', 1, Violation) then
raise Exception.Create('Signature field rejects this profile: ' +
String(Violation));
// Omejitev zadovoljena: nadaljujte s prehodom podpisovanja
end;
Test, ki je izpostavil izvirno napako dekodiranja, ni bil pozitiven test. Bila je trditev, da mora biti vsiljeno neskladje odklonjeno, in je edina vrsta testa, ki lahko ujame ta razred napak: dekodirnik, ki bere napačen slovar ali napačne bitne položaje, proizvede »brez kršenih omejitev« za vsak vhod, kar izgleda natanko kot pravilno vedenje, dokler ene namenoma ne skršite
Kje to stoji na lestvici LTV
Štiri stopnice in vsaka potrebuje tisto pod sabo. B-B je goli podpis. B-T doda zaupanja vreden časovni žig, ki fiksira čas podpisovanja, tako da validator ve, proti kateremu trenutku ovrednotiti preklic. B-LT doda dokazila preklica v DSS, kar je tisto, kar PopulatePAdESLTVEvidence samodejno opravi. B-LTA doda časovne žige dokumenta, ki se obnovijo, preden se prejšnji oslabi, podaljšujoč veljavnost neomejeno; HotPDF to izpostavi kot RenewPAdESLTATimestamp, ki pripne nov časovni žig kot inkrementalno revizijo in ohrani vsak zgodnejši podpis, časovni žig in vnos DSS nedotaknjene
Model inkrementalne posodobitve je edini pravilen način dodajanja dokazil podpisanemu dokumentu, ker bi prepisovanje datoteke prelomilo bajtne obsege, ki jih obstoječi podpisi pokrivajo. Če morate razmišljati o tem, kaj se je spremenilo med revizijami, in ali so te spremembe tiste vrste, ki jih podpis dovoljuje, je ta analiza pokrita ločeno v analizi revizij DocMDP in FieldMDP. Cevovod podpisovanja sam, vključno z viri certifikatov in pastmi bajtnega vrstnega reda, je v vodniku po podpisovanju PAdES, stran validacije pa v preverjanju podpisov na naloženih dokumentih
Eno praktično opozorilo o vrstnem redu. Zberite dokazila takoj po podpisovanju, idealno v istem opravilu. Odgovorni, ki lahko odgovarjajo za certifikat, so na spletu, medtem ko je certifikat trenuten, in odšli leta kasneje, zato dokument, ki zapusti vaš cevovod kot B-B, morda nikoli več ne bo nadgradljiv. HotPDF teče kot domača komponenta VCL za Delphi in C++Builder, celoten prehod dokazil pa je v procesu razen vašega lastnega transporta; podprti profili so navedeni na strani produkta HotPDF Delphi PDF component