Ir al contenido
getnextpdf.com

Errores de seguridad y de firma

Esta página documenta las excepciones del dominio de seguridad del árbol del espacio de nombres NextPDF\Security. Cada entrada nombra la clase, indica cuándo se lanza, lista los campos que devuelve su getContext() y ofrece un paso de recuperación.

La mayoría de estas clases extienden SecurityException, que extiende NextPdfException e implementa ContextAwareExceptionInterface. Eso significa que getContext(): array devuelve diagnósticos estructurados y sin secretos que se pueden encaminar a canalizaciones de registro o de supervisión del rendimiento de aplicaciones (APM). Capturar SecurityException para atrapar en un único bloque todo fallo del dominio de seguridad; capturar una subclase específica cuando se necesita su carga útil tipada.

Unas pocas clases de este árbol extienden directamente RuntimeException en lugar de SecurityException. Están señaladas abajo; no exponen getContext() y la mayoría están documentadas como señales internas de control de flujo que no conviene esperar capturar en código de aplicación.

AspectoComportamiento
Contrato baseNextPdfException::getContext() devuelve []; las subclases lo redefinen.
Higiene de secretosLos mensajes y el contexto omiten material de clave en bruto, texto en claro, PIN y bytes del vector de inicialización (IV). Las claves se afloran solo como un prefijo de huella digital.
SecurityExceptionBase abstracta; no transporta campos propios. Las subclases definen la carga útil.
  • Cuándo se lanza. Nunca se lanza directamente; es la base abstracta del dominio de seguridad. Existe para que un único bloque catch (SecurityException $e) pueda atrapar fallos de integridad de cifrado autenticado, defensas de reutilización de nonce, el vínculo entre PDF/A y cifrado, fallos de gestión de claves y fallos de PKI.
  • Campos de contexto. Ninguno propio. Hereda el valor predeterminado vacío de NextPdfException; las subclases rellenan la carga útil.
  • Recuperación. Capturar la subclase concreta para un manejo accionable, o SecurityException para un encaminamiento grueso de incidentes de seguridad.

