|
THotPDF.SignPDFWithPFX
|
Zurück Methoden AddPubKeyRecipient |
|
Signiert einen vorhandenen PDF-Platzhalter unter Verwendung einer PFX- / PKCS#12-Datei, erstellt einen CMS-SignedData-Container und schreibt das signierte PDF in einem einzigen Aufruf
Delphi-Syntax (Datei-Überladung): class function SignPDFWithPFX( const InputPDFPath: string; const OutputPDFPath: string; const PFXFilePath: string; const Password: AnsiString): boolean; overload; static;
Delphi-Syntax (Stream-Überladung): class function SignPDFWithPFX( InputStream: TStream; OutputStream: TStream; const PFXFilePath: string; const Password: AnsiString): boolean; overload; static;
Beschreibung SignPDFWithPFX ist der in v2.119.27 hinzugefügte End-to-End-PFX-Signatur-Einstiegspunkt; das Eingabe-PDF muss bereits einen Signaturplatzhalter enthalten, der von THPDFPage.AddSignedSignatureField (oder dessen PAdES-Wrapper) mit dem SubFilter
1. Lädt das Eingabe-PDF, lokalisiert die Platzhalter-Sentinels für /ByteRange + /Contents und aktualisiert /ByteRange mit den tatsächlichen Byte-Offsets 2. Lädt die PFX-Datei und entschlüsselt sie mit dem angegebenen Passwort; PBES2 mit PBKDF2-HMAC-SHA-256 + AES-256-CBC wird unterstützt (dies ist der Standard für PFX-Dateien, die von OpenSSL 3.0+, Windows 11+ certutil und macOS Schlüsselbundverwaltung exportiert wurden); veraltete PBE-SHA1-3DES-Dateien lösen einen Diagnosefehler aus; exportieren Sie diese erneut mit 3. Berechnet SHA-256 über die vom /ByteRange abgedeckten Dokument-Bytes und erstellt ein CMS SignedData (RFC 5652) DER-Blob, das das X.509-Zertifikat, die signierten Attribute (contentType + messageDigest + signingTime) und eine RSA + SHA-256-Signatur über die SET-markierten signierten Attribute enthält 4. Hex-kodiert das CMS-DER, überprüft, ob es in das von AddSignedSignatureField reservierte /Contents-Budget passt (Standard 8 KB deckt 1024 / 2048-Bit RSA ab), und fügt es in den Platzhalter ein 5. Schreibt die gepatchten Bytes in den Ausgabepfad oder -stream
Gibt bei Erfolg True zurück; löst bei falschem Passwort, nicht unterstütztem Verschlüsselungsprofil oder fehlerhaftem PFX eine
Typischer Workflow
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');
Hinweise Der Signatur-Algorithmus ist RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1); der Signaturgeber-Identifikator ist die aus dem X.509-Zertifikat extrahierte IssuerAndSerialNumber; die encapContentInfo ist abgetrennt (eContent ausgelassen); signierte Attribute werden vor dem Hashing gemäß RFC 5652 §5.4 nach aufsteigender DER-Byte-Reihenfolge sortiert
Für PAdES B-T / B-LT / B-LTA-Workflows, die RFC 3161-Zeitstempel, DSS-Wörterbücher oder Dokumentzeitstempel-Signaturen erfordern, gelten weiterhin die Ersteller-Hilfsfunktionen (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature); SignPDFWithPFX selbst erzeugt eine einfache reine CMS-Signatur (äquivalent zu PAdES-B-B)
Siehe auch: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField |