Ir al contenido

¡Se acercan los certificados de 47 días! ¿Estás preparado?

Actúa ahora →

¿Cómo firmar archivos XML?

Firma XML

La firma XML es un proceso que consiste en añadir una firma digital a un documento XML para garantizar su integridad, autenticidad y no repudio. Al aplicar una firma digital a un documento XML, el firmante certifica la autenticidad e integridad de los datos, lo que permite verificar el origen del documento y asegurar que no ha sido alterado durante su transmisión o almacenamiento.

La firma digital se crea mediante técnicas de cifrado asimétrico , generalmente basadas en infraestructura de clave pública (PKI) . El firmante genera una clave privada que se guarda de forma segura y una clave pública correspondiente que puede compartirse con otros. La clave privada se utiliza para cifrar un hash o resumen del documento XML, creando así la firma digital. El resumen cifrado sirve como una representación única de los datos y se adjunta al documento XML.

La firma XML es crucial en diversos ámbitos, como el comercio electrónico, la facturación electrónica, la gestión de la cadena de suministro y las aplicaciones gubernamentales. Permite el intercambio seguro de documentos electrónicos, establece la autenticidad de los datos y garantiza el no repudio, lo que significa que el firmante no puede negar posteriormente su participación ni la integridad del documento.

Una descripción general del proceso de firma XML:

  1. Una adecuada algoritmo criptográfico, como RSA, DSA, o ECDSA, es elegido por el firmante XML para producir la firma digital.
  2. Se prepara el documento XML que se va a firmar. Esto implica garantizar que se ajuste a la sintaxis y estructura XML requeridas.
  3. La canonización XML se aplica al documento, lo que garantiza que cualquier variación en los espacios en blanco, el orden de los atributos o los prefijos de los espacios de nombres no afecte la validez de la firma. La canonización genera un formato estandarizado del documento XML para la firma.
  4. Un resumen, también conocido como hash, se calcula sobre el documento XML canonizado. Este resumen sirve como huella digital única del documento y se utiliza en el proceso de firma.
  5. El resumen se cifra con la clave privada del firmante, lo que crea la firma digital. El firmante guarda la clave privada de forma segura y no debe ser accesible a terceros no autorizados.
  6. La firma digital se inserta en el documento XML, generalmente como un elemento o atributo adicional. Esto permite asociarla con los datos firmados.

Encryption Consulting ofrece una solución de firma de código , « CodeSign Secure », que le permite almacenar las claves de forma segura y obtener visibilidad y control totales de las actividades de firma de código. Las claves privadas del certificado de firma de código se pueden almacenar en un HSM para eliminar los riesgos asociados con claves robadas, dañadas o mal utilizadas. Dentro de esta solución, ofrecemos una herramienta de utilidad, XML Signer, que permite firmar archivos XML. Los pasos que se detallan a continuación le ayudarán a utilizar nuestra herramienta fácilmente.

Firmar un archivo XML con XML Signer, en resumen: Establezca las variables de entorno del certificado de autenticación del cliente SSL y luego ejecute xmlsigner -S <file> -u <username> -k <key_name> -a <algorithm> -c <certificate>La herramienta genera una copia firmada con el sufijo “_signed”; la clave privada permanece en el servidor y nunca es manejada directamente por la interfaz de línea de comandos (CLI).

Puntos Clave

  • SHA256 es el algoritmo de hash predeterminado si -a se omite; SHA224 es una opción más débil incluida por compatibilidad y, por lo general, no debería preferirse para nuevos flujos de trabajo de firma.
  • El certificado de autenticación del cliente SSL autentica la interfaz de línea de comandos (CLI) ante el servidor de firma de Encryption Consulting; se trata de una credencial independiente del certificado/clave de firma de código que se utiliza para firmar el documento XML.

Matriz de entorno

ComponenteRequisito
OSWindows, macOS o Linux (xmlsigner.exe en Windows, ./xmlsigner en otros sistemas)
Autenticación del clienteCertificado de autenticación de cliente SSL en formato PKCS12 (.p12 o .pfx), obtenido de Encryption Consulting.
Credenciales de firmaNombre de usuario registrado, nombre de clave y certificado proporcionados por Encryption Consulting.
Algoritmos hash compatiblesSHA224, SHA256 (predeterminado), SHA384, SHA512
Almacenamiento de clavesEn el servidor; la CLI nunca maneja la clave privada sin procesar directamente.

Requisito previo

Para usar XML Signer, los usuarios deben configurar primero las variables de entorno para la ruta del certificado de autenticación de cliente SSL y la contraseña del certificado. Si aún no lo tiene, póngase en contacto con el equipo de consultoría de cifrado.

Nota: El certificado de autenticación de cliente SSL debe estar en formato PKCS12 (.p12 o .pfx)

Ejecute los siguientes comandos para establecer variables de entorno:

Mac o Linux

$ export SIGNER_SSL_CERT_PFX=path_to_ssl_certificate $ export SIGNER_SSL_CERT_PFX_PASS=your_client_certificate_password

Windows

$ set SIGNER_SSL_CERT_PFX=path_to_ssl_certificate $ set SIGNER_SSL_CERT_PFX_PASS=your_client_certificate_password

Solución de firma de código empresarial

Obtenga una solución para todas sus necesidades criptográficas de firma de código de software con nuestra solución de firma de código.

¿Cómo utilizar la utilidad XML Firmer?

Obtenga la versión de la utilidad XML Signer

Ejecute el siguiente comando

Mac o Linux

$./xmlsigner -v

Windows

$ xmlsigner.exe -v

Obtenga la ayuda de la utilidad XML Firmer

Ejecute el siguiente comando