Los lanza el cifrador AES-GCM (Modo Galois/Contador) y la protección de PDF/A. Para orientación basada primero en el síntoma, véase Cifrado y permisos.

  • Cuándo se lanza. Un descifrado de cifrado autenticado con datos asociados (AEAD) falla por un motivo ajeno a la manipulación: texto cifrado truncado, un IV ausente o una clave incorrecta suministrada en el límite de la API, donde no había suficiente material para que la comprobación de integridad llegara a ejecutarse. Es un error de configuración o de transporte, no un incidente de seguridad.
  • Campos de contexto. algorithm (por ejemplo AES-256-GCM), reason (por ejemplo ciphertext shorter than IV+tag).
  • Recuperación. Verificar que el texto cifrado, el IV y la clave estén completos y correctamente enmarcados; no tratar esto como manipulación. Contrástese con TamperedDataException.
  • Cuándo se lanza. La etiqueta de autenticación AEAD no supera la verificación. La etiqueta cubre el texto cifrado más los datos autenticados asociados (AAD); si cualquiera de los dos se modificó tras el cifrado, la llamada subyacente openssl_decrypt() devuelve false. Este subtipo distinto permite aflorar una alerta de grado incidente de seguridad en lugar de un error de enmarcado.
  • Campos de contexto. algorithm, ciphertext_length (longitud del texto cifrado rechazado, excluidos el IV y la etiqueta).
  • Recuperación. Tratar como manipulación o como una clave/IV incorrectos. No reintentar a ciegas; investigar el origen del texto cifrado. Conforme a ISO/TS 32003:2023 §5.2 y NIST SP 800-38D §6.5, una comprobación de etiqueta fallida significa que los datos no son auténticos.
  • Cuándo se lanza. Se le pide a AES-GCM cifrar dos veces con el mismo par de clave e IV. El cifrador se defiende con un contador monótono por instancia y, como defensa en profundidad, un conjunto de hash en tiempo de ejecución de cada par (huella de clave, IV) emitido. Como el contador descarta las colisiones por construcción, esta activación es un indicador de defecto de prioridad crítica que nunca debe ocurrir en producción. Reutilizar un par de clave/IV compromete todo el flujo de claves (ISO/TS 32003:2023 §5.2 NOTE 2; NIST SP 800-38D §8.3).
  • Campos de contexto. key_fingerprint_prefix (los primeros 8 caracteres hex de SHA-256(key)), iv_length (siempre 12 para ISO/TS 32003), reason (hashset-collision o counter-rollover, que distingue un error de refactor que derrota el contador del disparador de 2^63 del contador) e iv_fixed_field_hex (el campo fijo del IV, presente solo cuando se suministra, reportado bajo su propia clave y nunca mal etiquetado como la huella de clave).
  • Recuperación. Abortar de inmediato y rotar la clave. Presentar un informe de defectos; esto indica un error en el cifrador, no una entrada incorrecta del llamador.
  • Cuándo se lanza. Se alcanza un recuento de invocaciones opcional de seguridad de uso de NIST SP 800-38D §8.3 para una clave AES-GCM dada. Es un gancho de telemetría de defensa en profundidad para los llamadores que quieren hacer cumplir el límite recomendado por la especificación (alrededor de 2^32 invocaciones por clave) antes que los límites arquitectónicos dentro del cifrador. No se activa por defecto; solo el auxiliar assertWithinSafetyBound() la lanza.
  • Campos de contexto. key_fingerprint_prefix, invocation_count (el recuento actual de encrypt(), igual o superior al límite), invocation_limit (el límite opcional).
  • Recuperación. Rotar la clave del documento (construir un cifrador nuevo con material de clave nuevo) antes de que la probabilidad acumulada de colisión y de falsificación deje de ser insignificante, o ampliar la política del llamador para negar la continuidad del servicio.
  • Cuándo se lanza. Se intenta una operación de cifrado sobre un documento etiquetado como PDF/A. La familia PDF/A (PDF/A-2, PDF/A-3, PDF/A-4) prohíbe el cifrado de manera uniforme: conforme a ISO 19005 §6.1.3 la clave Encrypt no debe estar presente en el tráiler, e ISO 19005-4:2020 Anexos A y B heredan esto sin modificación. No existe combinación permitida de PDF/A y cifrado.
  • Campos de contexto. pdfa_mode (por ejemplo pdfa4, pdfa3), encryption_operation (la llamada rechazada, por ejemplo useAesGcm).
  • Recuperación. Para producir un documento cifrado, omitir la llamada enablePdfA(); para producir un documento de archivo, omitir la llamada de cifrado. Véase Validación de PDF/A y PDF/UA.
  • Cuándo se lanza. Una política criptográfica configurada rechaza un algoritmo, una fortaleza de clave o un cifrado seleccionados por una operación de firma, cifrado o hashing del núcleo. Es el límite de fallo cerrado para la aplicación de la conformidad (por ejemplo FIPS 140-2/3, eIDAS o una política empresarial personalizada) y la lanza CryptoPolicyEnforcer antes de producir cualquier firma o texto cifrado, de modo que una operación que viola la política nunca puede emitir un artefacto no aprobado. Distinta de un fallo acotado de una operación de OpenSSL y de un fallo de la primitiva de firma: es un rechazo de política de una solicitud por lo demás válida. Alineada con NIST SP 800-131A Rev. 2 e ISO/IEC 19790:2025 §7.
  • Campos de contexto. policy (nombre de la política, por ejemplo FIPS 140-3 Strict), category (hash, signature, encryption o key-strength), item (el elemento rechazado, por ejemplo un identificador de objeto (OID), un nombre de cifrado o rsa/1024), reason.
  • Recuperación. Seleccionar un algoritmo, una longitud de clave o un cifrado que la política nombrada apruebe, o ajustar la política si se es su propietario. Encaminar el contexto estructurado al manual de conformidad documentado.

