You are on page 1of 9

Manual de uso pdf_sign.

jar FRAMEWORK JAVA 2

Solucin de firma de pdf


(Servidor)
PDF_SIGN
Versin 1.4

MARZO 2010

rea de Integracin y Arquitectura de Aplicaciones Pgina: 1


Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdireccin General de Desarrollo, Tecnologa e Infraestructuras
Manual de uso pdf_sign.jar FRAMEWORK JAVA 2

1 TABLA DE CONTENIDO

1 TABLA DE CONTENIDO............................................................................ 2
2 INTRODUCCIN ........................................................................................ 3
3 FUNCIONAMIENTO ................................................................................... 4
3.1 Componentes necesarios ........................................................................... 4
3.2 Estructura general ....................................................................................... 4
4 EJEMPLO ................................................................................................... 7
4.1 Ejemplo general........................................................................................... 7
4.2 Notas ............................................................................................................ 8

rea de Integracin y Arquitectura de Aplicaciones Pgina: 2


Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdireccin General de Desarrollo, Tecnologa e Infraestructuras
Manual de uso pdf_sign.jar FRAMEWORK JAVA 2

2 INTRODUCCIN

En algunos proyectos nos podemos encontrar la necesidad de firma digital de


ficheros en formato pdf desde el servidor. Un ejemplo de esta firma es cuando
la Comunidad de Madrid firma documentos con un sello de organo (certificado
digital de firma de documentos) que devuelve al ciudadano.

Para cumplir con esta necesaridad dentro del framework 2 se ha creado la


librera pdf_sign es una librera que permite firmar documentos PDF.

Actualmente en ICM existe la plataforma ASF que es la encarga de efectuar


todas las operaciones relacionadas con los certificados digitales. En la versin
actual en produccin no incluye la firma de pdf en servidor y esta funcionalidad
la vamos a tener disponible para la versin 4.3 de ASF que actualmente se
encuentra en fase de instalacin y pruebas en desarrollo.

Para que las aplicaciones puedan ir incorporando esta funcionalidad de firma


de pdfs se ha optado por codificar dicha firma con la librera IText y
encapsularlo dentro de la librera pdf_sign. De forma que las aplicaciones usen
esta librera y en cuanto est disponible el api de asf de firma de pdf entonces
modificar la librera y sacar una nueva versin de la misma que pueda ejecutar
la firma a travs de la plataforma.

La librera pdf_sign que ahora publicamos contiene los siguientes aspectos:

Firma digital de pdf (incluyendo tanto la firma visible como la invisible)


Firma digital de pfs con sellado de tiempo.

Estos aspectos actualmente se ejecutan a travs de la librera Itext lo cual


obliga a utilizar un keystore donde esta almacenado el certificado digital con el
que se va a firmar digitalmente el documento. La ubicacin y dems
informacin sobre este certificado vendr definida en el fichero de
configuracin.

Para incluir el sello de tiempo es necesario disponer de una TSA


(Timestamping Server) que normalmente es un tercero que certificado la hora
en la que se firma mediante un sello de tiempo. A este tercero se accede a
travs de una url que ser definida en el fichero de configuracin. Adems
puede que requiera de una autenticacin que tambin ir en el fichero de
configuracin. Para las pruebas se ha utilizado la tsa http://time.certum.pl/
aunque actualmente se estn realizando pruebas con otras tsa.

Preveiendo que en el futuro la librera acceda tambin a ASF para ejecutar la


firma digital de pdf se incluye en el fichero de configuracin un parmetro que
nos indicar cual en la implementacin a utilizar.

rea de Integracin y Arquitectura de Aplicaciones Pgina: 3


Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdireccin General de Desarrollo, Tecnologa e Infraestructuras
Manual de uso pdf_sign.jar FRAMEWORK JAVA 2

A continuacin se explicar ms detallamente como incorporar las


funcionalidades indicadas en nuestra aplicacin.

3 FUNCIONAMIENTO

3.1 Instalacin

Hay que descargarse la librera pdf_sign_1_4.jar y sus dependencias e


incluirlas en el directorio WEB-INF/lib de la aplicacin.

Las dependencias de esta librera se pueden descargar directamente de la


web de soja en el fichero pdf_sign.zip.

Necesitaremos tambin un certificado X509 en formato PKCS#12 instalado


en un keystore, con el que firmaremos los documentos. En soja esta
disponible un keystore para pruebas.

3.2 Configuracin

Las variables de configuracin asociadas al proceso de firma se pueden


agrupar en 4 grupos:

