コンテンツにスキップ
getnextpdf.com

セキュリティおよび署名のエラー

このページでは、NextPDF\Security 名前空間ツリーのセキュリティ領域の例外を解説します。各エントリでは、クラス名を示し、いつ送出されるかを述べ、その getContext() が返すフィールドを列挙し、復旧手順を示します。

これらのクラスのほとんどは SecurityException を継承し、それは NextPdfException を継承して ContextAwareExceptionInterface を実装します。つまり getContext(): array は、ログまたはアプリケーションパフォーマンスモニタリング(APM)パイプラインにルーティングできる、構造化された秘密情報を含まない診断を返します。すべてのセキュリティ領域の失敗を 1 つのブロックで捕捉するには SecurityException を捕捉し、型付きのペイロードが必要な場合は特定のサブクラスを捕捉してください。

このツリーのいくつかのクラスは、SecurityException ではなく RuntimeException を直接継承します。それらは以下で示しています。これらは getContext() を公開せず、 ほとんどは、アプリケーションコードで捕捉することを想定すべきでない内部制御フローのシグナルとして文書化されています。

側面挙動
基底コントラクトNextPdfException::getContext()[] を返します。サブクラスがオーバーライドします。
秘密情報の衛生メッセージとコンテキストは、生の鍵素材、平文、PIN、初期化ベクトル(IV)バイトを省きます。鍵はフィンガープリントのプレフィックスとしてのみ表面化されます。
SecurityException抽象基底クラス。それ自体はフィールドを保持しません。サブクラスがペイロードを定義します。
  • 送出される条件。 直接送出されることはありません。セキュリティ領域の抽象基底クラスです。単一の catch (SecurityException $e) ブロックで、認証付き暗号化の完全性失敗、ノンス再利用の防御、PDF/A と暗号化のバインディング、鍵管理の障害、PKI の失敗を捕捉できるよう存在します。
  • コンテキストフィールド。 それ自体は持ちません。NextPdfException から空のデフォルトを継承し、サブクラスがペイロードを設定します。
  • 復旧。 対処可能な処理には具象サブクラスを捕捉するか、粗いセキュリティインシデントのルーティングには SecurityException を捕捉してください。