Existen dos clases con el mismo nombre. Comparten la raíz SecurityException, de modo que un único bloque catch (SecurityException $e) atrapa ambas, pero transportan cargas útiles distintas. Importar por el nombre totalmente cualificado cuando se necesita una forma específica.

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

Sección titulada «KeyManagementException (ciclo de vida: NextPDF\Security\Exception)»
  • Cuándo se lanza. Una operación de gestión de claves falla antes de que la clave la consuma una primitiva de firma o cifrado: fallos de análisis de claves de Correo con Privacidad Mejorada (PEM), PKCS#12 o PKCS#11; fallos de derivación de claves (HKDF, PBKDF2, scrypt); rechazo de Envoltura de Claves AES (RFC 3394) ante una clave de cifrado de claves incorrecta; un módulo de seguridad de hardware (HSM) que devuelve Reglas de Codificación Distinguida (DER) malformadas; o un desajuste de longitud de semilla Ed25519.
  • Campos de contexto. operation (por ejemplo load_pem, kek_derive, key_wrap), key_type (por ejemplo RSA, EC-P256, Ed25519, AES-256), reason. Nunca se incluye material de clave en bruto.
  • Recuperación. Inspeccionar la operación y el tipo de clave nombrados, corregir el material de clave de origen o la entrada de derivación, y reintentar.

KeyManagementException (vía de firma: NextPDF\Security\Signature\Exception)

Sección titulada «KeyManagementException (vía de firma: NextPDF\Security\Signature\Exception)»
  • Cuándo se lanza. Un proveedor de firmante topa con un fallo de gestión de claves: la versión de clave solicitada es desconocida, está deshabilitada, está programada para su destrucción, carece de permiso de firma o es inutilizable por otra causa. Esto es lo que lanzan RsaPssSigner y LocalKeySignerProvider ante fallos de claves en vivo. Constructores con nombre: unknownKeyVersion() y keyVersionDisabled().
  • Campos de contexto. providerId, keyVersion, reason. Captadores: providerId(), keyVersion(), reason().
  • Recuperación. Rotar o reasignar permisos a la clave, o seleccionar una versión de clave utilizable, y reintentar. Distinta de SignatureFailedException, que señala que la propia primitiva de firma falló.

Para orientación basada primero en el síntoma sobre niveles inalcanzables y capacidades ausentes, véase Fallos de firma y marca de tiempo.

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

Sección titulada «SignatureFailedException (R4-13: NextPDF\Security\Exception)»
  • Cuándo se lanza. Una operación criptográfica de firma falla: una primitiva de firma RSA, ECDSA o Ed25519 devuelve false o una salida de longitud incorrecta; un HSM o un token PKCS#11 responde con un estado de no éxito; el ensamblaje de SignedData de la Sintaxis de Mensajes Criptográficos (CMS) falla ante un certificado o una cadena malformados; o una autoverificación de ida y vuelta Ed25519 falla. El código nuevo debería preferir este subtipo R4-13 a la excepción de firma heredada acoplada a PAdES.
  • Campos de contexto. operation (por ejemplo sign, verify, build_cms), algorithm (por ejemplo rsa-pkcs1v15-sha256, ed25519), reason. Captadores: getOperation(), getAlgorithm(), getReason().
  • Recuperación. Leer la operación y el algoritmo, corregir la entrada (clave, cadena de certificados o disponibilidad de la dorsal) y reintentar. Alineada con la postura de manejo de claves de fallo cerrado de ETSI EN 319 142-1.

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