1. Seleccin de implementacin

Variable Obligatoria Ejemplo


pdf.sign.implementacion No pdf.sign.impl.PdfSignerItextImpl

pdf.sign.implementacion permite cambiar la implementacin que se


usa para la firma a travs del fichero de configuracin. Por defecto,
pdf.sign.impl.PdfSignerItextImpl. (Actualmente nica implementacin
desarrollada)

2. keystore para firma con Itext

Variable Obligatoria Ejemplo


pdf.sign.rutaKeystore Si ../test/resource/2w.p12
pdf.sign.claveKeystore Si CA655C9BB562C317811001D666CFD99B
pdf.sign.alias Si Certificado importado
pdf.sign.claveAlias Si CA655C9BB562C317811001D666CFD99B

rea de Integracin y Arquitectura de Aplicaciones Pgina: 4


Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdireccin General de Desarrollo, Tecnologa e Infraestructuras
Manual de uso pdf_sign.jar FRAMEWORK JAVA 2

pdf.sign.rutaKeystore - Ruta fisica en la que se encuentra el certificado


con el que queremos firmar.
pdf.sign.claveKeystore - Clave del almacen de certificados encriptada
con la semilla de BD.
pdf.sign.alias - Alias con el que vamos a firmar el Pdf.
pdf.sign.claveAlias - Clave del alias que vamos a usar encriptada con
la semilla de BD (usualmente coincidir con la clave del keystore).

3. TSA Server (Servidor de timestamping)

Variable Obligatoria Ejemplo


pdf.sign.tsa No true
pdf.sign.tsa.url No http://time.certum.pl/
pdf.sign.tsa.login No loginTSA
pdf.sign.tsa.password No CA655C9BB562C317811001D666CFD99B
pdf.sign.tsa.keystore No ../test/resource/certificadoTSA.pfx
pdf.sign.tsa.keystoreType No pkcs12
pdf.sign.tsa.keystorePassword No CA655C9BB562C317811001D666CFD99B
pdf.sign.tsa.keystore.alias No Certificado TSA
pdf.sign.tsa.truststore No ../test/resource/trustTSA.keystore
pdf.sign.tsa.truststoreType No jks
pdf.sign.tsa.truststorePassword No CA655C9BB562C317811001D666CFD99B
Nota: Para pruebas de momento utilizar pdf.sign.tsa y pdf.sign.tsa.url pero sin login y
password ni opciones de keystore

pdf.sign.tsa booleano. En el caso de utilizarlo incluira el sello en


todas las operaciones de firma aunque se haya indicado que no.
pdf.sign.tsa.url indica la url de la entidad de certificacin de tiempo
donde se encuentra en Servicio de TSA. Obligatorio en caso de usar
una TSA.
pdf.sign.tsa.login login con el que identificarse dentro de la TSA para
utilizar sus servicios. Este parmetro no es obligatorio, ya que no en
todos los casos es necesaria la autorizacin a travs de login.
pdf.sign.tsa.password Clave asociada al login anterior encriptada con
la semilla de BD.
pdf.sign.tsa.keystore almacen que contiene el certificado para
conectarse a la TSA con certificado y https.
pdf.sign.tsa.keystoreType tipo de almacen que contiene el certificado
anterior.
pdf.sign.tsa.keystorePassword clave del almacen encriptada con la
semilla de BD
pdf.sign.tsa.keystore.alias alias del certificado dentro del almacen, en
caso de slo contener uno, no es necesario indicarla.
pdf.sign.tsa.truststore almacen de entidades de confianza, en el que
se debe incluir la clave pblica del servidor de la TSA.
pdf.sign.tsa.truststoreType tipo del almacen anterior.

rea de Integracin y Arquitectura de Aplicaciones Pgina: 5


Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdireccin General de Desarrollo, Tecnologa e Infraestructuras
Manual de uso pdf_sign.jar FRAMEWORK JAVA 2

pdf.sign.tsa.truststorePassword clave del almacen encriptada con la


semilla de BD

4. Proxy para TSA Server

Variable Obligatoria Ejemplo


pdf.sign.proxy No true
pdf.sign.proxy.host No icmupx01.madrid.org
pdf.sign.proxy.port No 80
pdf.sign.proxy.login No loginProxy
pdf.sign.proxy.password No CA655C9BB562C317811001D666CFD99B

pdf.sign.proxy booleano que indica si es necesario proxy para


