Pular para o conteúdo
getnextpdf.com

Erros de segurança e assinatura

Esta página documenta as exceções de domínio de segurança na árvore de namespaces NextPDF\Security. Cada entrada nomeia a classe, indica quando ela é gerada, lista os campos que seu getContext() retorna e fornece uma etapa de recuperação.

A maioria dessas classes estende SecurityException, que estende NextPdfException e implementa ContextAwareExceptionInterface. Isso significa que getContext(): array retorna diagnósticos estruturados e livres de segredos que você pode rotear para pipelines de logging ou de monitoramento de desempenho de aplicações (APM). Capture SecurityException para interceptar toda falha de domínio de segurança em um único bloco; capture uma subclasse específica quando precisar do seu payload tipado.

Algumas classes nesta árvore estendem RuntimeException diretamente, em vez de SecurityException. Essas estão marcadas abaixo; elas não expõem getContext(), e a maioria está documentada como sinais internos de fluxo de controle que você não deve esperar capturar em código de aplicação.

AspectoComportamento
Contrato baseNextPdfException::getContext() retorna []; as subclasses o sobrescrevem.
Higiene de segredosAs mensagens e o contexto omitem material de chave bruto, texto em claro, PINs e bytes do vetor de inicialização (IV). As chaves são expostas apenas como um prefixo de fingerprint.
SecurityExceptionBase abstrata; não carrega campos próprios. As subclasses definem o payload.
  • Quando é gerada. Nunca gerada diretamente; é a base abstrata para o domínio de segurança. Existe para que um único bloco catch (SecurityException $e) possa interceptar falhas de integridade de criptografia autenticada, defesas de reutilização de nonce, a vinculação PDF/A versus criptografia, falhas de gerenciamento de chaves e falhas de PKI.
  • Campos de contexto. Nenhum próprio. Herda o padrão vazio de NextPdfException; as subclasses preenchem o payload.
  • Recuperação. Capture a subclasse concreta para tratamento acionável, ou SecurityException para roteamento amplo de incidentes de segurança.

Erros de criptografia e de criptografia autenticada

Seção intitulada “Erros de criptografia e de criptografia autenticada”