Sección titulada «SignatureFailedException (SPI: NextPDF\Security\Signature\Exception)»
  • Cuándo se lanza. Una implementación de SignerProviderInterface no puede completar una operación de firma por cualquier motivo no categorizado como gestión de claves: error del controlador de la dorsal, material de clave malformado o E/S de HSM irrecuperable. Es el comodín del contrato de firma de fallo cerrado, donde cada primitiva lanza ante un fallo en lugar de devolver null, false o una cadena vacía. Constructor con nombre: forProvider().
  • Campos de contexto. providerId, reason. Captadores: providerId(), reason().
  • Recuperación. Inspeccionar el id del proveedor y el motivo, corregir la dorsal del proveedor o el material de clave, y reintentar. Ramificar entre KeyManagementException y este tipo para separar «la clave es incorrecta» de «la primitiva falló».
  • Cuándo se lanza. El nivel de conformidad PAdES solicitado no puede honrarse bajo la infraestructura actual de tiempo de ejecución (lo más frecuente, una autoridad de marca de tiempo ausente para B-T y superiores) y el llamador no ha concedido permiso para degradar. El valor predeterminado es de fallo cerrado: el motor se niega en lugar de producir de forma silenciosa un nivel inferior mientras anuncia el superior, lo que sería una regresión de grado eIDAS. Alineada con ETSI EN 319 142-1 §6. Nótese que esta clase extiende directamente NextPdfException (no SecurityException).
  • Campos de contexto. requestedLevel, highestAchievableLevel, reason. Captadores: requestedLevel(), highestAchievableLevel(), reason().
  • Recuperación. Leer reason para identificar la infraestructura ausente y aportarla (por ejemplo, configurar una autoridad de marca de tiempo), o pasar allowDegradation: true a PadesOrchestrator para aceptar a propósito el nivel más alto alcanzable.
  • Cuándo se lanza. Se le pide a SignerProviderRegistry::get() un id de proveedor que no está registrado. Implementa NotFoundExceptionInterface de PSR-11, de modo que el registro cumple el contrato de contenedor de PSR-11. Constructor con nombre: forId(). Esta clase extiende RuntimeException y no expone getContext().
  • Campos de contexto. Ninguno. El id no registrado aparece en el mensaje.
  • Recuperación. Registrar el proveedor bajo el id esperado antes de solicitarlo, o corregir el id que se pasa al registro.

Estas extienden RuntimeException y no exponen getContext(). SHAKE256 es la función de salida extensible SHA-3 que requieren algunas vías de ISO/TS 32001.

  • Cuándo se lanza. En el momento del resumen, cuando el proveedor seleccionado no puede satisfacer la solicitud. Constructores con nombre: noBackend() (ningún backend SHAKE256 funcional en este anfitrión, en todos los niveles intentados) y ffiCallFailed() (una llamada EVP de OpenSSL enlazada por FFI devolvió un estado de no éxito, por ejemplo desde una compilación libcrypto reducida).
  • Campos de contexto. Ninguno. El mensaje nombra los niveles intentados o el símbolo fallido.
  • Recuperación. Instalar ext-ffi con OpenSSL 3.x presente, o actualizar a una compilación de PHP que exponga shake256 en hash_algos(). De forma deliberada no se distribuye un repliegue Keccak en espacio de usuario.
  • Cuándo se lanza. Desde el constructor de un proveedor SHAKE256 cuando la sonda de capacidad falla, de modo que el proveedor no puede instanciarse. Es una señal de control de flujo: el registro de proveedores la captura, anota la etiqueta del nivel e intenta el siguiente nivel. Nunca debería escapar al código de aplicación. Constructor con nombre: forTier().
  • Campos de contexto. Ninguno. El mensaje nombra el nivel y el motivo.
  • Recuperación. No accionable directamente por el llamador; si toda la cadena de niveles se agota, el registro aflora en su lugar Shake256NotAvailableException::noBackend(), que transporta la corrección de cara al operador.