acceder al TSA (Timestamping Server).
pdf.sign.proxy.host Host donde se encuentra el proxy para salir a
internet. Este valor slo ser obligatorio en caso de ser necesario
proxy. Obligatorio en caso de usar proxy.
pdf.sign.proxy.port Puerto dentro del host por el que se puede
acceder al proxy. Este valor slo ser obligatorio en caso de ser
necesario proxy.
pdf.sign.proxy.login Login para acceder al proxy. Slo obligatorio en
caso de ser necesario.
pdf.sign.proxy.password password asociada al login del proxy. Slo
obligatorio en caso de ser necesario. Encriptada con la semilla de BD.

3.3 Estructura general

PdfSigner es la clase principal en el proceso de firma y que se encargar de


firmar el documento segn los parmetros indicados en el fichero de
configuracin.

Para cambiar la apariencia de la firma, se obtiene la referencia al bean que la


define y la da forma dentro del fichero PDF, y situaremos la firma en la
posicin donde queremos que aparezca o incluso la haremos invisible llegado
el caso.

Por ltimo, basta con indicar qu fichero se desea firmar y donde se ubicar
el fichero ya firmado.

Adems de este uso se ha incluido en la nueva implementacin la inclusin


del sello de tiempo a una firma y para ello es necesario configurar las
variables antes sealadas. Y con esta se puede actuar de la misma manera
que en su uso anterior pero indicando que usa una TSA, o usando uno de los
mtodos sobrecargados para indicarse mediante parmetro el usuo o no de
la marca de hora en la firma.

rea de Integracin y Arquitectura de Aplicaciones Pgina: 6


Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdireccin General de Desarrollo, Tecnologa e Infraestructuras
Manual de uso pdf_sign.jar FRAMEWORK JAVA 2

4 EJEMPLO

4.1 Ejemplo general de firma

import pdf.sign.PdfSigner;
import pdf.sign.bean.PdfSignAppearance;

...

// Configuracin de la firma

PdfSigner demo = new PdfSigner(Config.getConfig());

// Bean con las propiedades


PdfSignAppearance psa = pdfSigner.getPdfSignAppearance();

// Colocacin de la firma
psa.setX(<columna>);
psa.setY(<fila>);

psa.setHeight(<alto>);
psa.setWidth(<ancho>);

// Firma
pdfSigner.signPDF(
new FileInputStream(<ruta del documento a firmar>),
new FileOutputStream(<ruta destino con el documento firmado>),
false);

rea de Integracin y Arquitectura de Aplicaciones Pgina: 7


Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdireccin General de Desarrollo, Tecnologa e Infraestructuras
Manual de uso pdf_sign.jar FRAMEWORK JAVA 2

4.2 Ejemplo general con sello de tiempo

import pdf.sign.PdfSigner;
import pdf.sign.bean.PdfSignAppearance;

...

// Configuracin de la firma

PdfSigner demo = new PdfSigner(Config.getConfig());

// Bean con las propiedades


PdfSignAppearance psa = pdfSigner.getPdfSignAppearance();

// Colocacin de la firma
psa.setX(<columna>);
psa.setY(<fila>);

psa.setHeight(<alto>);
psa.setWidth(<ancho>);

// Firma
pdfSigner.signPDF(
new FileInputStream(<ruta del documento a firmar>),
new FileOutputStream(<ruta destino con el documento firmado>),
true);

4.3 Ejemplo invocando con sello de tiempo y firma invisible


// Configuracin de la firma

PdfSigner demo = new PdfSigner(Config.getConfig());

// Bean con las propiedades


PdfSignAppearance psa = demo.getPdfSignAppearance();

// Establecer firma invisible


psa.setVisible(false);

// Firma
demo.signPDF(<ruta del documento a firmar>, <ruta destino con el
documento firmado>,true);

4.4 Notas

En caso de que el PDF este en memoria y no queramos guardarlo fsicamente


la llamada sera as:

pdfSigner.signPDF(

rea de Integracin y Arquitectura de Aplicaciones Pgina: 8


Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdireccin General de Desarrollo, Tecnologa e Infraestructuras
Manual de uso pdf_sign.jar FRAMEWORK JAVA 2

new ByteArrayInputStream(<arrayEntrada>),
new ByteArrayOutputStream(<arraySalida>));

Obs: tambin con opcin para sello de tiempo.

Para poder firmar en varias pginas, debe indicarse la pgina de destino antes
de efectuar la firma:

psa.setPage(<n de pgina>);

rea de Integracin y Arquitectura de Aplicaciones Pgina: 9


Direccin de Anlisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdireccin General de Desarrollo, Tecnologa e Infraestructuras