これらは AES-GCM(Galois/Counter Mode)の暗号化器と PDF/A ガードによって送出されます。症状を起点としたガイダンスについては、 Encryption and permissionsを参照してください。

  • 送出される条件。 関連データ付き認証付き暗号化(AEAD)の復号が、改ざん以外の理由で失敗した場合。切り詰められた暗号文、欠落した IV、または API 境界で渡された誤った鍵であり、完全性チェックを実際に実行するのに十分な素材がなかった場合です。これは構成またはトランスポートのエラーであり、セキュリティインシデントではありません。
  • コンテキストフィールド。 algorithm(例: AES-256-GCM)、reason(例: ciphertext shorter than IV+tag)。
  • 復旧。 暗号文、IV、鍵が完全で正しくフレーミングされていることを確認してください。これを改ざんとして扱わないでください。TamperedDataException と対比してください。
  • 送出される条件。 AEAD の認証タグの検証が失敗した場合。タグは暗号文と関連認証データ(AAD)をカバーします。暗号化後にいずれかが変更されると、基盤となる openssl_decrypt()false を返します。この独立したサブタイプにより、フレーミングエラーではなくセキュリティインシデント級のアラートを表面化できます。
  • コンテキストフィールド。 algorithmciphertext_length(拒否された暗号文の長さ。IV とタグを除く)。
  • 復旧。 改ざん、または誤った鍵/IV として扱ってください。やみくもに再試行せず、暗号文の出所を調査してください。ISO/TS 32003:2023 §5.2 および NIST SP 800-38D §6.5 に従い、タグチェックの失敗はデータが真正でないことを意味します。
  • 送出される条件。 AES-GCM が、同じ鍵と IV のペアで 2 回暗号化するよう求められた場合。暗号化器は、インスタンスごとの単調増加カウンターと、多層防御として、出力されたすべての(鍵フィンガープリント, IV)ペアのランタイムハッシュセットで防御します。カウンターが構造的に衝突を排除するため、この発火は、本番環境で決して発生してはならない、critical 優先度のバグ指標です。鍵/IV ペアの再利用は、鍵ストリーム全体を危殆化させます(ISO/TS 32003:2023 §5.2 NOTE 2、NIST SP 800-38D §8.3)。
  • コンテキストフィールド。 key_fingerprint_prefix(SHA-256(key) の最初の 8 桁の 16 進文字)、iv_length(ISO/TS 32003 では常に 12)、reasonhashset-collision または counter-rollover。カウンターを無効化するリファクタリングバグと、2^63 のカウンター発火点とを区別)、そして iv_fixed_field_hex(IV の固定フィールド。提供された場合のみ存在し、独自のキーの下で報告され、決して鍵フィンガープリントとして誤ってラベル付けされません)。
  • 復旧。 直ちに中止して鍵をローテーションしてください。不具合レポートを提出してください。これは、不正な呼び出し側の入力ではなく、暗号化器のバグを示します。
  • 送出される条件。 特定の AES-GCM 鍵について、オプトインの NIST SP 800-38D §8.3 の使用上の安全性に関する呼び出し回数に達した場合。これは、暗号化器内部のアーキテクチャ上の限界よりも早期に、仕様が推奨する上限(鍵ごとに約 2^32 回の呼び出し)を強制したい呼び出し側のための、多層防御のテレメトリフックです。デフォルトでは発火しません。assertWithinSafetyBound() ヘルパーのみがこれを送出します。
  • コンテキストフィールド。 key_fingerprint_prefixinvocation_count(現在の encrypt() の回数。制限以上)、invocation_limit(オプトインの上限)。
  • 復旧。 累積的な衝突および偽造の確率が無視できなくなる前に、ドキュメント鍵をローテーションする(新しい鍵素材で新たな暗号化器を構築する)か、呼び出し側のポリシーを拡張してサービスの継続を拒否してください。
  • 送出される条件。 PDF/A タグ付きのドキュメントに対して暗号化操作が試みられた場合。PDF/A ファミリー(PDF/A-2、PDF/A-3、PDF/A-4)は一様に暗号化を禁止しています。ISO 19005 §6.1.3 に従い Encrypt キーはトレーラーに存在してはならず、ISO 19005-4:2020 の Annex A および B はこれを変更なく継承します。PDF/A と暗号化の許可された組み合わせは存在しません。
  • コンテキストフィールド。 pdfa_mode(例: pdfa4pdfa3)、encryption_operation(拒否された呼び出し、例: useAesGcm)。
  • 復旧。 暗号化されたドキュメントを生成するには、enablePdfA() の呼び出しを省いてください。アーカイブドキュメントを生成するには、暗号化の呼び出しを省いてください。PDF/A and PDF/UA validationを参照してください。
  • 送出される条件。 構成済みの暗号ポリシーが、コアの署名、暗号化、またはハッシュ操作が選択したアルゴリズム、鍵強度、または暗号方式を拒否した場合。これは準拠強制(例: FIPS 140-2/3、eIDAS、またはカスタムの企業ポリシー)のためのフェイルクローズ境界であり、署名または暗号文が生成される前に CryptoPolicyEnforcer によって送出されるため、ポリシーに違反する操作が非承認の成果物を出力することは決してありません。狭義の OpenSSL 操作の失敗や、署名プリミティブの失敗とは区別されます。これは、それ以外は有効なリクエストに対するポリシーによる拒否です。NIST SP 800-131A Rev. 2 および ISO/IEC 19790:2025 §7 に整合しています。
  • コンテキストフィールド。 policy(ポリシー名、例: FIPS 140-3 Strict)、categoryhashsignatureencryption、または key-strength)、item(拒否された項目、例: オブジェクト識別子(OID)、暗号方式名、または rsa/1024)、reason
  • 復旧。 指定されたポリシーが承認するアルゴリズム、鍵長、または暗号方式を選択するか、ポリシーを所有している場合は調整してください。構造化されたコンテキストを、文書化された準拠ランブックにルーティングしてください。

