Firmas XML

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Guía y referencia del usuario > XML >

Firmas XML

Los archivos XML se pueden firmar de forma digital y estas firmas se pueden verificar. Si el archivo XML se cambia después de firmarse, la verificación fallará. XMLSpy ofrece funciones para crear y verificar firmas XML.

 

Las firmas XML en las vistas de XMLSpy

Las firmas XML se pueden crear en todos los tipos de archivos XML, incluidos los archivos de esquema XML, WSDL y XBRL. Por tanto, los comandos XML | Crear firma XML y XML | Verificar la firma XML están disponibles en todas las vistas de XMLSpy: vista Texto, vista Cuadrícula, vista Esquema, vista WSDL y vista XBRL.

 

Funcionamiento

El proceso de creación y verificación de firmas XML funciona de la siguiente manera:

 

1.El archivo XML se firma o bien con una clave privada de un certificado, o bien con una contraseña. En XMLSpy puede crear una firma con el comando XML | Crear firma XML. La firma se obtiene al procesar: (i) el documento XML y (ii) la clave privada de un certificado o una contraseña.
2.La firma se puede incluir en el archivo XML o se puede guardar en un archivo distinto.
3.Para verificar la firma del archivo XML se usa la clave pública del certificado o la contraseña. El proceso de verificación funciona así: primero, se procesa (i) el documento XML y (ii) la clave pública del certificado o la contraseña que se usó para crear la firma y, en segundo lugar, se compara este resultado con la firma. Si el archivo XML se cambió después de firmarse, la verificación fallará. En XMLSpy puede verificar una firma con el comando XML | Verificar la firma XML.

 

Para más información sobre cómo crear y verificar firmas XML en XMLSpy consulte los apartados de esta sección:

 

Crear firmas XML
Verificar firmas XML

 

Uso de certificados en firmas XML

Para poder usarlos en firmas XML, los certificados deben tener una clave privada y una clave pública. La clave privada se usa para crear la firma XML, mientras que la clave pública se usa para verificar la firma XML.

 

En un caso de uso típico, la persona que envía el documento XML tiene acceso a la clave privada de un certificado y crea con ella la firma XML. El destinatario del documento tendrá acceso a la clave pública del certificado. Este acceso a la clave pública puede ser de dos tipos: (i) la persona que envía el documento envía la información sobre la clave pública con la firma o (ii) el destinatario del documento tiene acceso a una versión de clave pública del certificado utilizado por quien envió el documento.

 

Para más información sobre los certificados, consulte el apartado Trabajar con certificados.

 

Nota: La función para firmas XML de XMLSpy es compatible con certificados de tipo RSA-SHA1, DSA-SHA1 y SHA-256. Las firmas basadas en contraseñas usan el algoritmo HMAC-SHA256 (a partir de la versión 2018 de XMLSpy, véase Crear firmas XML).

 

Validez de los documentos XML

Si se incrusta una firma XML en el documento XML, se añade al documento un elemento Signature en el espacio de nombres http://www.w3.org/2000/09/xmldsig#. Para que el documento siga siendo válido con respecto al esquema, este debe contener las declaraciones de elementos correspondientes. XMLSpy incrusta las firmas en el documento de dos maneras:

 

Firmas envueltas: el elemento Signature se crea como último elemento secundario del elemento raíz (o del elemento de documento).
Firmas envolventes: el elemento Signature se crea como elemento raíz (o como elemento de documento) y el elemento de documento XML original se coloca dentro de un elemento secundario del elemento Signature llamado Object.

 

Si no quiere modificar el esquema del documento XML, la firma XML se puede crear en un archivo externo. Para más información, consulte la descripción de este proceso en el apartado Crear firmas XML.

 

A continuación ofrecemos dos extractos de esquemas XML que muestran cómo se puede permitir el uso del elemento Signature de una firma envuelta. Puede usar estos ejemplos como referencia cuando necesite modificar sus esquemas.

 

En el primer ejemplo, el esquema de la firma XML se importa al esquema del usuario. El esquema de la firma XML está ubicado en la dirección web: http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd

 

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

          xmlns:xsig="http://www.w3.org/2000/09/xmldsig#" 

           elementFormDefault="qualified" 

           attributeFormDefault="unqualified">

  <xs:import namespace="http://www.w3.org/2000/09/xmldsig#"

            schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>

   <xs:element name="Root">

      <xs:complexType>

         <xs:sequence>

            <xs:element ref="FirstChildOfRoot"/>

            <xs:element ref="SecondChildOfRoot" minOccurs="0"/>

            <xs:element ref="ThirdChildOfRoot" minOccurs="0"/>

            <xs:element ref="xsig:Signature" minOccurs="0"/>

         </xs:sequence>

      </xs:complexType>

   </xs:element>

   ...

</xs:schema>

 

Otra opción (ver el ejemplo que sigue) es añadir un elemento comodín genérico que coincida con cualquier elemento de otros espacios de nombres. Si se fija el atributo processContents en lax, el validador pasará por alto este elemento (porque no se encuentra una declaración de elemento equivalente). Consecuentemente, el usuario no necesita hacer referencia al esquema de las firmas XML. El inconveniente de esta opción, sin embargo, es que es posible añadir cualquier elemento (no sólo el elemento Signature) en la posición indicada del documento XML sin que el documento deje de ser válido.

 

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 

           elementFormDefault="qualified" 

           attributeFormDefault="unqualified">

   <xs:element name="Root">

      <xs:complexType>

         <xs:sequence>

            <xs:element ref="selection"/>

            <xs:element ref="newsitems" minOccurs="0"/>

            <xs:element ref="team" minOccurs="0"/>

            <xs:any namespace="##other" minOccurs="0" processContents="lax"/>

         </xs:sequence>

      </xs:complexType>

   </xs:element>

   ...

</xs:schema>

 

Especificación del W3C

Para más información sobre las firmas XML, consulte la especificación del W3C para firmas digitales, disponible en https://www.w3.org/TR/xmldsig-core1/.

 


© 2019 Altova GmbH