Introducció de
la API de firma digital |
Contenido
2. Características
significativas de la API
3. Entornos
de ejecución de la API de firma digital
4. Ejecución
en estaciones de trabajo
5. Ejecución
en servidores de aplicaciones J2EE
9. Elementos
del sistema operativo
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.
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.
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.
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.
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.