Estas cubren el código de autenticación de mensajes (MAC) a nivel de documento de ISO/TS 32004, almacenado bajo /AuthCode. Ambas extienden NextPdfException y redefinen getContext().

  • Cuándo se lanza. De forma cerrada, por el lector de tokens MAC, cuando un token MAC de AuthenticatedData de CMS está estructuralmente malformado o declara un algoritmo fuera del conjunto acordado de ISO/TS 32004. Constructores con nombre: malformed() y algorithmMismatch(). Marcada @internal.
  • Campos de contexto. status (el valor de DocumentMacVerificationStatus, bien MalformedToken bien AlgorithmMismatch). Propiedad pública de solo lectura: $status.
  • Recuperación. Tratar el documento como no verificado. Un token malformado o un algoritmo fuera del conjunto acordado significa que el MAC no puede establecer confianza; no proceder como si el contenido estuviera protegido.
  • Cuándo se lanza. De forma cerrada, cuando una verificación MAC a nivel de documento no puede alcanzar un estado de confianza: un /AuthCode ausente o malformado, un algoritmo fuera del conjunto acordado, un fallo de desenvoltura o un desajuste de MAC (manipulación). El verify() del verificador devuelve un resultado explícito para ramificar; esta es la contraparte de flujo de excepción lanzada por assertVerified(), de modo que el código que «confía en el contenido» nunca pueda proceder más allá de un documento no verificado. Constructor con nombre: fromResult().
  • Campos de contexto. status (el valor de DocumentMacVerificationStatus). Propiedad pública de solo lectura: $status.
  • Recuperación. No confiar en el contenido del documento. Inspeccionar status para distinguir una manipulación (desajuste de MAC) de un problema de configuración (/AuthCode ausente o malformado, desajuste de algoritmo).