Estes são gerados pelo encryptor AES-GCM (Galois/Counter Mode) e pelo guard PDF/A. Para orientação a partir do sintoma, consulte Criptografia e permissões.

  • Quando é gerada. Uma descriptografia de criptografia autenticada com dados associados (AEAD) falha por um motivo não relacionado à adulteração: texto cifrado truncado, um IV ausente, ou uma chave errada fornecida no limite da API, onde não havia material suficiente para que a verificação de integridade fosse realmente executada. Este é um erro de configuração ou de transporte, não um incidente de segurança.
  • Campos de contexto. algorithm (por exemplo AES-256-GCM), reason (por exemplo ciphertext shorter than IV+tag).
  • Recuperação. Verifique se o texto cifrado, o IV e a chave estão completos e corretamente estruturados; não trate isso como adulteração. Contraste com TamperedDataException.
  • Quando é gerada. A tag de autenticação AEAD falha na verificação. A tag cobre o texto cifrado mais os dados autenticados associados (AAD); se qualquer um deles foi modificado após a criptografia, o openssl_decrypt() subjacente retorna false. Esse subtipo distinto permite que você exponha um alerta de nível de incidente de segurança em vez de um erro de estrutura.
  • Campos de contexto. algorithm, ciphertext_length (comprimento do texto cifrado rejeitado, excluindo IV e tag).
  • Recuperação. Trate como adulteração ou como uma chave/IV errada. Não tente novamente às cegas; investigue a origem do texto cifrado. Conforme ISO/TS 32003:2023 §5.2 e NIST SP 800-38D §6.5, uma verificação de tag falha significa que os dados não são autênticos.
  • Quando é gerada. Pede-se ao AES-GCM que criptografe duas vezes com o mesmo par de chave e IV. O encryptor se defende com um contador monotônico por instância e, como defesa em profundidade, um hash-set em tempo de execução de cada par (fingerprint de chave, IV) emitido. Como o contador descarta colisões por construção, esse disparo é um indicador de bug de prioridade crítica que nunca deve ocorrer em produção. Reutilizar um par chave/IV compromete todo o keystream (ISO/TS 32003:2023 §5.2 NOTE 2; NIST SP 800-38D §8.3).
  • Campos de contexto. key_fingerprint_prefix (primeiros 8 caracteres hex de SHA-256(key)), iv_length (sempre 12 para ISO/TS 32003), reason (hashset-collision ou counter-rollover, distinguindo um bug de refatoração que derrota o contador do trip-wire do contador de 2^63) e iv_fixed_field_hex (o campo fixo do IV, presente apenas quando fornecido, relatado sob sua própria chave e nunca rotulado incorretamente como o fingerprint da chave).
  • Recuperação. Aborte imediatamente e rotacione a chave. Abra um relatório de defeito; isso indica um bug no encryptor, não uma entrada ruim do chamador.
  • Quando é gerada. Uma contagem de invocações de segurança de uso da NIST SP 800-38D §8.3, opcional, é atingida para uma dada chave AES-GCM. Este é um gancho de telemetria de defesa em profundidade para chamadores que querem impor o limite recomendado pela especificação (cerca de 2^32 invocações por chave) mais cedo do que os limites arquiteturais dentro do encryptor. Ela não dispara por padrão; apenas o helper assertWithinSafetyBound() a gera.
  • Campos de contexto. key_fingerprint_prefix, invocation_count (contagem atual de encrypt(), igual ou acima do limite), invocation_limit (o limite opcional).
  • Recuperação. Rotacione a chave do documento (construa um novo encryptor com novo material de chave) antes que a probabilidade cumulativa de colisão e falsificação deixe de ser desprezível, ou expanda a política do chamador para recusar a continuidade do serviço.
  • Quando é gerada. Uma operação de criptografia é tentada em um documento marcado como PDF/A. A família PDF/A (PDF/A-2, PDF/A-3, PDF/A-4) proíbe uniformemente a criptografia: conforme ISO 19005 §6.1.3 a chave Encrypt não deve estar presente no trailer, e a ISO 19005-4:2020 Anexos A e B herdam isso sem modificação. Não há combinação permitida de PDF/A e criptografia.
  • Campos de contexto. pdfa_mode (por exemplo pdfa4, pdfa3), encryption_operation (a chamada rejeitada, por exemplo useAesGcm).
  • Recuperação. Para produzir um documento criptografado, omita a chamada enablePdfA(); para produzir um documento de arquivamento, omita a chamada de criptografia. Consulte Validação de PDF/A e PDF/UA.
  • Quando é gerada. Uma política de criptografia configurada rejeita um algoritmo, força de chave ou cifra selecionados por uma operação central de assinatura, criptografia ou hashing. É o limite de falha fechada para imposição de conformidade (por exemplo FIPS 140-2/3, eIDAS ou política empresarial personalizada) e é gerada por CryptoPolicyEnforcer antes que qualquer assinatura ou texto cifrado seja produzido, para que uma operação que viole a política nunca possa emitir um artefato não aprovado. Distinta de uma falha restrita de operação OpenSSL e de uma falha de primitivo de assinatura: esta é uma rejeição de política de uma requisição válida em outros aspectos. Alinhada com NIST SP 800-131A Rev. 2 e ISO/IEC 19790:2025 §7.
  • Campos de contexto. policy (nome da política, por exemplo FIPS 140-3 Strict), category (hash, signature, encryption ou key-strength), item (o item rejeitado, por exemplo um identificador de objeto (OID), nome de cifra ou rsa/1024), reason.
  • Recuperação. Selecione um algoritmo, comprimento de chave ou cifra que a política nomeada aprove, ou ajuste a política se ela for sua. Roteie o contexto estruturado para o runbook de conformidade documentado.

