sígueme ...

    Múltiples firmas enveloped en un documento XML Signature

    Según la especificación del estándar XML Signature del W3C, las firmas “enveloped” son aquellas que están embebidas en los datos originales, de forma que son capaces de excluir su contenido a la hora de verificar el documento original.

    Destacan por tener siempre definida una referencia (Reference), con el valor establecido del atributo URI a cadena vacia:

    <Reference URI="">
    <Transforms>
    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
    <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
    </Transforms>
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
    <DigestValue></DigestValue>
    </Reference>

    Ejemplo de una firma “enveloped”:

    El problema es que cuando tenemos más de una firma de este tipo en un mismo documento, es necesario que cada una se excluya a si misma y a las demás firmas a la hora de calcular cualquier digest. Con la transformación “enveloped”, sólo se elimina la propia referencia, quedando en el documento el resto de firmas y haciendo que los cálculos de los digest sean incorrectos.

    Para resolver este problema, debemos utilizar XPath Filtering.

    Según la especificación, el filtrado XPath en una transformación que nos permite quedarnos con el conjunto de nodos necesario para poder calcular de forma correcta la firma.

    En nuestro caso, sustituyendo la transformación “enveloped” por un correcto filtrado, podemos soportar múltiples firmas “enveloped” en un mismo documento:

    <Reference URI="">
    <Transforms>
    <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
    <XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
    not(ancestor-or-self::dsig:Signature)
    </XPath>
    </Transform>
    </Transforms>
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
    <DigestValue></DigestValue>
    </Reference>

    Si estamos desarrollando en Java, podemos generar este tipo de referencia de la siguiente forma:

    Transform transform = fac.newTransform(Transform.XPATH, new XPathFilterParameterSpec(
    "not(ancestor-or-self::dsig:Signature)", Collections.singletonMap("dsig", XMLSignature.XMLNS)));
    Reference ref = fac.newReference("", fac.newDigestMethod(DigestMethod.SHA1, null),
    Collections.singletonList(transform), null, null);

    Crea tus facturas electrónicas de forma sencilla y gratuita

    “Hazte una Facturae” es un nuevo servicio disponible de forma gratuita y que permite realizar la emisión y firma digital de facturas en formato Facturae 3.1, generando adicionalmente una visualización de la misma en formato PDF.

    Gracias a este servicio, las empresas pequeñas que tienen un volumen de facturación reducido, pueden emitir sus facturas electrónicas sin necesidad de adquirir un sotware especializado de facturación.

    Como aspecto a reseñar, las facturas emitidas por este servicio validan perfectamente contra el servicio de validación que ofrece el Ministerio de Economía y Hacienda.

    El formato ODF 1.2 tendrá soporte para XAdES

    Hasta ahora, el formato ODF contaba con la posibilidad de poder almacenar una firma digital asociada en formato XML Signature.

    Gracias a esta característica, podemos garantizar la identidad del autor o persona que ha generado el documento y lo ha firmado, y la integridad del mismo asegurando que no haya sido alterado.

    Por otra parte, si queremos asegurar que el certificado utilizado es válido en el momento de la firma o establecer la fecha y hora de firma de forma feaciente, es necesario utilizar un formato de firma XML más avanzado que XML Signature.

    Todos estos requisitos son cubiertos por el estándar XAdES, que en su perfil XAdES-X-L extiende la información criptográfica especificada por XML Signature y le añade la respuesta OCSP del servicio de validación de certificados y el sello de tiempo, entre otros muchos atributos. Es por todo esto que XAdES ha sido elegido como el formato de firma base para la generación de facturas electrónicas en formato Facturae.

    Así pues, gracias al nuevo soporte de XAdES que tendrá ODF 1.2, podremos contar con todas estas nuevas funcionalidades que tan importantes son para la adminsitración electrónica y la preservación de documentos digitales.

    Adicionalmente, es interesante destacar que PDF, vía la generación de firmas digitales en formato CMS, también es capaz de almacenar un sello de tiempo generado por una autoridad certificadora.

    Enlace a la noticia original:

    http://homembit.com/2009/01/firmas-digitales-en-el-odf-12-seran-compatibles-con-la-icp-brasil.html

    Curso de especialización en desarrollo web avanzado

    Con el fin de conocer más a fondo los nuevos entornos y tecnologías relacionadas con el desarrollo de aplicaciones Web, se presenta desde la Universitat Jaume I de Castellón, la segunda edición del “Curso de especialización en desarrollo web avanzado”. Este año totalmente online !!!

    En esta tercera edición prevista desde Noviembre del 2009 a Junio de 2010, se abordarán las siguientes temáticas:

    • - Web 2.0: Conceptos e implicaciones
    • - Activos de información: Gestión, protección y control
    • - Herramientas y nuevos entornos de desarrollo: Wiki, Subversion, Eclipse, Trac
    • - Tecnologías base de cliente: XHTML/XML, CSS, JavaScript, SVG en cuanto a las tecnologías base y algunos frameworks de cliente rico como Prototype, JQuery o ExtJS
    • - Tecnologías de servidor: PHP y Java
    • - Seguridad en entornos web
    • - Arquitecturas orientadas a servicios: SOA, Web Services, WSDL y REST

    Para más información, se encuentra disponible la página del curso donde, además, se pueden ver algunos ejemplos descargables de los materiales proporcionados:

    http://cursowebavanzado.uji.es/

    Fundación Universitat Jaume I – Empresa

    Os esperamos!!!

    CryptoApplet


    La Universitat Jaume I de Castellón ha liberado el código de CryptoApplet, un applet para la realización de firma digital avanzada en el lado del cliente a través de un navegador (Internet Explorer y navegadores de la familia mozilla bajo Linux y Windows) accediendo de forma correcta a cada almacen de certificados, ya sea local o a través de un dispositivo externo (como en el caso del DNI-e).

    Este applet es capaz de generar firmas y ofrecer su representación en PKCS#1, PKCS#7, XMLDsig, XAdES-X-L (JDigiDoc de OpenXAdES), PDF y PDF con sello de tiempo.

    Todo el código del applet se ha liberado bajo GPLv2 y puede descargarse en:

    http://proyectostic.uji.es/cryptoapplet/index_es.html

    Integrando la firma digital de documentos PDF con Apache Cocoon

    Apache Cocoon es un framework de publicación XML. En Cocoon se define un origen XML (generator), una transformación XSL opcional (transformer) y se obtiene un documento (serializer) en el formato deseado (PDF, RTF, XHTML, Postscript, Excel, etc). Cocooon nos permite olvidarnos de los procesos de transformación de documentos XML, de forma que sólo tenemos que definir los distintos pasos por los que pasará nuestra información origen XML (pipelines).

    En esta dirección podemos encontrar información adicional sobre Cocoon.

    En un reciente artículo sobre firma digital de documentos PDF con iText veíamos cómo realizar la firma aislada de documentos PDF.
    Para los que utilicen Cocoon, existe una forma de poder firmar los documentos PDF que se generen dinámicamente como resultado de una transformación. El proceso pasa por implementar nuestro propio serializer.

    Lo que vamos a hacer es implementar una clase que herede de FOPSerializer (encargada de la generación de PDF) y, antes de que se emita el PDF como salida, pasar esta información por el proceso de firma descrito en el artículo anterior.

    El resultado es la clase PDFSignSerializer.java que nos permite implementar el proceso.
    Esta clase, al ser un nuevo serializer, debe ser definida en el fichero de configuración de Cocoon (sitemap.xmap):

    <map:serializer logger="sitemap.serializer.fo2spdf" mime-type="application/pdf" name="fo2spdf"
    src="org.apache.cocoon.serialization.PDFSignSerializer"/>

    Y luego, ya podemos utilizarla en cualquier pipeline:

    <map:match pattern="kk">
    <map:generate src="samples/hello-world/content/hello.xml" />
    <map:transform src="samples/hello-world/style/xsl/page2fo.xsl" />
    <map:serialize type="fo2spdf" />
    </map:match>

    Página siguiente »