Estas cubren la validación de rutas de certificación de RFC 5280. El tipo base y sus subclases son de fallo cerrado.

  • Cuándo se lanza. Un fallo en modo estricto del validador de rutas de RFC 5280. Es la base no final de subclases más estrechas (ChainLengthExceededException, UnsupportedExtensionException), de modo que los manejadores que capturan este tipo también capturan aquellas por sustitución de Liskov. Extiende SecurityException.
  • Campos de contexto. No redefine getContext() (hereda el valor predeterminado vacío). Transporta los motivos estructurados en la propiedad pública de solo lectura congelada $reasons (una lista no vacía de cadenas con el nombre de la regla más la descripción).
  • Recuperación. Leer $reasons para identificar la regla que falla, corregir la cadena de certificados y volver a validar. Capturar este tipo para manejar de manera uniforme cualquier fallo de validación de ruta.
  • Cuándo se lanza. Se le pide al validador de rutas recorrer una cadena cuya longitud supera el techo configurado. El tope se aplica antes de que empiece cualquier análisis, de modo que un proveedor malicioso no puede llevar al validador a un trabajo cuadrático ni agotar recursos con una cadena arbitrariamente profunda. El techo predeterminado de 10 sigue el perfil PKIX-CMP (RFC 4210 §5.3.18); las cadenas del mundo real caben en 5 o 6 entradas. Subclase de PkiPathValidationException.
  • Campos de contexto. Hereda el getContext() vacío; la cadena de motivo chain_length_exceeded: supplied=<n> cap=<n> se reenvía a $reasons del padre. Propiedades públicas de solo lectura: $supplied, $cap.
  • Recuperación. Aportar una cadena dentro del techo, o elevar el tope configurado si se espera legítimamente una cadena más larga.
  • Cuándo se lanza. El validador de rutas encuentra una extensión crítica X.509 cuya aplicación aún no está implementada. Conforme a RFC 5280 §4.2, una extensión crítica no reconocida debe fallar de forma cerrada; aquí tanto el modo estricto como el indulgente fallan de forma cerrada, ya que omitir de forma silenciosa una extensión crítica sería una regresión de seguridad. El validador cubre la construcción de la cadena, la coincidencia AKI/SKI, el uso de clave, el uso de clave extendido, las restricciones básicas, la caducidad y la verificación de firma; cualquier otra cosa crítica aflora aquí. Subclase de PkiPathValidationException.
  • Campos de contexto. Hereda el getContext() vacío; los motivos estructurados se reenvían a $reasons del padre. Propiedades públicas de solo lectura: $extensionOid (OID con puntos, por ejemplo 2.5.29.30 para restricciones de nombre), $extensionName, $clauseRef (puntero a la cláusula de RFC 5280 y a la entrada del registro de elementos diferidos).
  • Recuperación. En modo indulgente, capturar esta subclase específica para recurrir a una política más gruesa sin tragar fallos reales de validación de ruta. Auditar $extensionOid y $clauseRef contra los dispositivos de prueba de la PKI para ver qué extensión está bloqueando la validación.
  • Cuándo se lanza. Tanto los extremos OCSP como los de la lista de revocación de certificados (CRL) se agotan sin un veredicto definitivo: fallo de transporte OCSP o respuesta malformada, y fallo de transporte CRL o CRL malformada, con ambos disyuntores abiertos o ambas cachés ausentes. El modo estricto trata esto como fallo cerrado; el modo indulgente lo captura y emite una advertencia PSR-3 con revocation = null. Extiende SecurityException.
  • Campos de contexto. No redefine getContext() (hereda el valor predeterminado vacío). Transporta el estado en las propiedades públicas de solo lectura $ocspState y $crlState (cada una con valor predeterminado unknown).
  • Recuperación. Restaurar la accesibilidad a una fuente de revocación, esperar a que los disyuntores se cierren, o precalentar la caché, y luego reintentar. No suprimir esto para obtener un artefacto de validación a largo plazo; la aserción de revocación forma parte de ese nivel.
  • Cuándo se lanza. La firma de un BasicOCSPResponse de RFC 6960 §4.2.2.2 no supera la verificación criptográfica contra el certificado del respondedor. El analizador decodifica signatureAlgorithm (RSA-PSS, ECDSA o RSA-PKCS1v15) y verifica signature sobre tbsResponseData; cualquier fallo lanza esta excepción tipada para que los llamadores distingan una respuesta estructuralmente válida pero criptográficamente manipulada de una respuesta con DER malformado. No final, de modo que los paquetes aguas abajo pueden publicar subclases más específicas. Extiende SecurityException.
  • Campos de contexto. No redefine getContext() (hereda el valor predeterminado vacío). Transporta la etiqueta del fallo en la propiedad pública de solo lectura $reason (por ejemplo signature_mismatch, responder_cert_not_in_bundle, unsupported_signature_algorithm); el detail de texto libre se pliega en el mensaje.
  • Recuperación. Inspeccionar $reason. Para responder_cert_not_in_bundle, aportar el paquete de anclas de confianza correcto y el certificado del respondedor. Para signature_mismatch, tratar la respuesta como no fiable. Véase Fallos de firma y marca de tiempo.
  • Cuándo se lanza. Un fallo en la comunicación con la autoridad de marca de tiempo (TSA) de RFC 3161 o en el análisis de la respuesta: la TSA devuelve un estado de error, la solicitud HTTP falla, o la respuesta ASN.1 no puede analizarse. Es la base de la jerarquía de fallos de TSA y es no final, de modo que los fallos de verificación pueden extenderla. Extiende NextPdfException.
  • Campos de contexto. No redefine getContext() (hereda el valor predeterminado vacío).
  • Recuperación. Capturar TsaException para cualquier vía de fallo de TSA. Verificar la accesibilidad de la TSA y que el extremo devuelve una respuesta de RFC 3161 bien formada.
  • Cuándo se lanza. La verificación CMS de un TimeStampToken de RFC 3161 falla en cualquiera de los pasos de verificación obligatorios: el vínculo ESSCertIDv2 de RFC 5816 §3, la integridad de los atributos firmados de RFC 5652 §11, la frescura de producedAt de RFC 3161 §2.4.2, o la firma de SignerInfo de RFC 5652 §5.4. De fallo cerrado, con un discriminador de paso tipado para que las canalizaciones de auditoría puedan distinguir una repetición de un desfase de reloj y de un desajuste de certificado sin escarbar en los mensajes. Subclase de TsaException, de modo que los manejadores heredados catch (TsaException) siguen activándose.
  • Campos de contexto. step (el valor Step del paso que falla) y message. Captador: getStep().
  • Recuperación. Accionable por un desarrollador (certificado de TSA o tolerancia de desfase mal configurados) o por seguridad (sospecha de MITM o repetición). Leer step para localizar la etapa que falla y corregir la entrada o la configuración de confianza correspondiente.
  • Cuándo se lanza. Señal interna de que un recorrido DER topó con un límite malformado o truncado, generada por los recorredores de bajo nivel dentro del verificador de tokens de TSA. Siempre se captura en el límite público de verify y se reenvuelve en una TsaTokenVerificationException que transporta el discriminador de paso adecuado; nunca se filtra al código del llamador. Extiende RuntimeException; marcada @internal.
  • Campos de contexto. Ninguno.
  • Recuperación. No de cara al llamador. Manejar en su lugar la TsaTokenVerificationException envolvente.

