Erros de segurança e assinatura
Visão geral
Seção intitulada “Visão geral”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.
Convenção de campos de contexto
Seção intitulada “Convenção de campos de contexto”| Aspecto | Comportamento |
|---|---|
| Contrato base | NextPdfException::getContext() retorna []; as subclasses o sobrescrevem. |
| Higiene de segredos | As 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. |
SecurityException | Base abstrata; não carrega campos próprios. As subclasses definem o payload. |
Tipo base
Seção intitulada “Tipo base”SecurityException
Seção intitulada “SecurityException”- 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
SecurityExceptionpara 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.
DecryptionFailedException
Seção intitulada “DecryptionFailedException”- 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 exemploAES-256-GCM),reason(por exemplociphertext 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.
TamperedDataException
Seção intitulada “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 retornafalse. 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.
NonceReuseException
Seção intitulada “NonceReuseException”- 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-collisionoucounter-rollover, distinguindo um bug de refatoração que derrota o contador do trip-wire do contador de 2^63) eiv_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.
GcmInvocationLimitExceededException
Seção intitulada “GcmInvocationLimitExceededException”- 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 deencrypt(), 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.
IncompatiblePdfAModeException
Seção intitulada “IncompatiblePdfAModeException”- 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
Encryptnã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 exemplopdfa4,pdfa3),encryption_operation(a chamada rejeitada, por exemplouseAesGcm). - 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.
Imposição de política de criptografia
Seção intitulada “Imposição de política de criptografia”CryptoPolicyViolationException
Seção intitulada “CryptoPolicyViolationException”- 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
CryptoPolicyEnforcerantes 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 exemploFIPS 140-3 Strict),category(hash,signature,encryptionoukey-strength),item(o item rejeitado, por exemplo um identificador de objeto (OID), nome de cifra oursa/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.
Gerenciamento de chaves
Seção intitulada “Gerenciamento de chaves”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 exemploload_pem,kek_derive,key_wrap),key_type(por exemploRSA,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
RsaPssSignereLocalKeySignerProvidergeram em falhas de chave ao vivo. Construtores nomeados:unknownKeyVersion()ekeyVersionDisabled(). - 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.
Assinatura
Seção intitulada “Assinatura”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
falseou saída de comprimento errado; um token HSM ou PKCS#11 responde com um status de não sucesso; a montagem deSignedDataem 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 exemplosign,verify,build_cms),algorithm(por exemplorsa-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
SignerProviderInterfacenã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 retornarnull,falseou 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
KeyManagementExceptione este tipo para separar “a chave é ruim” de “o primitivo falhou”.
SignatureLevelUnreachableException
Seção intitulada “SignatureLevelUnreachableException”- 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
NextPdfExceptiondiretamente (nãoSecurityException). - Campos de contexto.
requestedLevel,highestAchievableLevel,reason. Acessores:requestedLevel(),highestAchievableLevel(),reason(). - Recuperação. Leia
reasonpara identificar a infraestrutura ausente e forneça-a (por exemplo configure uma autoridade de carimbo de tempo), ou passeallowDegradation: trueparaPadesOrchestratorpara aceitar intencionalmente o nível mais alto alcançável.
SignerProviderNotFoundException
Seção intitulada “SignerProviderNotFoundException”- Quando é gerada.
SignerProviderRegistry::get()é solicitado por um id de provedor que não está registrado. Implementa o PSR-11NotFoundExceptionInterface, então o registro está em conformidade com o contrato de contêiner PSR-11. Construtor nomeado:forId(). Esta classe estendeRuntimeExceptione não expõegetContext(). - 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.
Hashing (SHAKE256)
Seção intitulada “Hashing (SHAKE256)”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.
Shake256NotAvailableException
Seção intitulada “Shake256NotAvailableException”- 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) effiCallFailed()(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-fficom OpenSSL 3.x presente, ou atualize para uma build de PHP que exponhashake256emhash_algos(). Um fallback Keccak em userland é intencionalmente não distribuído.
Shake256ProviderNotAvailableException
Seção intitulada “Shake256ProviderNotAvailableException”- 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.
Integridade MAC de documento (ISO/TS 32004)
Seção intitulada “Integridade MAC de documento (ISO/TS 32004)”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().
DocumentMacTokenException
Seção intitulada “DocumentMacTokenException”- Quando é gerada. Com falha fechada, pelo reader de token MAC, quando um token MAC de
AuthenticatedDataem CMS está estruturalmente malformado ou declara um algoritmo fora do conjunto acordado da ISO/TS 32004. Construtores nomeados:malformed()ealgorithmMismatch(). Marcada como@internal. - Campos de contexto.
status(o valor deDocumentMacVerificationStatus, sejaMalformedTokenouAlgorithmMismatch). 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.
DocumentMacVerificationException
Seção intitulada “DocumentMacVerificationException”- 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
/AuthCodeausente ou malformado, um algoritmo fora do conjunto acordado, uma falha de unwrap ou uma incompatibilidade de MAC (adulteração). Overify()do verificador retorna um resultado explícito para ramificação; esta é a contrapartida de fluxo de exceção gerada porassertVerified(), 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 deDocumentMacVerificationStatus). Propriedade pública readonly:$status. - Recuperação. Não confie no conteúdo do documento. Inspecione
statuspara distinguir uma adulteração (incompatibilidade de MAC) de um problema de configuração (/AuthCodeausente ou malformado, incompatibilidade de algoritmo).
Validação de caminho PKI (RFC 5280)
Seção intitulada “Validação de caminho PKI (RFC 5280)”Estas cobrem a validação de caminho de certificação da RFC 5280. O tipo base e suas subclasses têm falha fechada.
PkiPathValidationException
Seção intitulada “PkiPathValidationException”- 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. EstendeSecurityException. - 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
$reasonspara 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.
ChainLengthExceededException
Seção intitulada “ChainLengthExceededException”- 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 motivochain_length_exceeded: supplied=<n> cap=<n>é encaminhada para$reasonsdo 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.
UnsupportedExtensionException
Seção intitulada “UnsupportedExtensionException”- 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$reasonsdo pai. Propriedades públicas readonly:$extensionOid(OID com pontos, por exemplo2.5.29.30para 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
$extensionOide$clauseRefcontra suas fixtures de PKI para ver qual extensão está bloqueando a validação.
RevocationCheckFailedException
Seção intitulada “RevocationCheckFailedException”- 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. EstendeSecurityException. - Campos de contexto. Não sobrescreve
getContext()(herda o padrão vazio). Carrega o estado nas propriedades públicas readonly$ocspStatee$crlState(cada uma com padrãounknown). - 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.
Verificação de assinatura OCSP (RFC 6960)
Seção intitulada “Verificação de assinatura OCSP (RFC 6960)”OcspSignatureInvalidException
Seção intitulada “OcspSignatureInvalidException”- Quando é gerada. Uma assinatura de
BasicOCSPResponseda RFC 6960 §4.2.2.2 falha na verificação criptográfica contra o certificado do respondedor. O parser decodificasignatureAlgorithm(RSA-PSS, ECDSA ou RSA-PKCS1v15) e verificasignaturesobretbsResponseData; 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. EstendeSecurityException. - Campos de contexto. Não sobrescreve
getContext()(herda o padrão vazio). Carrega a tag de falha na propriedade pública readonly$reason(por exemplosignature_mismatch,responder_cert_not_in_bundle,unsupported_signature_algorithm); odetailde texto livre é incorporado à mensagem. - Recuperação. Inspecione
$reason. Pararesponder_cert_not_in_bundle, forneça o bundle de trust anchor correto e o certificado do respondedor. Parasignature_mismatch, trate a resposta como não confiável. Consulte Falhas de assinatura e carimbo de tempo.
Carimbo de tempo (RFC 3161)
Seção intitulada “Carimbo de tempo (RFC 3161)”TsaException
Seção intitulada “TsaException”- 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
TsaExceptionpara qualquer caminho de falha de TSA. Verifique a acessibilidade da TSA e se o endpoint retorna uma resposta RFC 3161 bem formada.
TsaTokenVerificationException
Seção intitulada “TsaTokenVerificationException”- Quando é gerada. A verificação CMS de um
TimeStampTokenda 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 deproducedAtda RFC 3161 §2.4.2 ou assinatura deSignerInfoda 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 deTsaException, então handlers legadoscatch (TsaException)continuam disparando. - Campos de contexto.
step(o valor deStepdo pipeline que falhou) emessage. 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
steppara localizar a etapa que está falhando e corrija a entrada ou a configuração de trust correspondente.
MalformedDerException
Seção intitulada “MalformedDerException”- 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
TsaTokenVerificationExceptioncarregando o discriminador de etapa adequado; ele nunca vaza para o código do chamador. EstendeRuntimeException; marcada como@internal. - Campos de contexto. Nenhum.
- Recuperação. Não é voltado ao chamador. Trate a
TsaTokenVerificationExceptionencapsulada em vez disso.
Decodificação de extensão de certificado
Seção intitulada “Decodificação de extensão de certificado”Estas estendem RuntimeException e não expõem getContext(). Ambas são
decodificadores com falha fechada.
NameConstraintsDecodeException
Seção intitulada “NameConstraintsDecodeException”- Quando é gerada. O decodificador de restrições de nome encontra um elemento
GeneralSubtreeaplicá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.
QcStatementsDecodeException
Seção intitulada “QcStatementsDecodeException”- Quando é gerada. A extensão
qcStatementsestá 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.
Sessões PKCS#11
Seção intitulada “Sessões PKCS#11”Pkcs11SessionException
Seção intitulada “Pkcs11SessionException”- 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$kindpara 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()esignOperationTtlExpired(). EstendeSecurityException. - Campos de contexto. Não sobrescreve
getContext()(herda o padrão vazio). Carrega o kind tipado na propriedade pública readonly$kind, uma das constantesKIND_*(por exemploKIND_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. Parauser_not_logged_in, faça login com o PIN do usuário antes de inicializar uma operação de assinatura. Paratoken_disconnected, trate todas as sessões no slot como órfãs. Para os kinds de TTL, reautentique-se ou reinicialize a operação. Paramechanism_not_allowed, estenda a allow-list de mecanismos configurada ou escolha um mecanismo permitido.