同名のクラスが 2 つ存在します。これらは SecurityException のルートを共有するため、1 つの catch (SecurityException $e) ブロックで両方を捕捉できますが、異なるペイロードを保持します。 特定の形が必要な場合は、完全修飾名でインポートしてください。

  • 送出される条件。 鍵が署名または暗号化プリミティブによって消費される前に、鍵管理操作が失敗した場合。Privacy-Enhanced Mail(PEM)、PKCS#12、または PKCS#11 の鍵パース失敗、鍵導出(HKDF、PBKDF2、scrypt)の失敗、誤った鍵暗号化鍵に対する AES Key Wrap(RFC 3394)の拒否、ハードウェアセキュリティモジュール(HSM)が不正な Distinguished Encoding Rules(DER)を返すこと、または Ed25519 のシード長の不一致などです。
  • コンテキストフィールド。 operation(例: load_pemkek_derivekey_wrap)、key_type(例: RSAEC-P256Ed25519AES-256)、reason。生の鍵素材は決して含まれません。
  • 復旧。 指定された操作と鍵タイプを検査し、ソースの鍵素材または導出入力を修正して再試行してください。
  • 送出される条件。 署名プロバイダーが鍵管理の障害に遭遇した場合。要求された鍵バージョンが不明、無効、破棄予定、署名権限の欠如、またはその他の理由で使用不能な場合です。これは RsaPssSignerLocalKeySignerProvider がライブの鍵障害時に送出するものです。名前付きコンストラクター: unknownKeyVersion()keyVersionDisabled()
  • コンテキストフィールド。 providerIdkeyVersionreason。アクセサー: providerId()keyVersion()reason()
  • 復旧。 鍵をローテーションまたは再許可するか、使用可能な鍵バージョンを選択してから再試行してください。署名プリミティブ自体が失敗したことを示す SignatureFailedException とは区別されます。

到達不能なレベルや欠落している機能に関する症状起点のガイダンスについては、 Signature and timestamp failuresを参照してください。

  • 送出される条件。 暗号的な署名操作が失敗した場合。RSA、ECDSA、または Ed25519 の署名プリミティブが false または誤った長さの出力を返す、HSM または PKCS#11 トークンが非成功ステータスで応答する、Cryptographic Message Syntax(CMS)の SignedData 組み立てが不正な証明書またはチェーンで失敗する、または Ed25519 のラウンドトリップ自己検証が失敗する場合です。新しいコードは、レガシーの PAdES 結合署名例外よりもこの R4-13 サブタイプを優先すべきです。
  • コンテキストフィールド。 operation(例: signverifybuild_cms)、algorithm(例: rsa-pkcs1v15-sha256ed25519)、reason。アクセサー: getOperation()getAlgorithm()getReason()
  • 復旧。 操作とアルゴリズムを読み取り、入力(鍵、証明書チェーン、またはバックエンドの可用性)を修正して再試行してください。ETSI EN 319 142-1 のフェイルクローズな鍵処理の姿勢に整合しています。
  • 送出される条件。 SignerProviderInterface の実装が、鍵管理に分類されない何らかの理由で署名操作を完了できない場合。バックエンドドライバーのエラー、不正な鍵素材、または回復不能な HSM I/O などです。これは、すべてのプリミティブが失敗時に nullfalse、または空文字列を返すのではなく送出する、フェイルクローズな署名コントラクトの catch-all です。名前付きコンストラクター: forProvider()
  • コンテキストフィールド。 providerIdreason。アクセサー: providerId()reason()
  • 復旧。 プロバイダー ID と理由を検査し、プロバイダーのバックエンドまたは鍵素材を修正して再試行してください。「鍵が不正」と「プリミティブが失敗」を切り分けるには、KeyManagementException とこの型とで分岐してください。
  • 送出される条件。 要求された PAdES 準拠レベルを現在のランタイムインフラストラクチャの下で実現できず(多くの場合、B-T 以上に対するタイムスタンプ局の欠如)、呼び出し側が機能低下の許可を与えていない場合。デフォルトはフェイルクローズです。より高いレベルを公示しながらサイレントに低いレベルを生成すると eIDAS 級のリグレッションになるため、エンジンはそうするのではなく拒否します。ETSI EN 319 142-1 §6 に整合しています。このクラスは(SecurityException ではなく)NextPdfException を直接継承する点に注意してください。
  • コンテキストフィールド。 requestedLevelhighestAchievableLevelreason。アクセサー: requestedLevel()highestAchievableLevel()reason()
  • 復旧。 reason を読み取って欠落しているインフラストラクチャを特定し、それを用意してください(例: タイムスタンプ局を構成する)。あるいは、意図的に最高の実現可能なレベルを受け入れるには、allowDegradation: truePadesOrchestrator に渡してください。
  • 送出される条件。 SignerProviderRegistry::get() が、登録されていないプロバイダー ID を求められた場合。PSR-11 NotFoundExceptionInterface を実装するため、レジストリは PSR-11 コンテナーコントラクトに準拠します。名前付きコンストラクター: forId()。このクラスは RuntimeException を継承し、getContext() を公開しません。
  • コンテキストフィールド。 なし。登録されていない ID はメッセージに現れます。
  • 復旧。 プロバイダーを要求する前に、期待される ID でプロバイダーを登録するか、レジストリに渡す ID を修正してください。