Existem duas classes de mesmo nome. Elas compartilham a raiz SecurityException, então um bloco catch (SecurityException $e) intercepta ambas, mas carregam payloads distintos. Importe pelo nome totalmente qualificado quando precisar de um formato específico.

KeyManagementException (ciclo de vida: NextPDF\Security\Exception)

Seção intitulada “KeyManagementException (ciclo de vida: NextPDF\Security\Exception)”
  • Quando é gerada. Uma operação de gerenciamento de chaves falha antes que a chave seja consumida por um primitivo de assinatura ou criptografia: falhas de parsing de chave Privacy-Enhanced Mail (PEM), PKCS#12 ou PKCS#11; falhas de derivação de chave (HKDF, PBKDF2, scrypt); rejeição de AES Key Wrap (RFC 3394) em uma chave de criptografia de chave errada; um hardware security module (HSM) retornando Distinguished Encoding Rules (DER) malformado; ou uma incompatibilidade de comprimento de seed Ed25519.
  • Campos de contexto. operation (por exemplo load_pem, kek_derive, key_wrap), key_type (por exemplo RSA, EC-P256, Ed25519, AES-256), reason. Material de chave bruto nunca é incluído.
  • Recuperação. Inspecione a operação e o tipo de chave nomeados, corrija o material de chave de origem ou a entrada de derivação e tente novamente.

KeyManagementException (caminho de assinatura: NextPDF\Security\Signature\Exception)

Seção intitulada “KeyManagementException (caminho de assinatura: NextPDF\Security\Signature\Exception)”
  • Quando é gerada. Um provedor de signatário encontra uma falha de gerenciamento de chaves: a versão de chave solicitada é desconhecida, está desativada, agendada para destruição, não tem permissão de assinatura, ou está inutilizável por outro motivo. É isto que RsaPssSigner e LocalKeySignerProvider geram em falhas de chave ao vivo. Construtores nomeados: unknownKeyVersion() e keyVersionDisabled().
  • Campos de contexto. providerId, keyVersion, reason. Acessores: providerId(), keyVersion(), reason().
  • Recuperação. Rotacione ou reatribua permissões à chave, ou selecione uma versão de chave utilizável, então tente novamente. Distinta de SignatureFailedException, que sinaliza que o primitivo de assinatura em si falhou.

Para orientação a partir do sintoma sobre níveis inalcançáveis e recursos ausentes, consulte Falhas de assinatura e carimbo de tempo.

SignatureFailedException (R4-13: NextPDF\Security\Exception)

Seção intitulada “SignatureFailedException (R4-13: NextPDF\Security\Exception)”
  • Quando é gerada. Uma operação criptográfica de assinatura falha: um primitivo de assinatura RSA, ECDSA ou Ed25519 retorna false ou saída de comprimento errado; um token HSM ou PKCS#11 responde com um status de não sucesso; a montagem de SignedData em Cryptographic Message Syntax (CMS) falha em um certificado ou cadeia malformados; ou uma autoverificação de round-trip Ed25519 falha. Código novo deve preferir este subtipo R4-13 à exceção de assinatura legada acoplada a PAdES.
  • Campos de contexto. operation (por exemplo sign, verify, build_cms), algorithm (por exemplo rsa-pkcs1v15-sha256, ed25519), reason. Acessores: getOperation(), getAlgorithm(), getReason().
  • Recuperação. Leia a operação e o algoritmo, corrija a entrada (chave, cadeia de certificados ou disponibilidade do backend) e tente novamente. Alinhada com a postura de tratamento de chaves com falha fechada da ETSI EN 319 142-1.

SignatureFailedException (SPI: NextPDF\Security\Signature\Exception)

