THotPDF.SignPDFWithPFX

THotPDF

 

Előző Metódusok AddPubKeyRecipient

Aláír egy meglévő PDF helyőrzőt PFX / PKCS#12 fájl használatával, felépítve egy CMS SignedData konténert, és egyetlen hívással kiírva az aláírt PDF-et

 

Delphi szintaxis (fájl túlterhelés):

class function SignPDFWithPFX(

const InputPDFPath: string;

const OutputPDFPath: string;

const PFXFilePath: string;

const Password: AnsiString): boolean; overload; static;

 

Delphi szintaxis (stream túlterhelés):

InputStream: TStream;

OutputStream: TStream;

Leírás

A SignPDFWithPFX a v2.119.27 verzióban hozzáadott végponttól-végpontig terjedő PFX aláírási belépési pont. A bemeneti PDF-nek már tartalmaznia kell egy aláírási helyőrzőt, amelyet a THPDFPage.AddSignedSignatureField (vagy annak PAdES burkolója) bocsátott ki adbe.pkcs7.detached subFilterrel. A metódus:

1. Betölti a bemeneti PDF-et, megkeresi a /ByteRange + /Contents őrszem (sentinel) helyőrzőket, és behelyettesíti a /ByteRange értéket a tényleges bájteltolásokkal

 

2. Betölti a PFX fájlt, és feloldja a megadott jelszóval. A PBES2 és a PBKDF2-HMAC-SHA-256 + AES-256-CBC támogatott (ez az alapértelmezett az OpenSSL 3.0+, Windows 11+ certutil és macOS Keychain Access által exportált PFX fájloknál). A régi PBE-SHA1-3DES fájlok diagnosztikai hibát jeleznek; exportálja újra a openssl pkcs12 -export ... -keypbe AES-256-CBC -certpbe AES-256-CBC paranccsal

3. Kiszámítja az SHA-256 hash-t a /ByteRange által lefedett dokumentumbájtokra, és felépít egy CMS SignedData (RFC 5652) DER blobot, amely tartalmazza az X.509 tanúsítványt, az aláírt attribútumokat (contentType + messageDigest + signingTime) és egy RSA + SHA-256 aláírást a SET-címkézett aláírt attribútumokon

 

4. Hex-kódolja a CMS DER-t, ellenőrzi, hogy belefér-e a AddSignedSignatureField által lefoglalt /Contents keretbe (az alapértelmezett 8 KB elegendő az 1024 / 2048 bites RSA-hoz), és beilleszti a helyőrzőbe

5. Kiírja a javított bájtokat a kimeneti útvonalra vagy streamre

Siker esetén True értékkel tér vissza. EHPDFPFXError hibát vált ki helytelen jelszó, nem támogatott titkosítási profil vagy hibás PFX esetén; EHPDFCMSError hibát, ha a bemeneti PDF nem tartalmazza az elvárt helyőrzőt, vagy a CMS DER túllépi a lefoglalt /Contents keretet; EHPDFRSAError hibát pedig RSA kulcs eltérése esetén

Tipikus munkafolyamat

Doc := THotPDF.Create(nil);

 

Doc.FileName := 'unsigned.pdf';

 

Doc.BeginDoc;

 

Doc.CurrentPage.AddSignedSignatureField(

'Sig1', Rect(60, 60, 260, 90), 8192,

'adbe.pkcs7.detached', 'Approved', 'Brussels', '', []);

Doc.EndDoc;

Doc.Free;

THotPDF.SignPDFWithPFX('unsigned.pdf', 'signed.pdf', 'mykey.pfx', 'mypassword');

Megjegyzések

Az aláírási algoritmus RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). Az aláíró azonosítója az X.509 tanúsítványból kinyert IssuerAndSerialNumber. Az encapContentInfo le van választva (az eContent elmarad). Az aláírt attribútumok az RFC 5652 §5.4 szerint növekvő DER bájtsorrendbe rendeződnek a hash kiszámítása előtt

Az RFC 3161 időbélyegeket, DSS szótárakat vagy dokumentum-időbélyegző aláírásokat igénylő PAdES B-T / B-LT / B-LTA munkafolyamatokhoz továbbra is a gyártói oldali segédek (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature) érvényesek; maga a SignPDFWithPFX egy alapvető, csak CMS-t tartalmazó aláírást bocsát ki (PAdES-B-B megfelelője)

 

Lásd még: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField

Az aláírási algoritmus RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). Az aláíró azonosítója az X.509 tanúsítványból kinyert IssuerAndSerialNumber. Az encapContentInfo leválasztott (eContent kihagyva). Az aláírt attribútumok az RFC 5652 §5.4 szerint növekvő DER byte string sorrendbe rendeződnek a hashelés előtt

 

Az RFC 3161 timestampet, DSS szótárakat vagy dokumentum timestamp aláírásokat igénylő PAdES B-T / B-LT / B-LTA munkafolyamatokhoz továbbra is az előállítói oldali segítők használhatók (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature); maga a SignPDFWithPFX alap CMS-only aláírást bocsát ki (PAdES-B-B megfelelő)

 

See also: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField