Ką tik pasirašytas PDF yra B-B parašas ir nieko daugiau. Jis įrodo, kas pasirašė, ir kad baitai neslinko, bet jis neturi jokio įrodymo, kad pasirašiusiojo sertifikatas pasirašymo metu buvo teisėtas, todėl tikrintojui po metų teks ieškoti atšaukimo duomenų, kurių jau gali nebėti. To spragos užtaisymas reiškia OCSP atsakų ir CRL įrašymą į dokumento lygio Document Security Store, o HotPDF tai vienas iškvietimas: PopulatePAdESLTVEvidence apeina kiekvieną įkeltą parašą, išvestina atšaukimo užklausas iš sertifikatų rinkinio, vykdo jas per jūsų pateiktą transportą ir įrašo gautą medžiagą plus CMS grandinę į DSS. Grąžina parašų, kurių įrodymai atsidūrė, skaičių arba minus vienetas, kai dokumente apskritai nėra parašų lauko
Projektavimo sprendimas, vertas supratimo prieš pradedant naudoti, yra tas, kad biblioteka niekada neatidaro lizdo (socket). Kiekvienas baitas, atkeliavęs iš tinklo, atkeliauja per jūsų parašytą atgalinį iškvietimą. Tai ne atsargumas dėl atsargumo; tai vienintelis būdas, kuriuo ši savybė gali veikti tose aplinkose, kurios iš tikrųjų reikalauja ilgalaikio tikrinimo
Kodėl biblioteka atsisako pati daryti HTTP?
Nes vietos, reikalaujančios B-LT parašų, yra vietos, kuriose bibliotekos tinklas negali būti patikėtas. Pasirašymo tarnybos veikia už tapatybę tikrinančių įgaliotųjų serverių su įmoninėmis šaknimis. Atskirtos nuo oro pasirašymo pakopos neturi kelio iki atsakiklio ir turi būti maitinamos podėlyje laikomais įrodymais. Audito režimai reikalauja, kad kiekviena išsiunčiama užklausa būtų į žurnalą įrašyta programos, o ne užkasta priklausomybėje. Ir testų rinkiniai reikalauja deterministinių atsakų, o to neįmanoma, jei biblioteka pati skambina išorėn
Transportas yra paprasta funkcijos nuoroda su fiksuota forma, todėl politika lieka jūsų. HotPDF perduoda jums užklausos įrašą, tiksliai aprašantį, ką gauti, įskaitant turinio tipą ir atsako dydžio ribą, o jūs grąžinate baitus plus būseną
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 sako, ar tai OCSP POST, ar CRL GET;
// Request.ContentType ir Request.Body jau paruošti,
// o Request.MaxResponseBytes yra riba, kurios privalote laikytis
Response := HttpExchange(Request.URI, Request.ContentType,
Request.Body, Request.MaxResponseBytes);
Result := setsSucceeded;
except
on E: Exception do
begin
ErrorMessage := E.Message;
// setsRetry leidžia pakartojimo politikai atsitraukti; naudokite
// setsPermanentFailure 404 arba blogam URL
Result := setsRetry;
end;
end;
end;
// Vieno iškvietimo B-B į B-LT atnaujinimas kiekvienam įkelto failo parašui
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
// Tik priedų įrašymas: baitai, kuriuos dengia esami parašai,
// išsaugomi iki žodžio
Pdf.SaveIncrementalUpdate('signed-lt.pdf');
finally
Pdf.Free;
end;
end;
Nesėkmės yra po parašą, o ne po dokumentą. Atsakiklis, kuriam vienam pasirašiusiajam pasibaigė laikas, praleidžia to pasirašiusiojo medžiagą ir palieka likusį apėjimą nepaliestą — tai elgsena, kurios norite partijoje: daliniai įrodymai nugalą nutrauktą seką, o grąžos reikšmė pasako, kiek parašų iš tikrųjų patobulėjo
Grandinė, kurią CMS užmiršo įtraukti
Atšaukimo patikrai reikia išdavėjo sertifikato, o stebėtinai daug pasirašymo krūvų praleidžia tarpinius CMS konteineryje. Atkūrimo kelias yra Authority Information Access plėtinys, prieigos metodas 1.3.6.1.5.5.7.48.2, skelbiantis URL, iš kurio išdavėjo sertifikatas gali būti parsisiųstas. HPDFFetchAIAIntermediates apeina tuos URL per tą patį transportą, iš kiekvieno atsako išanalizuoja DER ir grąžina tik tuos sertifikatus, kurių CMS dar nenešė, su raktu pagal DER maišą, kad dubliai ir ciklai negalėtų suktis
Dvi detalės nusprendžia, ar tai veikia prieš tikrus sertifikatų centrus. Pirma yra koduotė: CA galiniai taškai sertifikatą patiekia kaip žaliąjį DER maždaug taip pat dažnai, kaip PEM šarvuotą, ir nėra patikimo turinio tipo, juos atskirti. Patikimas zondas yra tekstualinis, tada struktūrinis. Ieškokite -----BEGIN CERTIFICATE----- ženklo, jei jis yra — nulupkite šarvus ir iškoduokite base64, o abiejose keliuose patvirtinkite, kad pirmasis rezultato baitas yra $30, DER ženklas SEQUENCE. Antra yra gylis: gautasis tarpinis pats gali skelbti AIA URL savo išdavėjui, todėl apėjimas prie eilės prideda naujus kandidatus ir užbaigia grandines, kurias skiria du ar trys šuoliai. To reikia riboti — tam yra MaxFetch parametras
Kas yra parašo sėklos reikšmė ir kodėl ji nepavyksta tyloje?
Sėklos reikšmė (seed value) yra apribojimas, kurį dokumento autorius prideda prie parašo lauko, kad pasakyti pasirašytojui, koks parašas priimtinas: kuris SubFilter, kuri maišos algoritmą, kurios priežastys, kuri mažiausia PDF versija, ar atšaukimo informacija turi būti įterpta. Ji gyvena /SV žodyne ant lauko ir apibrėžta ISO 32000-1 §12.7.5.5. HotPDF ją rašo su AttachPAdESSeedValue ir tikrina su CheckLoadedSignatureSeedValue, grąžinančia True, kai laukas be apribojimų arba kiekvienas esamas apribojimas tenkinamas, o False atveju įvardija pirmąjį nesėkmingą apribojimą per išvesties parametrą, kurį galima tiesiai įdėti į klaidos pranešimą
Mechanizmas, dėl kurio sėklos reikšmes lengva padaryti klaidingai, yra §12.7.5.5.3 aprašytas /Ff vėliavėlių įrašas. Nustatytas bitas žymi savo apribojimą kaip privalomą: nesutapimas yra klaida ir pasirašytojas privalo atsisakyti. Išvalytas bitas žymi tą patį apribojimą kaip pageidaujamą: reikšmė filtruoja, ką UI turėtų siūlyti, ir nieko daugiau. Iš to seka du spąstai. Pirma, /Ff gyvena /SV žodyno viduje, o ne ant valdiklio anotacijos, todėl kodas, skaitantis lauko lygio /Ff, amžinai gauna tuščią atsakymą ir daro išvadą, kad niekas neprivaloma. Antra, bitų priskyrimai nėra paprasta eilutė vienas, du, keturi, aštuoni; HotPDF rašyklė skleidžia 2 SubFilter, 4 MinVersion, 32 AddRevInfo ir 64 DigestMethod. Skaitytojas, manantis nuoseklių bitų, kiekvieną apribojimą iškodoja kaip pasirinktinį ir išlaiko visus testus, išskyrus tą vieną, kuris svarbiausia
var
Violation: AnsiString;
begin
// Paklauskite lauko, ar profilis, kuriuo ketiname pasirašyti, leidžiamas
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));
// Apribojimas tenkintas: tęskite pasirašymo seką
end;
Testas, atvėręs pradinę dekodavimo klaidą, nebuvo teigiamasis testas. Buvo teiginys, kad privalomas nesutapimas turi būti atmestas, ir tai vienintelė testų rūšis, galinti pagauti šios klasės defektą: dekoderis, skaitantis neteisingą žodyną ar neteisingas bitų vietas, kiekvienai įvečiai duoda „jokių pažeistų apribojimų“, kas atrodo lygiai kaip teisinga elgsena, kol sąmoningai nepažeidžiate vieno
Kur tai stovi LTV kopėčiose
Keturi laipteliai, ir kiekvienam reikia žemiau esančio. B-B yra nuogas parašas. B-T prideda patikimą laiko žymą, kuri užfiksuoja pasirašymo laiką, todėl tikrintojas žino, kurį momentą vertinti atšaukimą. B-LT prideda atšaukimo įrodymus į DSS — tai, ką automatiškai daro PopulatePAdESLTVEvidence. B-LTA prideda dokumento laiko žymas, atnaujinamas prieš tai, kol ankstesnė nusilpsta, ir besąlygiškai plėtinančias galiojimą; HotPDF tai atveria kaip RenewPAdESLTATimestamp, pridedantis naują laiko žymą kaip prieauginę reviziją ir išsaugantis kiekvieną ankstesnį parašą, laiko žymą ir DSS įrašą nepaliestą
Prieauginio atnaujinimo modelis yra vienintelis teisingas būdas pridėti įrodymus prie pasirašyto dokumento, nes failo perrašymas sugadintų baitų intervalus, kuriuos dengia esami parašai. Jeigu reikia samprotuoti, kas pasikeitė tarp revizijų, ir ar tie pokyčiai yra tokios rūšies, kurią leistų parašas, ta analizė atskirai dengiama DocMDP ir FieldMDP revizijų analizėje. Pats pasirašymo konvejeris, įskaitant sertifikatų šaltinius ir baitų eiliškumo spąstus, yra PAdES pasirašymo apžvalgoje, o tikrinimo pusė — parašų tikrinime įkeltuose dokumentuose
Vienas praktinis įspėjimas dėl eiliškumo. Rinkite įrodymus kuo greičiau po pasirašymo, idealiu atveju toje pačioje užduotyje. Atsakikliai, galintys atsakyti už sertifikatą, yra internete, kol sertifikatas galioja, ir dingsta po metų, todėl dokumentas, išeinantis iš jūsų konvejerio kaip B-B, gali daugiau niekada nepakilti. HotPDF veikia kaip savoji VCL komponentė Delphi ir C++Builder aplinkose, o visas įrodymų apėjimas vyksta procese, išskyrus jūsų pačių transportą; palaikomi profiliai išvardyti HotPDF Delphi PDF component produkto puslapyje