Seção intitulada “SignatureFailedException (SPI: NextPDF\Security\Signature\Exception)”
  • Quando é gerada. Uma implementação de SignerProviderInterface não consegue concluir uma operação de assinatura por qualquer motivo não categorizado como gerenciamento de chaves: erro de driver de backend, material de chave malformado ou I/O de HSM irrecuperável. Este é o catch-all para o contrato de assinatura com falha fechada, no qual cada primitivo gera uma exceção em caso de falha em vez de retornar null, false ou uma string vazia. Construtor nomeado: forProvider().
  • Campos de contexto. providerId, reason. Acessores: providerId(), reason().
  • Recuperação. Inspecione o id do provedor e o motivo, corrija o backend do provedor ou o material de chave e tente novamente. Ramifique entre KeyManagementException e este tipo para separar “a chave é ruim” de “o primitivo falhou”.
  • Quando é gerada. O nível de conformidade PAdES solicitado não pode ser honrado sob a infraestrutura de runtime atual (mais frequentemente uma autoridade de carimbo de tempo ausente para B-T e superiores) e o chamador não concedeu permissão para degradar. O padrão é falha fechada: o engine se recusa em vez de produzir silenciosamente um nível inferior enquanto anuncia o superior, o que seria uma regressão de nível eIDAS. Alinhada com ETSI EN 319 142-1 §6. Observe que esta classe estende NextPdfException diretamente (não SecurityException).
  • Campos de contexto. requestedLevel, highestAchievableLevel, reason. Acessores: requestedLevel(), highestAchievableLevel(), reason().
  • Recuperação. Leia reason para identificar a infraestrutura ausente e forneça-a (por exemplo configure uma autoridade de carimbo de tempo), ou passe allowDegradation: true para PadesOrchestrator para aceitar intencionalmente o nível mais alto alcançável.
  • Quando é gerada. SignerProviderRegistry::get() é solicitado por um id de provedor que não está registrado. Implementa o PSR-11 NotFoundExceptionInterface, então o registro está em conformidade com o contrato de contêiner PSR-11. Construtor nomeado: forId(). Esta classe estende RuntimeException e não expõe getContext().
  • Campos de contexto. Nenhum. O id não registrado aparece na mensagem.
  • Recuperação. Registre o provedor sob o id esperado antes de solicitá-lo, ou corrija o id que você passa para o registro.

Estas estendem RuntimeException e não expõem getContext(). SHAKE256 é a função de saída extensível SHA-3 exigida por alguns caminhos da ISO/TS 32001.

  • Quando é gerada. No momento do digest, quando o provedor selecionado não consegue satisfazer a requisição. Construtores nomeados: noBackend() (nenhum backend SHAKE256 funcional neste host, em todos os tiers tentados) e ffiCallFailed() (uma chamada OpenSSL EVP vinculada por FFI retornou um status de não sucesso, por exemplo de uma build de libcrypto reduzida).
  • Campos de contexto. Nenhum. A mensagem informa os tiers tentados ou o símbolo que falhou.
  • Recuperação. Instale ext-ffi com OpenSSL 3.x presente, ou atualize para uma build de PHP que exponha shake256 em hash_algos(). Um fallback Keccak em userland é intencionalmente não distribuído.
  • Quando é gerada. A partir de um construtor de provedor SHAKE256 quando a sondagem de capacidade falha, então o provedor não pode ser instanciado. É um sinal de fluxo de controle: o registro de provedores a captura, registra o rótulo do tier e tenta o próximo tier. Ela nunca deve escapar para o código de aplicação. Construtor nomeado: forTier().
  • Campos de contexto. Nenhum. A mensagem informa o tier e o motivo.
  • Recuperação. Não é acionável diretamente pelo chamador; se toda a cadeia de tiers for esgotada, o registro expõe Shake256NotAvailableException::noBackend() em vez disso, que carrega a correção voltada ao operador.