これらは RuntimeException を継承し、getContext() を公開しません。SHAKE256 は、一部の ISO/TS 32001 のパスで必要とされる SHA-3 の拡張可能出力関数です。

  • 送出される条件。 ダイジェスト時に、選択されたプロバイダーがリクエストを満たせない場合。名前付きコンストラクター: noBackend()(このホスト上で、試行したすべてのティアにわたって動作する SHAKE256 バックエンドがない)と ffiCallFailed()(FFI バインドされた OpenSSL の EVP 呼び出しが、例えば libcrypto のストリップされたビルドなどから非成功ステータスを返した)。
  • コンテキストフィールド。 なし。メッセージは、試行したティアまたは失敗したシンボルを示します。
  • 復旧。 OpenSSL 3.x が存在する状態で ext-ffi をインストールするか、hash_algos()shake256 を公開する PHP ビルドにアップグレードしてください。ユーザーランドの Keccak フォールバックは、意図的に同梱されていません。
  • 送出される条件。 SHAKE256 プロバイダーのコンストラクターから、能力プローブが失敗してプロバイダーをインスタンス化できない場合。これは制御フローのシグナルです。プロバイダーレジストリがこれを捕捉し、ティアラベルを記録して次のティアを試みます。アプリケーションコードに漏れることは決してありません。名前付きコンストラクター: forTier()
  • コンテキストフィールド。 なし。メッセージはティアと理由を示します。
  • 復旧。 直接呼び出し側が対処できるものではありません。ティアチェーン全体が尽きた場合、レジストリは代わりにオペレーター向けの修正を保持する Shake256NotAvailableException::noBackend() を表面化させます。