Mac o Linux

$./xmlsigner -h or $./xmlsigner --help

Windows

$ xmlsigner.exe -h or $ xmlsigner.exe --help

Firmar un documento XML

La utilidad Firmante generará el documento firmado con el mismo nombre con el sufijo “_signed”

Solución de firma de código empresarial

Obtenga una solución para todas sus necesidades criptográficas de firma de código de software con nuestra solución de firma de código.

Utilice el subcomando sign para firmar un documento XML.

./xmlsigner -S <file_to_be_signed> -u <user_name> -k <key_name> -a <algorithm> -c <key_certificate> -q

-S : Documento XML que debe firmarse.

-u : Nombre de usuario. Un nombre de usuario en el servidor de Encryption Consulting. Si aún no lo tiene, póngase en contacto con el equipo de Encryption Consulting.

-k : Nombre de la clave/certificado para la firma/verificación proporcionado por el servidor de Encryption Consulting. Si aún no lo tiene, póngase en contacto con el equipo de Encryption Consulting.

-a : Algoritmo que se utilizará para la firma. Debe utilizarse una de las siguientes opciones:

  • SHA224
  • SHA256 (predeterminado)
  • SHA384
  • SHA512

Si no se proporciona el algoritmo, utilizará SHA256 como predeterminado.

-c : Archivo de certificado proporcionado por el servidor de Encryption Consulting.

-q : Ejecutar silenciosamente.

-h : Mostrar ayuda

Ejemplos

Mac o Linux

./xmlsigner -h ./xmlsigner -S file.xml -u admin -k SignCertificateName -a SHA256 -c <path /to/certificate>

Windows

xmlsigner.exe -h xmlsigner.exe -S file.xml -u admin -k SignCertificateName -a SHA256 -c <path /to/certificate>

Verificación de la firma

Después de firmar, confirme que el archivo de salida (con el sufijo “_signed”) contiene un elemento Signature válido antes de distribuirlo. Abra el XML firmado y compruebe que contiene un <Signature> elemento bajo el espacio de nombres XML-DSig (http://www.w3.org/2000/09/xmldsig#) que contiene SignedInfo, SignatureValue, y KeyInfo elementos secundarios; un bloque de firma faltante o mal formado indica que el paso de firma falló silenciosamente en lugar de tener éxito silenciosamente.

Errores comunes

ErrorCausa probableSolución
Error de autenticación al conectar con el servidor de firma.Las variables de entorno SIGNER_SSL_CERT_PFX o SIGNER_SSL_CERT_PFX_PASS no están configuradas, son incorrectas o la ruta del archivo .p12/.pfx es incorrecta.Verifique nuevamente que ambas variables de entorno se exporten en la sesión de shell actual, y no solo se establezcan en un script que no se haya ejecutado.
Clave/certificado no encontradoEl valor pasado a -k no coincide con un nombre de clave registrado en el servidor de Encryption Consulting para ese nombre de usuario.Confirme el nombre exacto de la clave con el equipo de Consultoría de Cifrado en lugar de adivinar un nombre.
XML no válido / Fallo en la firma del archivo de entradaEl archivo de entrada no es un XML bien formado, o la canonicalización falla debido a espacios de nombres mal formados.Valide que el XML esté bien formado antes de firmarlo; un XML mal formado no se canonizará correctamente independientemente de la herramienta de firma.

Uso y limpieza de CI/CD

Para la firma repetida en una canalización, configure el SIGNER_SSL_CERT_PFX y SIGNER_SSL_CERT_PFX_PASS variables de entorno como secretos de canalización en lugar de codificarlos directamente en un script, e invocar xmlsigner con el -q Indicador para ejecución silenciosa y no interactiva. Verifique la idempotencia comprobando lo esperado. <Signature> elemento en el archivo de salida inmediatamente después de la firma y hacer que la compilación falle si está ausente, en lugar de asumir que el código de salida del comando por sí solo confirma el éxito.

Para la limpieza: si el certificado de autenticación del cliente .p12/.pfx se copió a un agente de compilación para realizar pruebas, elimínelo una vez que se confirme que la canalización funciona correctamente y, preferiblemente, inyéctelo como un secreto de canalización en tiempo de ejecución en lugar de almacenarlo a largo plazo en el sistema de archivos del agente.

Preguntas frecuentes

¿Cómo puedo saber si el comando de firma ha generado una firma válida?

Compruebe que el archivo de salida “_signed” esté bien formado. <Signature> elemento bajo el espacio de nombres XML-DSig con SignedInfo, SignatureValue y KeyInfo presentes, en lugar de asumir que un código de salida cero por sí solo significa que la firma es válida.

¿Cuál es la diferencia entre el certificado de autenticación de cliente SSL y el certificado de firma?

El certificado de cliente SSL (PKCS12/.p12/.pfx) autentica la herramienta CLI en el servidor de firma de Encryption Consulting. La clave de firma de código real utilizada para producir la firma XML es una credencial separada administrada por el servidor a la que hace referencia el certificado. -k Nombre clave.

Conclusión

La firma XML garantiza la integridad, autenticidad y no repudio de los documentos XML. Añade una firma digital que verifica el origen del documento y evita su manipulación. La firma XML es esencial para el intercambio seguro de datos, fomentando la confianza en las transacciones electrónicas y una comunicación fiable. Tiene aplicaciones en el comercio electrónico, la facturación, la gestión de la cadena de suministro y mucho más. Mediante el uso de herramientas y bibliotecas, el proceso de firma XML se simplifica y se puede integrar en diversos entornos. Para acceder a nuestra herramienta, que le ayudará con el proceso de firma XML, póngase en contacto con nosotros en [email protected]