ATLAS MANUAL DE INTEGRACIÓN Servicios de Firma AFC Servidor Versión 1.1 Arquitectura de Software Framework Atlas Servicios de Firma AFC Servidor Hoja de Control Título Servicios de Firma AFC Servidor Documento de Referencia NORMATIVA ATLAS Responsable Arquitectura de Software Versión 1.1 Fecha Versión 27/05/2014 Registro de Cambios Versión Causa del Cambio 1.0 Versión inicial del documento Responsable del Cambio Fecha del Cambio Área de Soluciones, Aplicaciones Especiales y Arquitectura de 06/02/2014 Software Área de Soluciones, Aplicaciones 1.1 Se da soporte a la firma CADES Especiales y Arquitectura de Software 2 de 11 26/03/2014 Framework Atlas Servicios de Firma AFC Servidor Índice 1. INTRODUCCIÓN ................................................................................................................................................................ 4 1.1. AUDIENCIA OBJETIVO ...................................................................................................................................................... 4 2. DESCRIPCIÓN .................................................................................................................................................................... 5 3. INSTALACION Y CONFIGURACION............................................................................................................................. 5 3.1. ALTA EN AFC ............................................................................................................................................................... 5 3.2. CONFIGURACION ....................................................................................................................................................... 6 3.2.1. Configuracion de acceso a AFC ............................................................................................................................. 6 3.3. INSTALACION .............................................................................................................................................................. 6 3.3.1. Paso 1: Añadir la dependencia al módulo de Administración Electrónica ............................................................ 6 3.3.1. Paso 2: Actualizar la configuración de Spring ....................................................................................................... 7 3.3.2. Paso 3: Inyectar el Servicio en las clases que lo requieran.................................................................................... 7 4. USO ........................................................................................................................................................................................ 8 4.1. 4.2. 4.3. 4.4. 4.5. 5. FIRMA DOCUMENTOS EN SERVIDOR ..................................................................................................................... 8 VERIFICACION DE FIRMA DOCUMENTOS EN SERVIDOR .................................................................................. 8 FIRMA ASINCRONA DE DOCUMENTOS EN SERVIDOR ....................................................................................... 9 RECOGIDA DE DOCUMENTOS FIRMADOS DE FORMA ASINCRONA EN SERVIDOR .................................. 10 EXCEPCIONES PRODUCIDAS POR LAS OPERACIONES DE SERVIDOR.......................................................... 10 ENLACES RELACIONADOS .......................................................................................................................................... 11 3 de 11 Framework Atlas Servicios de Firma AFC Servidor 1. INTRODUCCIÓN AFC es la solución de firma centralizada para las aplicaciones de la Comunidad de Madrid. Objetivos buscados: Operativo de firma similar y centralizada. Formatos comunes de firma compatibles con ENI (Esquema Nacional de Interoperabilidad) Simplificar la integración de requisitos de firma en los desarrollos. Transparencia en las actualizaciones de la plataforma de firma Inventario de aplicaciones y tipos de firmas Histórico y estadísticas de operaciones realizadas Operaciones que permite: Firma digital en cliente Firma digital en servidor Validación de firmas Tipos de firma (Admitidos por el ENI) PADES – Pdf Adavanced Electronic Signatures XADES - Xml Adavanced Electronic Signatures CADES – CMS Advanced Electronic Signatures Integración: La integración con la solucion de AFC se realiza a través de la librería del Framework Atlas atlasfrm_eadm (librería que conecta con los servicios de administración electrónica). Esta librería puede ser utilizada tanto por aplicaciones desarrolladas con el framework Atlas así como las desarrolladas con otros frameworks Java (framework 2 o framework Justicia). Dentro de esta librería podemos encontrar dos servicios: AfcOpeClienteService: Servicio de Operaciones en cliente AfcOpeServidorService: Servicio de Operacion en servidor Este documento describe el servicio de afc para operaciones en servidor. Si se necesitan operaciones en cliente consultar el manual ATLAS_MUS_Servicio_AFC_Ope_Cliente. Si se va a utilizar desde una aplicación que no es del framework ATLAS consultar el manual FW2_MUS_Integracion_AFC. 1.1. Audiencia objetivo Este documento está orientado a desarrolladores java que necesiten realizar operaciones de firma en Servidor. 4 de 11 Framework Atlas Servicios de Firma AFC Servidor 2. DESCRIPCIÓN Las operaciones que el servicio de AFC ofrece en servidor son:: firmarDatos – para firma síncrona de ficheros en servidor verificarFirma – para verificar un fichero firmado en servidor firmarDatosAsinc – para firma asíncrona de ficheros en servidor consultaAsinc – para consultar datos firmados asíncronamente 3. INSTALACION Y CONFIGURACION 3.1. ALTA EN AFC Antes de utilizar el servicio de AFC en desarrollo es necesario autorizar a la aplicación. Las peticiones de autorización de uso del servicio AFC se dirigirán a través del servicio Remedy al grupo GC.AE. Para firma en servidor es necesario indicar en la petición los siguientes datos: Aplicación: Código poaps del proyecto Nombre del módulo técnico: Nombre del modulo tecnico que se va a integrar con AFC. Este valor será el que se informará en el fichero de configuración de la aplicación en la propiedad afc.modulo. Descripción uso: Breve descripción del uso que se requiere del servicio AFC Entorno: Entorno donde se requiere la autorización Login administrador: Usuario con el que acceder al entorno AFC para la administración de documentos Para cada tipo de documento a firmar - Nombre del tipo de documento - Formato: XADES, PADES o CADES - Firma Sincrona o asincrona - Firma visible o no: Por defecto No - En caso de firma visible: o Fuente: Por defecto Arial 8 o ubicación de la firma.(coordenadas) - Nombre de la operación de firma en ASF: Por defecto FIRMA_SIMPLE - Alias del sello de organo con el que se va a firmar: En desarrollo por defecto 5M. Una vez que se autorice su uso se recibirá una password (diferente para cada entorno) que habrá que informar en el fichero de configuración en la variable afc.password. 5 de 11 Framework Atlas Servicios de Firma AFC Servidor 3.2. CONFIGURACION 3.2.1. Configuracion de acceso a AFC La información de acceso, así como las configuraciónes de firma se definirán en el fichero de configuración mediante las siguientes variables (el nombre de estas variables es igual para todos los frameworks): Variable afc.modulo Descripción Nombre del módulo para autenticarse contra el servicio de Obligatorio SI ASF. Se corresponde con el nombre dado de alta en el Servicio de ASF. afc.password Contraseña de acceso, debe estar cifrada. Esta contraseña SI se proporciona cuando se solicita el acceso al Servicio de AFC. A continuación se muestra un ejemplo de configuración. Ejemplo de configuracion # Configuracion de acceso a AFC afc.modulo=ejpl_app afc.password=07d818957a3fa16671165a836732cd6bc23c0008f520e3c9642fd06cce762eac 3.3. INSTALACION El Servicio AfcOpServidorService viene incluido en el módulo de Administración Electrónica de Atlas. Para poder utilizarlo, bastará con incluir la dependencia de este módulo en el fichero pom.xml del proyecto. 3.3.1. Paso 1: Añadir la dependencia al módulo de Administración Electrónica Para añadir la dependencia al módulo de Administración Electrónica (eadm-lib) dentro de nuestro proyecto maven hay que añadir una entrada “dependency” en la sección “dependencies” del fichero “pom.xml” del proyecto, como se puede ver en el siguiente ejemplo: 6 de 11 Framework Atlas Servicios de Firma AFC Servidor pom.xml <dependencies> … <dependency> <groupId>atlasfrm</groupId> <artifactId>atlasfrm-eadm-lib</artifactId> <version>${atlasfrm-eadm-lib.version}</version> </dependency> </dependencies> 3.3.1. Paso 2: Actualizar la configuración de Spring Es necesario importar la configuración de Spring para los servicios de la librería eadm dentro del fichero applicationContext-services.xml. applicationContext-services.xml <import resource="classpath:/conf/applicationContext-eadm-lib.xml" /> 3.3.2. Paso 3: Inyectar el Servicio en las clases que lo requieran Para inyectar el Servicio previamente definido, se pasa como “property” al bean que lo vaya a usar, que debe tener el método “set” correspondiente. Para más información sobre cómo inyectar referencias, se puede consultar la documentación de Spring. applicationContext-services.xml <bean id="miService" class="xxxx.services.MiServiceImpl" p:afcOpServidorService-ref=" afcOpServidorService"/> xxxx.services.MiServiceImpl.java public class MiServiceImpl implements MiService { private AfcOpServidorService afcOpServidorService; public void set AfcOpServidorService (AfcOpServidorService cryptService) { this. afcOpServidorService = afcOpServidorService; } ... } 7 de 11 Framework Atlas Servicios de Firma AFC Servidor 4. USO Una vez configurado y inyectado el servicio se puede proceder a utilizar todas las funcionalidades que ofrece. 4.1. FIRMA DOCUMENTOS EN SERVIDOR La firma de documentos en servidor se realiza mediante el método firmarDatos() AfcOpServidorService.java /** * Firma digitalmente los datos pasados como parámetro. * @param data datos a firmar * @param documentoTipo Código de documento tipo registrado en AFC * para la aplicación que le llame * @return datos firmados * @throws AfcOpServidorServiceException */ byte[] firmarDatos(byte[] data, String documentoTipo) throws AfcOpServidorServiceException; Ejemplo de firma de documentos en Servidor public void firmarFichero(String nombreFichero) throws Exception { File ficheroPrueba = new File(nombreFichero); InputStream isFichero = new FileInputStream(ficheroPrueba); byte[] data = IOUtils.toByteArray(isFichero); byte[] resultado = this.afcOpServidorService.firmarDatos(data, "CT_PDF"); … … } 4.2. VERIFICACION DE FIRMA DOCUMENTOS EN SERVIDOR La verificación de firmas de documentos en servidor se realiza mediante el método verificarFirma() Devuelve una lista de certificados con los que está firmado el documento. AfcOpServidorService.java /** * Verifica que el documento proporcionado está firmado correctamente. * * @param data datos a verificar la firma * @param documentoTipo Código de documento tipo registrado en AFC * para la aplicación que le llame * @return Datos de los certificados de las firmas * @throws AfcOpServidorServiceException */ AfcDatosCertificado[] verificarFirma(byte[] data, String documentoTipo) throws AfcOpServidorServiceException; 8 de 11 Framework Atlas Servicios de Firma AFC Servidor AfcDatosCertificado.java /** * Clase AfcDatosCertificado para retorno del método * {@link atlas.eadm.services.AfcOpServidorServiceImpl#verificarFirma()} * Métodos de la clase: * getNif() * getNombre() * getCif() * getClavePublica() */ public class AfcDatosCertificado extends DatosCertificado; Ejemplo de firma de documentos en Servidor public void verificarFichero(String ficheroFirmado) throws Exception { File ficheroPrueba = new File(ficheroFirmado); InputStream isFichero = new FileInputStream(ficheroPrueba); byte[] data = IOUtils.toByteArray(isFichero); byte[] resultado = this.afcOpServidorService.verificar(data, "CT_PDF"); … … } 4.3. FIRMA ASINCRONA DE DOCUMENTOS EN SERVIDOR La firma asincrona de documentos en servidor se realiza con el método firmarDatosAsinc() Este método devuelve un código de petición con el que más tarde se recogerá el documento firmado mediante el método consultaAsinc() AfcOpServidorService.java /** * Firma asíncronamente los datos pasados como parámetro. * @param data datos a firmar * @param documentoTipo Código de documento tipo registrado en AFC * para la aplicación que le llame * @return código de petición * @throws AfcOpServidorServiceException */ String firmarDatosAsinc(byte[] data, String documentoTipo) throws AfcOpServidorServiceException; 9 de 11 Framework Atlas Servicios de Firma AFC Servidor Ejemplo de firma asíncrona de documentos en Servidor public void firmarFichero(String nombreFichero) throws Exception { File ficheroPrueba = new File(nombreFichero); InputStream isFichero = new FileInputStream(ficheroPrueba); byte[] data = IOUtils.toByteArray(isFichero); String codigoResultado = this.afcOpServidorService.firmarDatosAsinc(data, "CT_PDF"); … … } 4.4. RECOGIDA DE DOCUMENTOS FIRMADOS DE FORMA ASINCRONA EN SERVIDOR La recogida de documentos firmados de forma asincrona en servidor se realiza con el método consultaAsinc() A este método se le pasa un número de petición obtenido por el método firmarDatosAsinc() AfcOpServidorService.java /** * Regoge los datos de una firma asincrona<br/> * Si la petición está pendiente o no se puede recoger por alguna causa * se lanza una {@link AfcOpServidorServiceException} * * @param codigoPeticion código de petición asincrona devuelto por * firmarDatosAsinc * @return datos firmados * @throws AfcOpServidorServiceException */ byte[] consultaAsinc(String codigoPeticion) throws fcOpServidorServiceException; Ejemplo de firma asíncrona de documentos en Servidor public void recogerFichero(String codigoPeticion) throws Exception { byte[] resultado = this.afcOpServidorService.consultaAsinc(codigoPeticion); … … } … 4.5. EXCEPCIONES PRODUCIDAS POR LAS OPERACIONES DE SERVIDOR Todas las operaciones en servidor lanzan una AfcOpServidorServiceException que incluyen dos métodos para saber el código de error y mensaje de error producido por AFC. 10 de 11 Framework Atlas Servicios de Firma AFC Servidor AfcOpServidorService.java /** * Excepcion lanzada por las Operaciones de servidor de AFC * {@link atlas.eadm.services.AfcOpServidorService} * Tiene dos métodos que devuelven información del error producido por AFC * getCodigoError() * getMensajeError() */ public class AfcOpServidorServiceException extends ServiceException implements Serializable; 5. ENLACES RELACIONADOS Producto URL Axis2 http://ws.apache.org/axis2/ Certificados ICM http://desarrollo.madrid.org/certificados/ Descarga certificados de prueba http://desarrollo.madrid.org/certificados/descarga_de_certificados.htm 11 de 11