これらは、/AuthCode の下に格納される ISO/TS 32004 のドキュメントレベルのメッセージ認証コード(MAC)をカバーします。どちらも NextPdfException を継承し、getContext() をオーバーライドします。

  • 送出される条件。 CMS の AuthenticatedData MAC トークンが構造的に不正である、または合意された ISO/TS 32004 のセット外のアルゴリズムを宣言している場合に、MAC トークンリーダーによってフェイルクローズで送出されます。名前付きコンストラクター: malformed()algorithmMismatch()@internal とマークされています。
  • コンテキストフィールド。 statusDocumentMacVerificationStatus の値。MalformedToken または AlgorithmMismatch)。public readonly プロパティ: $status
  • 復旧。 ドキュメントを未検証として扱ってください。不正なトークン、または合意されたセット外のアルゴリズムは、MAC が信頼を確立できないことを意味します。コンテンツが保護されているかのように処理を進めないでください。
  • 送出される条件。 ドキュメントレベルの MAC 検証が信頼された状態に到達できない場合にフェイルクローズで送出されます。/AuthCode の欠落または不正、合意されたセット外のアルゴリズム、アンラップの失敗、または MAC の不一致(改ざん)などです。検証器の verify() は分岐用の明示的な結果を返します。これは assertVerified() が送出する例外フロー側の対応物であり、「コンテンツを信頼する」コードが未検証のドキュメントを越えて進むことが決してないようにします。名前付きコンストラクター: fromResult()
  • コンテキストフィールド。 statusDocumentMacVerificationStatus の値)。public readonly プロパティ: $status
  • 復旧。 ドキュメントのコンテンツを信頼しないでください。status を検査して、改ざん(MAC の不一致)と構成上の問題(/AuthCode の欠落または不正、アルゴリズムの不一致)とを区別してください。

