Skip to content

Convertir datos PKCS#7 / CMS a JOSE

Inspecciona un archivo PKCS#7 / CMS para saber qué necesita su conversión y luego conviértelo a JOSE: los datos firmados se convierten en un JWS, los datos ensobrados (enveloped) en un JWE, y los datos firmados y ensobrados en un JWE cuyo texto en claro es un JWS. La conversión cambia el contenedor, no los algoritmos; los algoritmos clásicos se conservan, y el cifrado de contenido CBC pasa a GCM.

Quién puede hacerlo

Una aplicación autenticada como actor criptográfico de tu tenant:

  • El análisis necesita el scope migration.analyzePkcs7. No descifra nada y no usa ninguna clave.
  • La conversión necesita el scope migration.convertPkcs7, además de concesiones de capacidad sobre las claves involucradas: REENCRYPT sobre la clave que descifra y sobre cada clave de destinatario, y RESIGN sobre la clave de cada firmante.

Ningún rol de la consola realiza estas operaciones.

Antes de empezar

  • La aplicación puede obtener un token. Consulta Obtener un token de acceso para una aplicación.
  • Para una conversión, cada firmante y cada destinatario del archivo tiene una clave en tu tenant cuyo certificado lleva el emisor y el número de serie de ese actor. Cada firmante necesita su clave privada importada. El destinatario con el que descifras necesita una clave que pueda descifrar y cifrar; cada uno de los demás destinatarios, una clave que pueda cifrar. Un certificado importado por sí solo sirve únicamente para verificar y se rechaza para cualquier firmante o destinatario.

Pasos

  1. Analiza primero el archivo:
    • SDK de Java: sdk.analyzePkcs7(request) con un Pkcs7AnalysisRequest, o sdk.analyzePkcs7Stream(file) para un archivo grande.
    • CLI criptográfica: AnkaSecureCLI analyze-pkcs7 --input-file <file>, o analyze-pkcs7-stream para un archivo grande; --output-file guarda el informe.
    • API: POST /api/v3/migration/analyze-pkcs7 con el archivo en Base64 en pkcs7Data, o POST /api/v3/migration/stream/analyze-pkcs7 con un cuerpo multipart/form-data, metadata antes de file.
  2. Lee el informe: supportStatus indica si la estructura se puede convertir, y recommendations.requiredKeys nombra, por emisor y número de serie, cada clave que necesita la conversión.
  3. Importa cualquier clave que falte y luego convierte:
    • SDK de Java: sdk.convertPkcs7ToJose(request) con un Pkcs7ConversionRequest, o sdk.convertPkcs7ToJoseStream(metadata, inputFile, outputFile) para un archivo grande.
    • CLI criptográfica: AnkaSecureCLI convert-pkcs7 --input-file <file> --output-file <file>, con --decrypt-kid <kid> para elegir el destinatario con el que descifrar, --serialization y --target-format; convert-pkcs7-stream para un archivo grande.
    • API: POST /api/v3/migration/convert-pkcs7-to-jose, o POST /api/v3/migration/stream/convert-pkcs7-to-jose para un archivo grande.
  4. Elige la serialización: AUTO (la predeterminada) produce la forma compacta para un firmante y un destinatario como máximo, y la forma JSON general en los demás casos; COMPACT y JSON fuerzan una.

Qué ves cuando funcionó

El análisis lista cada firmante y cada destinatario, los algoritmos y los certificados, la forma JOSE que produciría una conversión y cada clave que necesita.

La conversión devuelve el token JOSE con una firma por cada clave de firmante y un destinatario por cada clave de destinatario, y asocia cada firmante y destinatario original al identificador de clave que ahora lo representa. Cada firma CMS se verifica antes de volver a firmarse. La conversión en streaming escribe un JWS separado para los datos firmados y un JWE multiparte para los datos ensobrados.

Si falla

Qué ves Causa Qué hacer
400 .../errors/invalid-pkcs7 o .../errors/invalid-input El archivo no es una estructura PKCS#7 / CMS válida, no es Base64 válido, o un parámetro está fuera de su vocabulario Revisa el archivo y la solicitud
422 .../errors/unsupported-pkcs7-format con UNSUPPORTED_SIGNER_IDENTIFIER o UNSUPPORTED_RECIPIENT_TYPE Un firmante se identifica por el identificador de clave del sujeto, o un destinatario no es un transporte de clave RSA nombrado por emisor y número de serie El archivo no se puede convertir tal como está
422 con MISSING_SIGNER_KEY, MISSING_RECIPIENT_KEY, MISSING_RECIPIENT_PRIVATE_KEY o MISSING_ACTOR_KEYS Un firmante o un destinatario no tiene una clave adecuada en el tenant Importa la clave que nombra el análisis y vuelve a intentarlo
422 con INCOMPATIBLE_SERIALIZATION Se pidió COMPACT para más de un firmante o destinatario Usa AUTO o JSON
422 con DECRYPTION_FAILED El contenido no se pudo descifrar con la clave del destinatario elegido Revisa la clave que descifra
403 .../errors/forbidden Al token le falta el scope, al actor le falta una concesión sobre una clave, o el tenant o el actor no está en un estado que permita la operación Pide a un administrador del tenant que revise los roles y las concesiones del actor
404 Una clave nombrada, o su certificado, no existe en el tenant Revisa el identificador de clave
409 .../errors/key-protection-backend-not-configured El tenant no tiene backend de protección de claves Un administrador del tenant lo configura
413 El archivo supera el límite de una sola solicitud Usa la operación de streaming

Sin la consola

Estas operaciones no tienen pantalla en la consola.

Superficie Cómo
SDK de Java analyzePkcs7, analyzePkcs7Stream, convertPkcs7ToJose, convertPkcs7ToJoseStream en AuthenticatedSdk
CLI criptográfica AnkaSecureCLI analyze-pkcs7, analyze-pkcs7-stream, convert-pkcs7, convert-pkcs7-stream
API POST /api/v3/migration/analyze-pkcs7 (analyzePkcs7), POST /api/v3/migration/stream/analyze-pkcs7 (analyzePkcs7Stream), POST /api/v3/migration/convert-pkcs7-to-jose (convertPkcs7ToJose), POST /api/v3/migration/stream/convert-pkcs7-to-jose (convertPkcs7ToJoseStream)

Relacionado

Estas páginas están en inglés: