TPDFlibCSCClient
セキュリティと署名
説明
Cloud Signature Consortium の資格情報、認証、およびダイジェスト署名エンドポイント向け同期クライアントを提供します
クライアントは credentials/info から署名証明書と対応アルゴリズム OID を取得し、credentials/authorize から署名アクティベーションデータを取得して、事前計算済みの 1 つ以上のダイジェストを signatures/signHash に送信します
SignDigest は TPDFlibExternalDigestSignEvent を実装し、TPDFlib.OnExternalDigestSign に直接割り当てられます。PDF ByteRange の作成、CMS 認証属性、プレースホルダーのサイズ設定および返された署名の検証をライブラリ内に保持します
ユニット
PDFlibCSC構築
Constructor TPDFlibCSCClient.Create;
Destructor TPDFlibCSCClient.Destroy;資格情報の検出
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 が成功する必要があります
署名証明書は SigningCertificateDER、追加証明書は CertificateChainCount および GetCertificateChainDER、リモートバッチの上限は MaxBatchSize を通じて公開される
認可
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;HashPinningRequired=True の資格情報では、ダイジェスト配列は必須で、正確に NumSignatures 個の値を含む必要があります
事前取得した SAD は有効期限とハッシュバインディングを確認され、正確に 1 回だけ消費されます
署名
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;一括処理内のすべてのダイジェストは同じアルゴリズムを使用し、DigestAlgorithm が示す正確な長さである必要があります
SignatureAlgorithm は PDF_EXTERNAL_SIGNATURE_RSA_PKCS1 および PDF_EXTERNAL_SIGNATURE_ECDSA_DER をサポートする CSC ECDSA 署名は DER エンコードされるため、P1363 出力は推測されない
パラメータ
| ServiceURL | /csc/<version> より前の基本サービス URL |
|---|---|
| APIVersion | エンドポイントのバージョンセグメント。既定値は v1 |
| CredentialID | ベンダー定義の資格情報識別子 |
| OAuthToken | すべての既定トランスポート要求に追加される書き込み専用ベアラートークン |
| TimeoutMS | 要求タイムアウトです。デフォルトは 300000 ミリ秒 |
| MaxResponseBytes | 受け入れる最大応答サイズ、既定値は 8 MiB |
| ClientData | 署名要求とともに送信される任意のベンダー定義値 |
| AuthorizationPIN | 自動コールバック認証で使用する書き込み専用 PIN |
| AuthorizationOTP | コールバック認証後に消去される、書き込み専用のワンタイムパスワード |
| AuthorizationDescription | 自動コールバック認可で使用する省略可能な説明 |
| OnTransport | mTLS、プロキシ、ベンダー固有、または決定的テスト統合用の任意のトランスポートコールバック |
ステータスプロパティ
CredentialLoaded、SigningCertificateDER、CertificateChainCount、SupportedAlgorithmCount、MaxBatchSize、HashPinningRequired、LastAuthorizationExpiresAt、LastHTTPStatus、および LastError は、OAuth、PIN、OTP、または SAD の秘密情報を返さずに現在の状態を公開します
例
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;失敗時の動作
構成、トランスポート、JSON、Base64、X.509、アルゴリズム、バッチ、有効化または応答数の検証に失敗した場合、メソッドは False を返して LastError を設定します
外部ダイジェスト署名パスは、PDF を受け入れる前に返された各生署名を SigningCertificateDER に対して独立して検証します
関連項目
OnExternalDigestSign、SetSignProcessExternalDigestSigner、SetSignProcessDigestAlgorithm