Estas cobrem o código de autenticação de mensagem (MAC) de nível de documento da ISO/TS 32004, armazenado sob /AuthCode. Ambas estendem NextPdfException e sobrescrevem getContext().

  • Quando é gerada. Com falha fechada, pelo reader de token MAC, quando um token MAC de AuthenticatedData em CMS está estruturalmente malformado ou declara um algoritmo fora do conjunto acordado da ISO/TS 32004. Construtores nomeados: malformed() e algorithmMismatch(). Marcada como @internal.
  • Campos de contexto. status (o valor de DocumentMacVerificationStatus, seja MalformedToken ou AlgorithmMismatch). Propriedade pública readonly: $status.
  • Recuperação. Trate o documento como não verificado. Um token malformado ou um algoritmo fora do conjunto acordado significa que o MAC não pode estabelecer confiança; não prossiga como se o conteúdo estivesse protegido.
  • Quando é gerada. Com falha fechada, quando uma verificação de MAC de nível de documento não consegue alcançar um estado confiável: um /AuthCode ausente ou malformado, um algoritmo fora do conjunto acordado, uma falha de unwrap ou uma incompatibilidade de MAC (adulteração). O verify() do verificador retorna um resultado explícito para ramificação; esta é a contrapartida de fluxo de exceção gerada por assertVerified(), para que o código que “confia no conteúdo” nunca possa prosseguir além de um documento não verificado. Construtor nomeado: fromResult().
  • Campos de contexto. status (o valor de DocumentMacVerificationStatus). Propriedade pública readonly: $status.
  • Recuperação. Não confie no conteúdo do documento. Inspecione status para distinguir uma adulteração (incompatibilidade de MAC) de um problema de configuração (/AuthCode ausente ou malformado, incompatibilidade de algoritmo).

