Introducció de la API de firma digital

 

 

Contenido

1.      Objetivos. 1

2.      Características significativas de la API 1

3.      Entornos de ejecución de la API de firma digital 2

4.      Ejecución en estaciones de trabajo. 2

5.      Ejecución en servidores de aplicaciones J2EE. 3

6.      Configuración de la API 3

7.      Tipos de documento. 4

8.      Utilización del API 5

9.      Elementos del sistema operativo. 5

 

 

 

1.  Objetivos

La API de firma digital permite realizar firma digital de documentos y su validación desde una aplicación Java de manera uniforme e independiente de los medios utilizados para realizar la firma.

 

2.  Características significativas de la API

 

3.  Configuración de la API

La API de firma digital dispone de un fichero de configuración donde se guarda la siguiente información:

Este fichero se utiliza para controlar el funcionamiento de la API y puede ser necesario actualizarlo independientemente del software. La primera vez que se inicia la API, se carga el fichero que viene incorporado en el jar de la propia libreria. Cada vez que se ejecuta, la API va a una dirección de actualización (en principio www.caib.es/signaturacaib/signatura_api.properties) y comprueba si existe una versión más actualizada. Si existe, utiliza la versión más actualizada. Se guarda una copia de la versión utilizada en el directorio de datos del usuario, en /.signaturacaib/signatura_api.properties, para seguir utilizando la versión más actualizada aunque puntualmente no tengamos comunicación con www.caib.es.

El fichero de configuración contiene también una marca de versión que permite a la API comprobar si existe una nueva versión de la API. En caso de que se produzca, se genera una excepción UpgradeNeededException cuando se intenta obtener un Signer.

Como se puede ver, el fichero de configuración contiene información que permite controlar que certificados se pueden utilizar para firmar un documento. Un usuario avanzado no tendria problemas para modificarlo y permitirle firmar con la API con cualquier certificado. Esto no es preocupante puesto que es en los servidores de las diferentes aplicaciones donde se acepta o se rechaza la firma. Evidentemente, si no hay modificación malintencionada o errónea de la configuración del cliente, las firmas que se aceptan en el cliente son las mismas que las que se aceptan en el servidor.

 

4.  Tipos de documento

Como hemos dicho, se configura la relación entre un tipo de documento y el tipo de firma necesario para firmarlo. Los tipos de documento se definen a nivel de aplicación, es decir, cada aplicación define los tipos de documento que utiliza (categorizándolos según su uso interno), y se configura en el fichero de configuración que tipo de firma se va a realizar.

Las características que se definen de la firma son el tipo de certificado requerido (avanzado o reconocido) y si es necesario un sello de tiempo para la firma. Un ejemplo de configuración seria:

               ## Envio de edictos al BOIB

               application/x-caib-rebutregistre=SAST,CR

               application/x-caib-edicte=SA,CR

               application/x-caib-ofici-boib=SAST,CR

En este caso, indicamos que los documentos clasificados como application/x-caib-rebutregistre requieren una firma con sello de tiempo (SAST) y certificado reconocido (CR).

El desarrollador de la aplicación utiliza el tipo de documento a la hora de recuperar los certificados del sistema con que se puede firmar un documento y la configuración debe ser transparente para él.

 

5.  Utilización del API

Un ejemplo de uso de la API en un entorno de ejecución de applet es el sguiente:

               SignerFactory sf = new SignerFactory();

      

               // Obtenemos una instancia de Signer.

               try {

                       signer = sf.getSigner();

               } catch (UpgradeNeededException e) {

                       e.printStackTrace();

                       showMessageError ("upgradeneeded");

                       this.getAppletContext().showDocument(e.getUrl());

                       return ;

               }

 

               ...

 

               // Recuperamos una lista de nombres  de certificados del sistema

               // que pueden firmar documentos con el contentType indicado.

               String[] certList = signer.getCertList(contentType);

 

               ...

 

               // Seleccionar uno de los certificados devueltos en certList

               // i firmar los datos correspondientes.

               Signature signatureData = signer.sign(sourceConnection.getInputStream(),

                                      certName,

                                      passwordText.getText(),

                                      contentType);

 

               // En este momento disponemos de la firma generada en signatureData

               // y ya se puede enviar a la aplicación en el servidor.

 

6.  Elementos del sistema operativo

La API de firma digital utiliza los servicios del sistema operativo para realizar la generación de la firma, ya sea a través de proveedores de SunPKCS#11 o de la CryptoAPI de Microsoft. Estas API requieren que el sistema operativo tenga instalados los drivers correspondientes para cada tipo de tarjeta.

Ver software adicional del cliente para más información.

 



[i] CADES-BES con el contenido convertido a mime antes de ser firmado

[ii] CADES-BES con el contenido convertido a mime antes de ser firmado