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

PDFlibCSC

Aufbau

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

ServiceURLBasisdienst-URL vor /csc/<version>
APIVersionEndpunkt-Versionssegment, standardmäßig v1
CredentialIDAnbieterdefinierter Anmeldeinformationsbezeichner
OAuthTokenNur schreibbares Bearer-Token, das jeder Standardtransportanforderung hinzugefügt wird
TimeoutMSZeitüberschreitung der Anforderung, standardmäßig 300000 Millisekunden
MaxResponseBytesMaximal akzeptierte Antwortgröße, standardmäßig 8 MiB
ClientDataOptionaler herstellerspezifischer Wert, der mit Signaturanfragen gesendet wird
AuthorizationPINNur schreibbare PIN für die automatische Rückrufautorisierung
AuthorizationOTPNur schreibbares Einmalkennwort, das nach der Rückrufautorisierung gelöscht wird
AuthorizationDescriptionOptionale Beschreibung für die automatische Callback-Autorisierung
OnTransportOptionaler 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