Estas cobrem a validação de caminho de certificação da RFC 5280. O tipo base e suas subclasses têm falha fechada.

  • Quando é gerada. Uma falha de modo estrito do validador de caminho da RFC 5280. É a base não final para subclasses mais restritas (ChainLengthExceededException, UnsupportedExtensionException), para que os handlers que capturam este tipo também capturem aquelas via substituição de Liskov. Estende SecurityException.
  • Campos de contexto. Não sobrescreve getContext() (herda o padrão vazio). Carrega os motivos estruturados na propriedade pública readonly congelada do tipo array $reasons (uma lista não vazia de strings de nome de regra mais descrição).
  • Recuperação. Leia $reasons para identificar a regra que está falhando, corrija a cadeia de certificados e revalide. Capture este tipo para tratar qualquer falha de validação de caminho de forma uniforme.
  • Quando é gerada. Pede-se ao validador de caminho que percorra uma cadeia cujo comprimento excede o teto configurado. O limite é imposto antes de qualquer parsing começar, para que um fornecedor malicioso não consiga levar o validador a trabalho quadrático ou esgotar recursos com uma cadeia arbitrariamente profunda. O teto padrão de 10 segue o perfil PKIX-CMP (RFC 4210 §5.3.18); cadeias do mundo real cabem em 5 a 6 entradas. Subclasse de PkiPathValidationException.
  • Campos de contexto. Herda o getContext() vazio; a string de motivo chain_length_exceeded: supplied=<n> cap=<n> é encaminhada para $reasons do pai. Propriedades públicas readonly: $supplied, $cap.
  • Recuperação. Forneça uma cadeia dentro do teto, ou aumente o limite configurado se uma cadeia legitimamente mais longa for esperada.
  • Quando é gerada. O validador de caminho encontra uma extensão X.509 crítica cuja imposição ainda não foi implementada. Conforme RFC 5280 §4.2, uma extensão crítica não reconhecida deve falhar de forma fechada; tanto o modo estrito quanto o leniente falham de forma fechada aqui, já que ignorar silenciosamente uma extensão crítica seria uma regressão de segurança. O validador cobre construção de cadeia, correspondência de AKI/SKI, uso de chave, uso estendido de chave, restrições básicas, expiração e verificação de assinatura; qualquer outra coisa crítica surge aqui. Subclasse de PkiPathValidationException.
  • Campos de contexto. Herda o getContext() vazio; os motivos estruturados são encaminhados para $reasons do pai. Propriedades públicas readonly: $extensionOid (OID com pontos, por exemplo 2.5.29.30 para restrições de nome), $extensionName, $clauseRef (ponteiro para a cláusula da RFC 5280 e a entrada de log de itens adiados).
  • Recuperação. No modo leniente, capture esta subclasse específica para recorrer a uma política mais grosseira sem engolir falhas reais de validação de caminho. Audite $extensionOid e $clauseRef contra suas fixtures de PKI para ver qual extensão está bloqueando a validação.
  • Quando é gerada. Tanto os endpoints OCSP quanto os de lista de revogação de certificados (CRL) estão esgotados sem um veredito definitivo: falha de transporte OCSP ou resposta malformada, e falha de transporte CRL ou CRL malformada, com ambos os circuit breakers abertos ou ambos os caches ausentes. O modo estrito trata isso como falha fechada; o modo leniente a captura e emite um aviso PSR-3 com revocation = null. Estende SecurityException.
  • Campos de contexto. Não sobrescreve getContext() (herda o padrão vazio). Carrega o estado nas propriedades públicas readonly $ocspState e $crlState (cada uma com padrão unknown).
  • Recuperação. Restaure a acessibilidade a uma fonte de revogação, aguarde os circuit breakers fecharem, ou aqueça o cache, então tente novamente. Não suprima isso para obter um artefato de validação de longo prazo; a asserção de revogação faz parte desse nível.
  • Quando é gerada. Uma assinatura de BasicOCSPResponse da RFC 6960 §4.2.2.2 falha na verificação criptográfica contra o certificado do respondedor. O parser decodifica signatureAlgorithm (RSA-PSS, ECDSA ou RSA-PKCS1v15) e verifica signature sobre tbsResponseData; qualquer falha gera esta exceção tipada para que os chamadores possam distinguir uma resposta estruturalmente válida, mas criptograficamente adulterada, de uma resposta com DER malformado. Não final, então pacotes downstream podem publicar subclasses mais específicas. Estende SecurityException.
  • Campos de contexto. Não sobrescreve getContext() (herda o padrão vazio). Carrega a tag de falha na propriedade pública readonly $reason (por exemplo signature_mismatch, responder_cert_not_in_bundle, unsupported_signature_algorithm); o detail de texto livre é incorporado à mensagem.
  • Recuperação. Inspecione $reason. Para responder_cert_not_in_bundle, forneça o bundle de trust anchor correto e o certificado do respondedor. Para signature_mismatch, trate a resposta como não confiável. Consulte Falhas de assinatura e carimbo de tempo.
  • Quando é gerada. Uma falha na comunicação com a autoridade de carimbo de tempo (TSA) da RFC 3161 ou no parsing da resposta: a TSA retorna um status de erro, a requisição HTTP falha ou a resposta ASN.1 não pode ser parseada. É a base da hierarquia de falhas de TSA e é não final, para que falhas de verificação possam estendê-la. Estende NextPdfException.
  • Campos de contexto. Não sobrescreve getContext() (herda o padrão vazio).
  • Recuperação. Capture TsaException para qualquer caminho de falha de TSA. Verifique a acessibilidade da TSA e se o endpoint retorna uma resposta RFC 3161 bem formada.
  • Quando é gerada. A verificação CMS de um TimeStampToken da RFC 3161 falha em qualquer das etapas de verificação obrigatórias: vinculação ESSCertIDv2 da RFC 5816 §3, integridade de atributos assinados da RFC 5652 §11, frescor de producedAt da RFC 3161 §2.4.2 ou assinatura de SignerInfo da RFC 5652 §5.4. Falha fechada, com um discriminador de etapa tipado para que pipelines de auditoria possam distinguir replay de desvio de relógio de incompatibilidade de certificado sem fazer grep nas mensagens. Subclasse de TsaException, então handlers legados catch (TsaException) continuam disparando.
  • Campos de contexto. step (o valor de Step do pipeline que falhou) e message. Acessor: getStep().
  • Recuperação. Acionável por um desenvolvedor (certificado de TSA ou tolerância de desvio mal configurados) ou pela segurança (suspeita de MITM ou replay). Leia step para localizar a etapa que está falhando e corrija a entrada ou a configuração de trust correspondente.
  • Quando é gerada. Sinal interno de que uma travessia de DER atingiu um limite malformado ou truncado, gerado pelos walkers de baixo nível dentro do verificador de token de TSA. Ele é sempre capturado no limite público de verificação e re-encapsulado em uma TsaTokenVerificationException carregando o discriminador de etapa adequado; ele nunca vaza para o código do chamador. Estende RuntimeException; marcada como @internal.
  • Campos de contexto. Nenhum.
  • Recuperação. Não é voltado ao chamador. Trate a TsaTokenVerificationException encapsulada em vez disso.

