安全性與簽署錯誤
本頁記錄 NextPDF\Security 命名空間樹中的安全領域例外狀況。每個條目都會具名說明該類別、何時被拋出、列出其 getContext() 所回傳的欄位,並提供一個復原步驟。
這些類別大多繼承自 SecurityException,後者繼承 NextPdfException 並實作 ContextAwareExceptionInterface。這表示 getContext(): array 回傳結構化、不含密鑰的診斷資料,你可將其路由到記錄或 application performance monitoring(APM)管線。攔截 SecurityException 可在一個區塊內捕捉每一個安全領域的失敗;當你需要某個特定子類別的具型別酬載時,再攔截該子類別。
這棵樹中有少數類別直接繼承 RuntimeException,而非 SecurityException。那些類別在下方有標示;它們不揭露 getContext(),而且大多被記載為你不應期望在應用程式碼中攔截的內部控制流訊號。
脈絡欄位慣例
標題為「脈絡欄位慣例」的區段| 面向 | 行為 |
|---|---|
| 基底合約 | NextPdfException::getContext() 回傳 [];子類別會覆寫它。 |
| 密鑰衛生 | 訊息與脈絡會省略原始金鑰材料、明文、PIN 與初始化向量(IV)位元組。金鑰僅以指紋前綴揭露。 |
SecurityException | 抽象基底;本身不攜帶任何欄位。子類別定義其酬載。 |
基底型別
標題為「基底型別」的區段SecurityException
標題為「SecurityException」的區段- 何時被拋出。 絕不直接拋出;它是安全領域的抽象基底。它的存在是為了讓單一的
catch (SecurityException $e)區塊能捕捉認證式加密的完整性失敗、防 nonce 重用的防禦、PDF/A 對加密的綁定、金鑰管理故障與 PKI 失敗。 - 脈絡欄位。 本身沒有任何欄位。它沿用
NextPdfException的空預設值;子類別填充酬載。 - 解法。 攔截具體子類別以進行可採取行動的處理,或攔截
SecurityException以進行粗略的安全事件路由。
加密與認證式加密錯誤
標題為「加密與認證式加密錯誤」的區段這些由 AES-GCM(Galois/Counter Mode)加密器與 PDF/A 守衛所拋出。若要先看症狀的引導,請參見加密與權限。
DecryptionFailedException
標題為「DecryptionFailedException」的區段- 何時被拋出。 當帶有關聯資料的認證式加密(AEAD)解密因非竄改原因而失敗時:被截斷的密文、缺少 IV,或在 API 邊界提供了錯誤的金鑰,以致沒有足夠的材料讓完整性檢查實際執行。這是組態或傳輸錯誤,而非安全事件。
- 脈絡欄位。
algorithm(例如AES-256-GCM)、reason(例如ciphertext shorter than IV+tag)。 - 解法。 查驗密文、IV 與金鑰是否完整且正確封裝;不要把這當作竄改。請與
TamperedDataException對照。
TamperedDataException
標題為「TamperedDataException」的區段- 何時被拋出。 當 AEAD 認證標籤驗證失敗時。該標籤涵蓋密文加上關聯認證資料(AAD);若任一者在加密後遭修改,底層的
openssl_decrypt()會回傳false。這個獨立的子型別讓你能揭露一個安全事件等級的警示,而非封裝錯誤。 - 脈絡欄位。
algorithm、ciphertext_length(被拒絕密文的長度,不含 IV 與標籤)。 - 解法。 把它當作竄改或錯誤的金鑰/IV。不要盲目重試;請調查該密文的來源。依 ISO/TS 32003:2023 §5.2 與 NIST SP 800-38D §6.5,標籤檢查失敗代表該資料並不真實。
NonceReuseException
標題為「NonceReuseException」的區段- 何時被拋出。 當 AES-GCM 被要求以相同的金鑰與 IV 對加密兩次時。加密器以每個實例的單調計數器防禦,並作為縱深防禦,再加上一個記錄每一個已發出(金鑰指紋、IV)對的執行階段雜湊集合。由於計數器在構造上即排除碰撞,此觸發是一個關鍵優先等級的程式錯誤指標,在生產中絕不應發生。重用金鑰/IV 對會危及整個金鑰串流(ISO/TS 32003:2023 §5.2 NOTE 2;NIST SP 800-38D §8.3)。
- 脈絡欄位。
key_fingerprint_prefix(SHA-256(key) 的前 8 個十六進位字元)、iv_length(對 ISO/TS 32003 一律為 12)、reason(hashset-collision或counter-rollover,用以區分擊敗計數器的重構錯誤與 2^63 計數器絆線),以及iv_fixed_field_hex(IV 固定欄位,僅在提供時才存在,以自己的鍵回報,且絕不被誤標為金鑰指紋)。 - 解法。 立即中止並輪替金鑰。提交一份缺陷回報;這表示加密器中有程式錯誤,而非呼叫端的輸入不良。
GcmInvocationLimitExceededException
標題為「GcmInvocationLimitExceededException」的區段- 何時被拋出。 當某個 AES-GCM 金鑰達到一個可選加入的 NIST SP 800-38D §8.3 使用安全性呼叫計數時。這是一個縱深防禦的遙測掛鉤,供想要比加密器內部架構限制更早就強制執行該規範建議上限(每把金鑰約 2^32 次呼叫)的呼叫端使用。它預設不會觸發;只有
assertWithinSafetyBound()輔助方法會拋出它。 - 脈絡欄位。
key_fingerprint_prefix、invocation_count(當前的encrypt()計數,等於或高於上限)、invocation_limit(可選加入的上限)。 - 解法。 在累積的碰撞與偽造機率不再可忽略之前,輪替文件金鑰(以新的金鑰材料建構一個全新的加密器),或擴充呼叫端政策以拒絕繼續提供服務。
IncompatiblePdfAModeException
標題為「IncompatiblePdfAModeException」的區段- 何時被拋出。 當在一份標記為 PDF/A 的文件上嘗試加密操作時。PDF/A 家族(PDF/A-2、PDF/A-3、PDF/A-4)一致禁止加密:依 ISO 19005 §6.1.3,
Encrypt鍵不得出現在 trailer 中,而 ISO 19005-4:2020 附錄 A 與 B 原封不動地繼承了這一點。PDF/A 與加密之間並無任何被允許的組合。 - 脈絡欄位。
pdfa_mode(例如pdfa4、pdfa3)、encryption_operation(被拒絕的呼叫,例如useAesGcm)。 - 解法。 若要產生加密文件,省略
enablePdfA()呼叫;若要產生封存文件,省略加密呼叫。請參見 PDF/A 與 PDF/UA 驗證。
密碼政策強制
標題為「密碼政策強制」的區段CryptoPolicyViolationException
標題為「CryptoPolicyViolationException」的區段- 何時被拋出。 當所設定的密碼政策拒絕由某個核心簽署、加密或雜湊操作所選定的演算法、金鑰強度或密碼時。它是合規強制的失敗即關閉邊界(例如 FIPS 140-2/3、eIDAS 或自訂的企業政策),並在任何簽章或密文被產生之前由
CryptoPolicyEnforcer拋出,因此一個違反政策的操作永遠無法發出未經核准的產出物。它與狹義的 OpenSSL 操作失敗以及簽署基元失敗都不同:這是對一個其餘有效的請求的政策拒絕。與 NIST SP 800-131A Rev. 2 及 ISO/IEC 19790:2025 §7 對齊。 - 脈絡欄位。
policy(政策名稱,例如FIPS 140-3 Strict)、category(hash、signature、encryption或key-strength)、item(被拒絕的項目,例如物件識別碼(OID)、密碼名稱或rsa/1024)、reason。 - 解法。 選擇一個受該具名政策核准的演算法、金鑰長度或密碼,或在你擁有該政策時加以調整。將結構化的脈絡路由到已載明的合規操作手冊。
金鑰管理
標題為「金鑰管理」的區段存在兩個同名的類別。它們共用 SecurityException 根,因此一個 catch (SecurityException $e) 區塊可捕捉兩者,但它們攜帶不同的酬載。當你需要某個特定形狀時,請以完整限定名稱匯入。
KeyManagementException(生命週期:NextPDF\Security\Exception)
標題為「KeyManagementException(生命週期:NextPDF\Security\Exception)」的區段- 何時被拋出。 當一個金鑰管理操作在金鑰被簽署或加密基元消費之前就失敗時:Privacy-Enhanced Mail(PEM)、PKCS#12 或 PKCS#11 金鑰解析失敗;金鑰衍生(HKDF、PBKDF2、scrypt)失敗;在錯誤的金鑰加密金鑰上的 AES Key Wrap(RFC 3394)拒絕;一個硬體安全模組(HSM)回傳格式錯誤的 Distinguished Encoding Rules(DER);或 Ed25519 種子長度不符。
- 脈絡欄位。
operation(例如load_pem、kek_derive、key_wrap)、key_type(例如RSA、EC-P256、Ed25519、AES-256)、reason。原始金鑰材料絕不包含在內。 - 解法。 檢視具名的操作與金鑰型別,修正來源金鑰材料或衍生輸入,然後重試。
KeyManagementException(簽署路徑:NextPDF\Security\Signature\Exception)
標題為「KeyManagementException(簽署路徑:NextPDF\Security\Signature\Exception)」的區段- 何時被拋出。 當簽署器提供者遇到金鑰管理故障時:所請求的金鑰版本未知、已停用、已排程銷毀、缺少簽署權限,或在其他方面不可用。這是
RsaPssSigner與LocalKeySignerProvider在實際金鑰失敗時所拋出的型別。具名建構式:unknownKeyVersion()與keyVersionDisabled()。 - 脈絡欄位。
providerId、keyVersion、reason。存取器:providerId()、keyVersion()、reason()。 - 解法。 輪替金鑰或重新賦予金鑰權限,或選擇一個可用的金鑰版本,然後重試。它與
SignatureFailedException不同,後者表示簽署基元本身失敗了。
若要先看症狀、針對無法達成的層級與缺漏的能力的引導,請參見簽章與時間戳記失敗。
SignatureFailedException(R4-13:NextPDF\Security\Exception)
標題為「SignatureFailedException(R4-13:NextPDF\Security\Exception)」的區段- 何時被拋出。 當一個密碼學簽署操作失敗時:RSA、ECDSA 或 Ed25519 簽署基元回傳
false或長度錯誤的輸出;一個 HSM 或 PKCS#11 權杖以非成功狀態回應;Cryptographic Message Syntax(CMS)SignedData組裝因格式錯誤的憑證或鏈而失敗;或 Ed25519 來回自我驗證失敗。新程式碼應偏好此 R4-13 子型別,而非舊有與 PAdES 耦合的簽章例外狀況。 - 脈絡欄位。
operation(例如sign、verify、build_cms)、algorithm(例如rsa-pkcs1v15-sha256、ed25519)、reason。存取器:getOperation()、getAlgorithm()、getReason()。 - 解法。 讀取操作與演算法,更正輸入(金鑰、憑證鏈或後端可用性),然後重試。與 ETSI EN 319 142-1 的失敗即關閉金鑰處理姿態對齊。
SignatureFailedException(SPI:NextPDF\Security\Signature\Exception)
標題為「SignatureFailedException(SPI:NextPDF\Security\Signature\Exception)」的區段- 何時被拋出。 當一個
SignerProviderInterface實作因任何未被歸類為金鑰管理的原因而無法完成簽署操作時:後端驅動程式錯誤、格式錯誤的金鑰材料,或無法復原的 HSM I/O。這是失敗即關閉簽署合約的兜底型別,在該合約中,每個基元在失敗時都會拋出例外狀況,而非回傳null、false或空字串。具名建構式:forProvider()。 - 脈絡欄位。
providerId、reason。存取器:providerId()、reason()。 - 解法。 檢視提供者 id 與原因,修正提供者後端或金鑰材料,然後重試。在
KeyManagementException與此型別之間分支處理,以區分「金鑰不良」與「基元失敗」。
SignatureLevelUnreachableException
標題為「SignatureLevelUnreachableException」的區段- 何時被拋出。 當所請求的 PAdES 合規層級在當前執行階段基礎設施下無法達成(最常見的是 B-T 以上層級缺少時間戳記授權機構),而呼叫端並未授予降級的許可時。預設為失敗即關閉:引擎寧可拒絕,也不悄悄產生較低的層級卻同時對外宣稱較高的層級——那會是 eIDAS 等級的退步。與 ETSI EN 319 142-1 §6 對齊。請注意,此類別直接繼承
NextPdfException(而非SecurityException)。 - 脈絡欄位。
requestedLevel、highestAchievableLevel、reason。存取器:requestedLevel()、highestAchievableLevel()、reason()。 - 解法。 讀取
reason以辨識缺少的基礎設施並補上(例如設定一個時間戳記授權機構),或把allowDegradation: true傳給PadesOrchestrator以刻意接受最高可達成的層級。
SignerProviderNotFoundException
標題為「SignerProviderNotFoundException」的區段- 何時被拋出。 當
SignerProviderRegistry::get()被要求取得一個未註冊的提供者 id 時。實作 PSR-11NotFoundExceptionInterface,因此該登錄符合 PSR-11 容器合約。具名建構式:forId()。此類別繼承RuntimeException,且不揭露getContext()。 - 脈絡欄位。 無。未註冊的 id 會出現在訊息中。
- 解法。 在請求之前,以預期的 id 註冊該提供者,或更正你傳給登錄的 id。
雜湊(SHAKE256)
標題為「雜湊(SHAKE256)」的區段這些繼承 RuntimeException,且不揭露 getContext()。SHAKE256 是某些 ISO/TS 32001 路徑所需的 SHA-3 可延伸輸出函數。
Shake256NotAvailableException
標題為「Shake256NotAvailableException」的區段- 何時被拋出。 在摘要計算時,當所選提供者無法滿足該請求時。具名建構式:
noBackend()(此主機上跨所有嘗試層級都沒有可運作的 SHAKE256 後端)與ffiCallFailed()(一個 FFI 綁定的 OpenSSL EVP 呼叫回傳了非成功狀態,例如來自一個被精簡的 libcrypto 建置)。 - 脈絡欄位。 無。訊息會具名說明嘗試過的層級或失敗的符號。
- 解法。 安裝具備 OpenSSL 3.x 的
ext-ffi,或升級到一個在hash_algos()中揭露shake256的 PHP 建置。刻意不隨附使用者層的 Keccak 退路。
Shake256ProviderNotAvailableException
標題為「Shake256ProviderNotAvailableException」的區段- 何時被拋出。 當能力探測失敗、以致提供者無法被實例化時,從某個 SHAKE256 提供者建構式拋出。它是一個控制流訊號:提供者登錄會攔截它、記錄層級標籤,並嘗試下一個層級。它絕不應逸出到應用程式碼中。具名建構式:
forTier()。 - 脈絡欄位。 無。訊息會具名說明層級與原因。
- 解法。 並非呼叫端可直接採取行動;若整個層級鏈都已耗盡,登錄會改為揭露
Shake256NotAvailableException::noBackend(),後者攜帶面向維運人員的修正方式。
文件 MAC 完整性(ISO/TS 32004)
標題為「文件 MAC 完整性(ISO/TS 32004)」的區段這些涵蓋 ISO/TS 32004 文件層級的訊息認證碼(MAC),儲存在 /AuthCode 之下。兩者都繼承 NextPdfException 並覆寫 getContext()。
DocumentMacTokenException
標題為「DocumentMacTokenException」的區段- 何時被拋出。 當一個 CMS
AuthenticatedDataMAC 權杖結構上格式錯誤,或宣告了一個在約定的 ISO/TS 32004 集合之外的演算法時,由 MAC 權杖讀取器失敗即關閉地拋出。具名建構式:malformed()與algorithmMismatch()。標記為@internal。 - 脈絡欄位。
status(DocumentMacVerificationStatus值,為MalformedToken或AlgorithmMismatch)。公開的 readonly 屬性:$status。 - 解法。 把該文件當作未經驗證。一個格式錯誤的權杖或一個約定集合之外的演算法,都意味著 MAC 無法建立信任;不要假設內容已受保護而繼續進行。
DocumentMacVerificationException
標題為「DocumentMacVerificationException」的區段- 何時被拋出。 當一個文件層級的 MAC 驗證無法達到受信任狀態時失敗即關閉地拋出:缺少或格式錯誤的
/AuthCode、約定集合之外的演算法、解包失敗,或 MAC 不符(竄改)。驗證器的verify()會回傳一個明確的結果以供分支;這是由assertVerified()拋出的例外狀況流對應項,讓「信任內容」的程式碼永遠無法越過一份未經驗證的文件繼續進行。具名建構式:fromResult()。 - 脈絡欄位。
status(DocumentMacVerificationStatus值)。公開的 readonly 屬性:$status。 - 解法。 不要信任該文件內容。檢視
status以區分竄改(MAC 不符)與組態問題(缺少或格式錯誤的/AuthCode、演算法不符)。
PKI 路徑驗證(RFC 5280)
標題為「PKI 路徑驗證(RFC 5280)」的區段這些涵蓋 RFC 5280 憑證路徑驗證。基底型別及其子類別都是失敗即關閉。
PkiPathValidationException
標題為「PkiPathValidationException」的區段- 何時被拋出。 來自 RFC 5280 路徑驗證器的一個嚴格模式失敗。它是較狹義子類別(
ChainLengthExceededException、UnsupportedExtensionException)的非 final 基底,因此攔截此型別的處理器也會透過里氏替換攔截那些子類別。繼承SecurityException。 - 脈絡欄位。 未覆寫
getContext()(沿用空預設值)。它把結構化的原因攜帶在凍結的公開 readonly 陣列屬性$reasons中(一個由規則名稱加描述字串組成的非空清單)。 - 解法。 讀取
$reasons以辨識失敗的規則,修正憑證鏈,然後重新驗證。攔截此型別可一致地處理任何路徑驗證失敗。
ChainLengthExceededException
標題為「ChainLengthExceededException」的區段- 何時被拋出。 當路徑驗證器被要求走訪一條長度超出所設定上限的鏈時。該上限在任何解析開始之前就強制執行,因此惡意供應者無法以一條任意深的鏈把驗證器逼入二次方工作量或耗盡資源。預設上限 10 遵循 PKIX-CMP 設定檔(RFC 4210 §5.3.18);真實世界的鏈可容於 5 到 6 個項目。
PkiPathValidationException的子類別。 - 脈絡欄位。 沿用空的
getContext();原因字串chain_length_exceeded: supplied=<n> cap=<n>會被轉送到父類別的$reasons。公開的 readonly 屬性:$supplied、$cap。 - 解法。 提供一條在上限之內的鏈,或在預期會有一條合法較長鏈時提高所設定的上限。
UnsupportedExtensionException
標題為「UnsupportedExtensionException」的區段- 何時被拋出。 當路徑驗證器遇到一個其強制尚未實作的關鍵 X.509 擴充功能時。依 RFC 5280 §4.2,一個無法辨識的關鍵擴充功能必須失敗即關閉;此處嚴格與寬鬆模式皆失敗即關閉,因為悄悄略過一個關鍵擴充功能會是一項安全退步。驗證器涵蓋鏈構建、AKI/SKI 比對、金鑰用途、擴充金鑰用途、基本限制、到期與簽章驗證;任何其他關鍵者都會在此揭露。
PkiPathValidationException的子類別。 - 脈絡欄位。 沿用空的
getContext();結構化的原因會被轉送到父類別的$reasons。公開的 readonly 屬性:$extensionOid(帶點 OID,例如名稱限制的2.5.29.30)、$extensionName、$clauseRef(指向 RFC 5280 子句與延後項目日誌條目的指標)。 - 解法。 在寬鬆模式中,攔截此特定子類別以退回到較粗略的政策,而不吞掉真正的路徑驗證失敗。將
$extensionOid與$clauseRef對照你的 PKI 夾具加以稽核,以查明是哪個擴充功能在阻擋驗證。
RevocationCheckFailedException
標題為「RevocationCheckFailedException」的區段- 何時被拋出。 當 OCSP 與憑證撤銷清單(CRL)端點都已耗盡卻無明確裁定時:OCSP 傳輸失敗或格式錯誤的回應,以及 CRL 傳輸失敗或格式錯誤的 CRL,且兩個斷路器都開啟或兩個快取都遺失。嚴格模式把這當作失敗即關閉;寬鬆模式攔截它並以
revocation = null發出一則 PSR-3 警告。繼承SecurityException。 - 脈絡欄位。 未覆寫
getContext()(沿用空預設值)。它把狀態攜帶在公開的 readonly 屬性$ocspState與$crlState中(各自預設為unknown)。 - 解法。 恢復對某個撤銷來源的可連線性、等待斷路器關閉,或暖機快取,然後重試。不要為了取得長期驗證的產出物而抑制此失敗;撤銷主張是該層級的一部分。
OCSP 簽章驗證(RFC 6960)
標題為「OCSP 簽章驗證(RFC 6960)」的區段OcspSignatureInvalidException
標題為「OcspSignatureInvalidException」的區段- 何時被拋出。 當一個 RFC 6960 §4.2.2.2
BasicOCSPResponse簽章對回應者的憑證進行密碼學驗證失敗時。解析器會解碼signatureAlgorithm(RSA-PSS、ECDSA 或 RSA-PKCS1v15)並對tbsResponseData驗證signature;任何失敗都會拋出此具型別的例外狀況,讓呼叫端能把一個結構有效但密碼學上被竄改的回應,與一個格式錯誤的 DER 回應區分開來。非 final,因此下游套件可發布更具體的子類別。繼承SecurityException。 - 脈絡欄位。 未覆寫
getContext()(沿用空預設值)。它把失敗標籤攜帶在公開的 readonly 屬性$reason中(例如signature_mismatch、responder_cert_not_in_bundle、unsupported_signature_algorithm);自由文字的detail則摺入訊息中。 - 解法。 檢視
$reason。對於responder_cert_not_in_bundle,提供正確的信任錨點套件與回應者憑證。對於signature_mismatch,把該回應當作不可信任。請參見簽章與時間戳記失敗。
時間戳記(RFC 3161)
標題為「時間戳記(RFC 3161)」的區段TsaException
標題為「TsaException」的區段- 何時被拋出。 當 RFC 3161 時間戳記授權機構(TSA)通訊或回應解析發生失敗時:TSA 回傳錯誤狀態、HTTP 請求失敗,或 ASN.1 回應無法被解析。它是 TSA 故障階層的基底,且為非 final,使驗證失敗能擴充它。繼承
NextPdfException。 - 脈絡欄位。 未覆寫
getContext()(沿用空預設值)。 - 解法。 攔截
TsaException以處理任何 TSA 故障路徑。查驗 TSA 可連線性,以及該端點是否回傳格式正確的 RFC 3161 回應。
TsaTokenVerificationException
標題為「TsaTokenVerificationException」的區段- 何時被拋出。 當一個 RFC 3161
TimeStampToken的 CMS 驗證在任一受規範的驗證步驟失敗時:RFC 5816 §3 ESSCertIDv2 綁定、RFC 5652 §11 簽署屬性完整性、RFC 3161 §2.4.2producedAt新鮮度,或 RFC 5652 §5.4SignerInfo簽章。失敗即關閉,並帶有一個具型別的步驟判別子,讓稽核管線無須 grep 訊息就能分辨重放、時鐘偏移與憑證不符。TsaException的子類別,因此舊有的catch (TsaException)處理器仍會觸發。 - 脈絡欄位。
step(失敗的管線Step值)與message。存取器:getStep()。 - 解法。 可由開發者(設定錯誤的 TSA 憑證或偏移容忍度)或安全(疑似 MITM 或重放)採取行動。讀取
step以定位失敗的階段,並修正對應的輸入或信任組態。
MalformedDerException
標題為「MalformedDerException」的區段- 何時被拋出。 一個內部訊號,代表一次 DER 走訪遇到了格式錯誤或被截斷的邊界,由 TSA 權杖驗證器內部的低階走訪器拋出。它一律在公開的 verify 邊界被攔截,並重新包裝成一個攜帶適當步驟判別子的
TsaTokenVerificationException;它絕不洩漏到呼叫端程式碼。繼承RuntimeException;標記為@internal。 - 脈絡欄位。 無。
- 解法。 並非面向呼叫端。請改為處理被包裝的
TsaTokenVerificationException。
憑證擴充功能解碼
標題為「憑證擴充功能解碼」的區段這些繼承 RuntimeException,且不揭露 getContext()。兩者都是失敗即關閉的解碼器。
NameConstraintsDecodeException
標題為「NameConstraintsDecodeException」的區段- 何時被拋出。 當名稱限制解碼器遇到一個它無法忠實解碼的可強制
GeneralSubtree元素時。RFC 5280 §4.2.1.10 要求依賴方必須處理一個可強制的名稱限制,否則拒絕該憑證;把先前的靜默捨棄轉成此具型別的失敗,可避免一個本會悄悄擴大被接受名稱集合的失敗即開啟。範圍僅限於可強制的名稱形式(directoryName、dNSName、iPAddress、rfc822Name、uniformResourceIdentifier);不可強制的形式仍可忽略,且絕不會拋出它。具名建構式:undecodableEnforceableBase()。標記為@internal。 - 脈絡欄位。 無。一個不洩漏日誌的細節字串攜帶在訊息中。
- 解法。 強制器會揭露一個失敗即關閉的
name_constraints:原因,且該鏈會被拒絕。請調查該憑證的名稱限制編碼;不要放寬強制。
QcStatementsDecodeException
標題為「QcStatementsDecodeException」的區段- 何時被拋出。 當
qcStatements擴充功能結構上格式錯誤時:被截斷的 DER、錯誤的標籤,或長度溢位。該解碼器是失敗即關閉的,當它無法確定地判斷該擴充功能在表達什麼時,寧可拋出,也不回傳一個部分或啟發式的結果。標記為@api。 - 脈絡欄位。 無。
- 解法。 只有在你打算容忍格式錯誤的編碼時,才明確攔截它;否則把該憑證的合格憑證聲明當作無法確定,並拒絕或重新簽發該憑證。
PKCS#11 工作階段
標題為「PKCS#11 工作階段」的區段Pkcs11SessionException
標題為「Pkcs11SessionException」的區段- 何時被拋出。 一個 PKCS#11 v3.1 工作階段管理缺陷。每個具名建構式都對應到一個特定的缺陷類別,以及一個 PKCS#11
CKR_*回傳值,透過具型別的$kind判別子揭露,讓呼叫端能在一個穩定的列舉字串上分支,而非脆弱的訊息比對。建構式包括:cryptokiNotInitialized()、userNotLoggedIn()、userAlreadyLoggedIn()、operationNotInitialized()、operationActive()、mechanismNotAllowed()、tokenDisconnected()、concurrentSessionLimitExceeded()、sessionAlreadyClosed()、stateTransitionInvalid()、osLockingRequired()、loginTtlExpired()與signOperationTtlExpired()。繼承SecurityException。 - 脈絡欄位。 未覆寫
getContext()(沿用空預設值)。它把具型別的 kind 攜帶在公開的 readonly 屬性$kind中,為KIND_*常數之一(例如KIND_USER_NOT_LOGGED_IN、KIND_TOKEN_DISCONNECTED、KIND_LOGIN_TTL_EXPIRED)。插槽與工作階段識別碼、機制與 TTL 值會出現在訊息中。PIN 與憑證位元組絕不包含在內。 - 解法。 對
$kind進行 switch。對於user_not_logged_in,在初始化簽署操作之前,以使用者 PIN 登入。對於token_disconnected,把該插槽上的所有工作階段都當作孤立。對於 TTL 類型,重新認證或重新初始化該操作。對於mechanism_not_allowed,擴充所設定的機制允許清單,或挑選一個被允許的機制。