Decodificación de extensiones de certificado

Sección titulada «Decodificación de extensiones de certificado»

Estas extienden RuntimeException y no exponen getContext(). Ambos son decodificadores de fallo cerrado.

  • Cuándo se lanza. El decodificador de restricciones de nombre encuentra un elemento GeneralSubtree aplicable que no puede decodificar fielmente. RFC 5280 §4.2.1.10 exige que una parte que confía procese una restricción de nombre aplicable o rechace el certificado; convertir el descarte silencioso anterior en este fallo tipado evita un fallo abierto que habría ampliado de forma silenciosa el conjunto de nombres aceptados. El alcance se limita a las formas de nombre aplicables (directoryName, dNSName, iPAddress, rfc822Name, uniformResourceIdentifier); las formas no aplicables siguen siendo ignorables y nunca la generan. Constructor con nombre: undecodableEnforceableBase(). Marcada @internal.
  • Campos de contexto. Ninguno. En el mensaje se transporta una cadena de detalle segura para el registro.
  • Recuperación. El aplicador aflora un motivo name_constraints: de fallo cerrado y la cadena se rechaza. Investigar la codificación de restricciones de nombre del certificado; no relajar la aplicación.
  • Cuándo se lanza. La extensión qcStatements está estructuralmente malformada: DER truncado, una etiqueta incorrecta o un desbordamiento de longitud. El decodificador es de fallo cerrado y la genera en lugar de devolver un resultado parcial o heurístico cuando no puede determinar con certeza lo que dice la extensión. Marcada @api.
  • Campos de contexto. Ninguno.
  • Recuperación. Capturarla explícitamente solo si se pretende tolerar una codificación malformada; de lo contrario, tratar las declaraciones de certificado cualificado del certificado como indeterminables y rechazar o reemitir el certificado.
  • Cuándo se lanza. Un defecto de gestión de sesiones de PKCS#11 v3.1. Cada constructor con nombre se asigna a una clase de defecto específica y a un valor de retorno CKR_* de PKCS#11, expuesto a través del discriminador tipado $kind para que los llamadores ramifiquen según una cadena de enumeración estable en lugar de una frágil coincidencia de mensajes. Los constructores incluyen: cryptokiNotInitialized(), userNotLoggedIn(), userAlreadyLoggedIn(), operationNotInitialized(), operationActive(), mechanismNotAllowed(), tokenDisconnected(), concurrentSessionLimitExceeded(), sessionAlreadyClosed(), stateTransitionInvalid(), osLockingRequired(), loginTtlExpired() y signOperationTtlExpired(). Extiende SecurityException.
  • Campos de contexto. No redefine getContext() (hereda el valor predeterminado vacío). Transporta el tipo tipado en la propiedad pública de solo lectura $kind, una de las constantes KIND_* (por ejemplo KIND_USER_NOT_LOGGED_IN, KIND_TOKEN_DISCONNECTED, KIND_LOGIN_TTL_EXPIRED). Los identificadores de ranura y de sesión, el mecanismo y los valores de TTL aparecen en el mensaje. Los PIN y los bytes de certificado nunca se incluyen.
  • Recuperación. Conmutar según $kind. Para user_not_logged_in, iniciar sesión con el PIN de usuario antes de inicializar una operación de firma. Para token_disconnected, tratar todas las sesiones de la ranura como huérfanas. Para los tipos de TTL, volver a autenticar o reinicializar la operación. Para mechanism_not_allowed, ampliar la lista de mecanismos permitidos configurada o elegir un mecanismo permitido.