TPDFlibCSCClient
Sicherheit und Signaturen
Beschreibung
Stellt einen synchronen Client für die Endpunkte des Cloud Signature Consortium für Anmeldeinformationen, Autorisierung und Digest-Signierung bereit
Der Client ruft das Signaturzertifikat und unterstützte Algorithmus-OIDs von credentials/info ab, bezieht Signaturaktivierungsdaten von credentials/authorize und übermittelt einen oder mehrere bereits berechnete Digests an signatures/signHash
SignDigest implementiert TPDFlibExternalDigestSignEvent und kann direkt TPDFlib.OnExternalDigestSign zugewiesen werden, sodass die Erstellung des PDF-ByteRange, authentifizierte CMS-Attribute, die Dimensionierung des Platzhalters und die Prüfung der zurückgegebenen Signatur innerhalb der Bibliothek verbleiben
Unit
PDFlibCSCAufbau
Constructor TPDFlibCSCClient.Create;
Destructor TPDFlibCSCClient.Destroy;Ermittlung von Anmeldeinformationen
Function TPDFlibCSCClient.RefreshCredentialInfo: Boolean;
Function TPDFlibCSCClient.SupportsAlgorithm(DigestAlgorithm, SignatureAlgorithm: Integer): Boolean;
Function TPDFlibCSCClient.GetCertificateChainDER(Index: Integer): AnsiString;
Function TPDFlibCSCClient.GetSupportedAlgorithmOID(Index: Integer): AnsiString;
Procedure TPDFlibCSCClient.ClearCredentialInfo;RefreshCredentialInfo muss vor Aufrufen zur direkten Autorisierung oder Stapelsignatur erfolgreich ausgeführt werden
Das Signaturzertifikat wird über SigningCertificateDER, zusätzliche Zertifikate über CertificateChainCount und GetCertificateChainDER sowie die Obergrenze für Remote-Stapel über MaxBatchSize bereitgestellt
Autorisierung
Function TPDFlibCSCClient.Authorize(NumSignatures: Integer; Const Digests: TPDFlibCSCByteArray; Const PIN, OTP, Description, ClientData: WideString; Out SAD: AnsiString): Boolean;
Function TPDFlibCSCClient.PrefetchAuthorization(NumSignatures: Integer; Const Digests: TPDFlibCSCByteArray; Const PIN, OTP, Description, ClientData: WideString): Boolean;
Function TPDFlibCSCClient.SetPrefetchedSAD(Const SAD: AnsiString; ExpiresInSeconds: Integer; Const PinnedDigests: TPDFlibCSCByteArray): Boolean;
Procedure TPDFlibCSCClient.ClearSAD;
Procedure TPDFlibCSCClient.ClearAuthorizationSecrets;Bei Anmeldeinformationen mit HashPinningRequired=True ist das Digestarray obligatorisch und muss genau NumSignatures Werte enthalten
Vorab abgerufene SAD wird auf Ablauf und Hashbindung geprüft und genau einmal verbraucht
Signatur
Function TPDFlibCSCClient.SignHashes(Const Digests: TPDFlibCSCByteArray; DigestAlgorithm, SignatureAlgorithm: Integer; Const SAD: AnsiString; Out Signatures: TPDFlibCSCByteArray): Boolean;
Function TPDFlibCSCClient.SignAuthorizedHashes(Const Digests: TPDFlibCSCByteArray; DigestAlgorithm, SignatureAlgorithm: Integer; Out Signatures: TPDFlibCSCByteArray): Boolean;
Function TPDFlibCSCClient.SignDigest(Sender: TObject; SignProcessID: Integer; Const Digest: AnsiString; DigestAlgorithm, SignatureAlgorithm: Integer; Var Signature: AnsiString): Boolean;Jeder Digest eines Stapels muss denselben Algorithmus verwenden und genau die durch DigestAlgorithm vorgegebene Länge besitzen
SignatureAlgorithm unterstützt PDF_EXTERNAL_SIGNATURE_RSA_PKCS1 und PDF_EXTERNAL_SIGNATURE_ECDSA_DER; CSC-ECDSA-Signaturen sind DER-codiert, daher wird keine P1363-Ausgabe angenommen
Parameter
| ServiceURL | Basisdienst-URL vor /csc/<version> |
|---|---|
| APIVersion | Endpunkt-Versionssegment, standardmäßig v1 |
| CredentialID | Anbieterdefinierter Anmeldeinformationsbezeichner |
| OAuthToken | Nur schreibbares Bearer-Token, das jeder Standardtransportanforderung hinzugefügt wird |
| TimeoutMS | Zeitüberschreitung der Anforderung, standardmäßig 300000 Millisekunden |
| MaxResponseBytes | Maximal akzeptierte Antwortgröße, standardmäßig 8 MiB |
| ClientData | Optionaler herstellerspezifischer Wert, der mit Signaturanfragen gesendet wird |
| AuthorizationPIN | Nur schreibbare PIN für die automatische Rückrufautorisierung |
| AuthorizationOTP | Nur schreibbares Einmalkennwort, das nach der Rückrufautorisierung gelöscht wird |
| AuthorizationDescription | Optionale Beschreibung für die automatische Callback-Autorisierung |
| OnTransport | Optionaler Transport-Callback für mTLS-, Proxy-, anbieterspezifische oder deterministische Testintegration |
Statuseigenschaften
CredentialLoaded, SigningCertificateDER, CertificateChainCount, SupportedAlgorithmCount, MaxBatchSize, HashPinningRequired, LastAuthorizationExpiresAt, LastHTTPStatus und LastError stellen den aktuellen Zustand bereit, ohne OAuth-, PIN-, OTP- oder SAD-Geheimnisse zurückzugeben
Beispiel
var
CSC: TPDFlibCSCClient;
ProcessID: Integer;
begin
CSC:= TPDFlibCSCClient.Create;
try
CSC.ServiceURL:= 'https://sign.example.com';
CSC.CredentialID:= 'account/signing-key';
CSC.OAuthToken:= AccessToken;
CSC.AuthorizationPIN:= UserPIN;
CSC.AuthorizationOTP:= CurrentOTP;
if not CSC.RefreshCredentialInfo then
raise Exception.Create(String(CSC.LastError));
PDF.OnExternalDigestSign:= CSC.SignDigest;
ProcessID:= PDF.NewSignProcessFromFile(InputFile, '');
PDF.SetSignProcessField(ProcessID, 'Approval');
PDF.SetSignProcessDigestAlgorithm(ProcessID, 2);
PDF.SetSignProcessExternalDigestSigner(ProcessID,
CSC.SigningCertificateDER, PDF_EXTERNAL_SIGNATURE_RSA_PKCS1, 512);
PDF.EndSignProcessToFile(ProcessID, OutputFile);
finally
CSC.Free;
end;
end;Fehlerverhalten
Methoden geben False zurück und setzen LastError, wenn die Validierung von Konfiguration, Transport, JSON, Base64, X.509, Algorithmus, Stapel, Aktivierung oder Antwortanzahl fehlschlägt
Der externe Digest-Signaturpfad prüft jede zurückgegebene Rohsignatur unabhängig anhand von SigningCertificateDER, bevor das PDF akzeptiert wird
Siehe auch
OnExternalDigestSign, SetSignProcessExternalDigestSigner, SetSignProcessDigestAlgorithm