Estas estendem RuntimeException e não expõem getContext(). Ambas são decodificadores com falha fechada.

  • Quando é gerada. O decodificador de restrições de nome encontra um elemento GeneralSubtree aplicável que não consegue decodificar fielmente. A RFC 5280 §4.2.1.10 exige que uma parte confiante processe uma restrição de nome aplicável ou rejeite o certificado; converter o descarte silencioso anterior nesta falha tipada evita um fail-open que teria silenciosamente ampliado o conjunto de nomes aceito. O escopo é limitado às formas de nome aplicáveis (directoryName, dNSName, iPAddress, rfc822Name, uniformResourceIdentifier); formas não aplicáveis permanecem ignoráveis e nunca a geram. Construtor nomeado: undecodableEnforceableBase(). Marcada como @internal.
  • Campos de contexto. Nenhum. Uma string de detalhe segura para log é carregada na mensagem.
  • Recuperação. O enforcer expõe um motivo name_constraints: com falha fechada e a cadeia é rejeitada. Investigue a codificação de restrições de nome do certificado; não relaxe a imposição.
  • Quando é gerada. A extensão qcStatements está estruturalmente malformada: DER truncado, uma tag errada ou um estouro de comprimento. O decodificador tem falha fechada e gera uma exceção em vez de retornar um resultado parcial ou heurístico quando não consegue determinar com certeza o que a extensão diz. Marcada como @api.
  • Campos de contexto. Nenhum.
  • Recuperação. Capture-a explicitamente apenas se você pretende tolerar codificação malformada; caso contrário, trate as declarações de certificado qualificado do certificado como indetermináveis e rejeite ou reemita o certificado.
  • Quando é gerada. Um defeito de gerenciamento de sessão PKCS#11 v3.1. Cada construtor nomeado mapeia para uma classe de defeito específica e para um valor de retorno CKR_* do PKCS#11, exposto pelo discriminador tipado $kind para que os chamadores ramifiquem por uma string de enum estável em vez de uma correspondência de mensagem frágil. Os construtores incluem: cryptokiNotInitialized(), userNotLoggedIn(), userAlreadyLoggedIn(), operationNotInitialized(), operationActive(), mechanismNotAllowed(), tokenDisconnected(), concurrentSessionLimitExceeded(), sessionAlreadyClosed(), stateTransitionInvalid(), osLockingRequired(), loginTtlExpired() e signOperationTtlExpired(). Estende SecurityException.
  • Campos de contexto. Não sobrescreve getContext() (herda o padrão vazio). Carrega o kind tipado na propriedade pública readonly $kind, uma das constantes KIND_* (por exemplo KIND_USER_NOT_LOGGED_IN, KIND_TOKEN_DISCONNECTED, KIND_LOGIN_TTL_EXPIRED). Identificadores de slot e de sessão, mecanismo e valores de TTL aparecem na mensagem. PINs e bytes de certificado nunca são incluídos.
  • Recuperação. Faça switch em $kind. Para user_not_logged_in, faça login com o PIN do usuário antes de inicializar uma operação de assinatura. Para token_disconnected, trate todas as sessões no slot como órfãs. Para os kinds de TTL, reautentique-se ou reinicialize a operação. Para mechanism_not_allowed, estenda a allow-list de mecanismos configurada ou escolha um mecanismo permitido.