これらは RFC 5280 の証明書パス検証をカバーします。基底型とそのサブクラスはフェイルクローズです。

  • 送出される条件。 RFC 5280 パス検証器からの strict モードの失敗。これはより狭いサブクラス(ChainLengthExceededExceptionUnsupportedExtensionException)の非 final な基底クラスであるため、この型を捕捉するハンドラーは、リスコフの置換を通じてそれらも捕捉します。SecurityException を継承します。
  • コンテキストフィールド。 getContext() をオーバーライドしません(空のデフォルトを継承)。構造化された理由は、固定された public readonly 配列プロパティ $reasons(ルール名と説明文字列の非空リスト)に保持します。
  • 復旧。 $reasons を読み取って失敗したルールを特定し、証明書チェーンを修正して再検証してください。あらゆるパス検証の失敗を一様に処理するには、この型を捕捉してください。
  • 送出される条件。 パス検証器が、その長さが構成済みの上限を超えるチェーンを走査するよう求められた場合。上限はパースが開始される前に強制されるため、悪意のある供給者が検証器を二次的な処理に追い込んだり、任意に深いチェーンでリソースを枯渇させたりすることはできません。デフォルトの上限である 10 は PKIX-CMP プロファイル(RFC 4210 §5.3.18)に従います。実世界のチェーンは 5~6 エントリに収まります。PkiPathValidationException のサブクラスです。
  • コンテキストフィールド。 空の getContext() を継承します。理由文字列 chain_length_exceeded: supplied=<n> cap=<n> が親の $reasons に転送されます。public readonly プロパティ: $supplied$cap
  • 復旧。 上限内のチェーンを供給するか、正当により長いチェーンが想定される場合は構成済みの上限を引き上げてください。
  • 送出される条件。 パス検証器が、その強制がまだ実装されていない critical な X.509 拡張に遭遇した場合。RFC 5280 §4.2 に従い、認識されない critical 拡張はフェイルクローズしなければなりません。critical 拡張をサイレントにスキップするとセキュリティリグレッションになるため、strict モードと lenient モードの両方がここでフェイルクローズします。検証器はチェーン構築、AKI/SKI のマッチング、key usage、extended key usage、basic constraints、有効期限、署名検証をカバーします。それ以外の critical なものはここで表面化します。PkiPathValidationException のサブクラスです。
  • コンテキストフィールド。 空の getContext() を継承します。構造化された理由は親の $reasons に転送されます。public readonly プロパティ: $extensionOid(ドット区切りの OID、例: 名前制約の場合 2.5.29.30)、$extensionName$clauseRef(RFC 5280 の条項および deferred-items ログエントリへのポインター)。
  • 復旧。 lenient モードでは、実際のパス検証の失敗を握りつぶすことなく、より粗いポリシーにフォールバックするために、この特定のサブクラスを捕捉してください。どの拡張が検証をブロックしているかを確認するには、$extensionOid$clauseRef を PKI のフィクスチャと突き合わせて監査してください。
  • 送出される条件。 OCSP と証明書失効リスト(CRL)の両方のエンドポイントが、決定的な判定なしに尽きた場合。OCSP のトランスポート失敗または不正な応答、CRL のトランスポート失敗または不正な CRL であり、両方のサーキットブレーカーが開いている、または両方のキャッシュが欠落している場合です。strict モードはこれをフェイルクローズとして扱います。lenient モードはこれを捕捉し、revocation = null で PSR-3 の警告を発行します。SecurityException を継承します。
  • コンテキストフィールド。 getContext() をオーバーライドしません(空のデフォルトを継承)。状態を public readonly プロパティ $ocspState$crlState(それぞれデフォルトは unknown)に保持します。
  • 復旧。 失効ソースへの到達可能性を回復するか、サーキットブレーカーが閉じるのを待つか、キャッシュをウォームアップしてから再試行してください。長期検証の成果物を得るためにこれを抑制しないでください。失効のアサーションはそのレベルの一部です。
  • 送出される条件。 RFC 6960 §4.2.2.2 の BasicOCSPResponse 署名が、レスポンダーの証明書に対する暗号的検証に失敗した場合。パーサーは signatureAlgorithm(RSA-PSS、ECDSA、または RSA-PKCS1v15)をデコードし、tbsResponseData に対する signature を検証します。いずれの失敗もこの型付き例外を送出するため、呼び出し側は、構造的には有効だが暗号的に改ざんされた応答と、不正な DER の応答とを区別できます。非 final であるため、下流のパッケージはより具体的なサブクラスを公開できます。SecurityException を継承します。
  • コンテキストフィールド。 getContext() をオーバーライドしません(空のデフォルトを継承)。失敗タグを public readonly プロパティ $reason(例: signature_mismatchresponder_cert_not_in_bundleunsupported_signature_algorithm)に保持します。自由テキストの detail はメッセージに織り込まれます。
  • 復旧。 $reason を検査してください。responder_cert_not_in_bundle の場合は、正しいトラストアンカーバンドルとレスポンダー証明書を供給してください。signature_mismatch の場合は、応答を信頼できないものとして扱ってください。Signature and timestamp failuresを参照してください。
  • 送出される条件。 RFC 3161 のタイムスタンプ局(TSA)通信または応答パースの失敗。TSA がエラーステータスを返す、HTTP リクエストが失敗する、または ASN.1 応答をパースできない場合です。これは TSA 障害階層の基底であり、検証の失敗が継承できるよう非 final です。NextPdfException を継承します。
  • コンテキストフィールド。 getContext() をオーバーライドしません(空のデフォルトを継承)。
  • 復旧。 あらゆる TSA 障害のパスには TsaException を捕捉してください。TSA の到達可能性と、エンドポイントが整形式の RFC 3161 応答を返すことを確認してください。
  • 送出される条件。 RFC 3161 の TimeStampToken の CMS 検証が、要求された検証ステップのいずれかで失敗した場合。RFC 5816 §3 の ESSCertIDv2 バインディング、RFC 5652 §11 の署名属性の完全性、RFC 3161 §2.4.2 の producedAt の鮮度、または RFC 5652 §5.4 の SignerInfo 署名です。フェイルクローズであり、監査パイプラインがメッセージを grep することなく、リプレイ、クロックスキュー、証明書の不一致を区別できるよう、型付きのステップ判別子を備えています。TsaException のサブクラスであるため、レガシーの catch (TsaException) ハンドラーは引き続き発火します。
  • コンテキストフィールド。 step(失敗したパイプラインの Step 値)と message。アクセサー: getStep()
  • 復旧。 開発者(誤設定された TSA 証明書またはスキュー許容差)またはセキュリティ(MITM やリプレイの疑い)が対処可能です。step を読み取って失敗したステージを特定し、対応する入力またはトラスト構成を修正してください。
  • 送出される条件。 DER の走査が不正または切り詰められた境界に達したことを示す内部シグナルで、TSA トークン検証器内部の低レベルウォーカーによって送出されます。常に public な verify 境界で捕捉され、適切なステップ判別子を保持する TsaTokenVerificationException に再ラップされます。呼び出し側のコードに漏れることは決してありません。RuntimeException を継承し、@internal とマークされています。
  • コンテキストフィールド。 なし。
  • 復旧。 呼び出し側に公開されるものではありません。代わりにラップされた TsaTokenVerificationException を処理してください。

これらは RuntimeException を継承し、getContext() を公開しません。どちらもフェイルクローズなデコーダーです。

  • 送出される条件。 名前制約デコーダーが、忠実にデコードできない強制可能な GeneralSubtree 要素に遭遇した場合。RFC 5280 §4.2.1.10 は、依拠当事者が強制可能な名前制約を処理するか証明書を拒否することを要求します。従来のサイレントなドロップをこの型付きの失敗に変換することで、受け入れる名前のセットをサイレントに広げてしまうフェイルオープンを防ぎます。範囲は強制可能な名前形式(directoryName、dNSName、iPAddress、rfc822Name、uniformResourceIdentifier)に限定されます。強制不能な形式は引き続き無視可能であり、これを送出することはありません。名前付きコンストラクター: undecodableEnforceableBase()@internal とマークされています。
  • コンテキストフィールド。 なし。ログに安全な詳細文字列はメッセージに保持されます。
  • 復旧。 強制側はフェイルクローズな name_constraints: の理由を表面化し、チェーンは拒否されます。証明書の名前制約のエンコードを調査してください。強制を緩めないでください。
  • 送出される条件。 qcStatements 拡張が構造的に不正な場合。切り詰められた DER、誤ったタグ、または長さのオーバーフローです。デコーダーはフェイルクローズであり、拡張が何を述べているか確実に判定できない場合に、部分的またはヒューリスティックな結果を返すのではなく送出します。@api とマークされています。
  • コンテキストフィールド。 なし。
  • 復旧。 不正なエンコードを許容するつもりがある場合のみ、明示的に捕捉してください。それ以外の場合は、証明書の qualified-certificate ステートメントを判定不能として扱い、証明書を拒否するか再発行してください。
  • 送出される条件。 PKCS#11 v3.1 のセッション管理の不具合。すべての名前付きコンストラクターは、特定の不具合クラスと PKCS#11 の CKR_* 戻り値にマッピングされ、型付きの $kind 判別子を通じて公開されるため、呼び出し側は壊れやすいメッセージマッチングではなく安定した enum 文字列に基づいて分岐できます。コンストラクターには次が含まれます。cryptokiNotInitialized()userNotLoggedIn()userAlreadyLoggedIn()operationNotInitialized()operationActive()mechanismNotAllowed()tokenDisconnected()concurrentSessionLimitExceeded()sessionAlreadyClosed()stateTransitionInvalid()osLockingRequired()loginTtlExpired()signOperationTtlExpired()SecurityException を継承します。
  • コンテキストフィールド。 getContext() をオーバーライドしません(空のデフォルトを継承)。型付きの種類を public readonly プロパティ $kindKIND_* 定数の 1 つ、例: KIND_USER_NOT_LOGGED_INKIND_TOKEN_DISCONNECTEDKIND_LOGIN_TTL_EXPIRED)に保持します。スロットおよびセッションの識別子、メカニズム、TTL の値はメッセージに現れます。PIN と証明書バイトは決して含まれません。
  • 復旧。 $kind で分岐してください。user_not_logged_in の場合は、署名操作を初期化する前にユーザー PIN でログインしてください。token_disconnected の場合は、そのスロット上のすべてのセッションを孤立したものとして扱ってください。TTL 系の種類については、再認証するか操作を再初期化してください。mechanism_not_allowed の場合は、構成済みのメカニズム許可リストを拡張するか、許可されたメカニズムを選択してください。