La firma electrónica en los servicios públicos desde la perspectiva de las ad...
2015 10 - Curso Cliente @firma INAP día 1
1. Módulo 1:
Firma electrónica y suite @firma
Integración del
cliente @firma
Ministerio de Hacienda y Administraciones Públicas
2. Había pensado que se podría organizar:
>>> * Día 1: Clase teórica
>>> - Conceptos de firma electrónica
>>> - Suite @firma
>>> - Suite del cliente
>>> - Componentes del cliente de firma: módulos, bibliotecas externas
>>> - Comunidad
>>> - Vista rápida de legislación en firma-e y nueva directiva europea
>>> de identidad electrónica
>>>
>>>
3. 1. Firma electrónica
2. Suite @firma
3. Cliente de firma
- Conceptos de firma electrónica
>>> - Suite @firma
>>> - Suite del cliente
>>> - Componentes del cliente de firma: módulos, bibliotecas externas
>>> - Comunidad
>>> - Vista rápida de legislación en firma-e y nueva directiva europea
>>> de identidad electrónica
ÍNDICE
4. 1. FIRMA ELECTRÓNICA
Desarrollar:
Qué es
Garantías: integridad, autenticidad, no repudio,…
Ley de Firma y Reglamento EIDAS:
Firma electrónica, avanzada, reconocida/cualificada
Sello electrónico
Sello de tiempo electrónico
…
TSL
Otra legislación
Certificados electrónicos
Circulo de confianza de PKI
5. 2. SUITE @FIRMA
Desarrollar:
Firma Cliente: applet / miniapplet
Firma Escritorio: firmafacil / standalone
Firma Servidor: Integr@
Firma Web: Valide
Firma Móvil:
Firma con workflow: Portafirmas
Validación de firmas: Plataforma
Visualización de firmas: Valide
Sellado de tiempo: TSA
6. 3. CLIENTE @FIRMA
Introducción
Proyecto Java de software libre
Contiene múltiples módulos que proporcionan operaciones criptográficas
Principales funcionalidades:
– Firma y multifirma electrónica en diversos formatos
– Operaciones masivas de firma
– Acceso a almacenes de certificados
– Cifrado simétrico de datos
– Generación de sobres electrónicos
La integración del cliente facilita el uso de estas capacidades
criptográficas
Dentro del proyecto también se engloban diversas aplicaciones que
puede utilizar el usuario final o un integrador que desee funciones de más
alto nivel.
7. 3. CLIENTE @FIRMA
Introducción
El Cliente hace uso de los certificados digitales X.509 y de las claves
privadas asociadas a los mismos que estén instalados en repositorios
(keystores):
Internos:
Repositorio de Windows / Internet Explorer
Repositorio de Mozilla / Firefox (Linux y en Windows)
Repositorio de Mac OS X
Repositorios en disco (PKCS#12/PFX y JKS)
Externos (no directamente, sino a través de los internos o su
PKCS#11):
SmartCards
Token USB
8. 3. CLIENTE @FIRMA
Descripción de módulos
Los módulos desarrollados dentro del proyecto Cliente @firma
proporcionan funcionalidades independientes.
Las relaciones entre estos módulos están bien definidas y vienen dadas
por el uso que hacen de las funciones proporcionadas por el resto.
afirma-core
– Es el núcleo del proyecto.
– En este módulo se incluyen las interfaces que deben implementar las clases
que den soporte a nuevos formatos de firma, mecanismo de cifrado simétrico
y de gestión de sobres digitales.
– Se incluye también:
• Clases de utilidad genérica.
• Clases para la identificación del formato de ficheros.
• Una clase para la identificación del entorno de ejecución.
• Una clase para la gestión de los interfaces gráficos.
• Excepciones de uso general.
9. 3. CLIENTE @FIRMA
Descripción de módulos
afirma-core-keystores
– Módulo central para la gestión de almacenes de certificados.
– Proporciona directamente la lógica para el uso de varios almacenes:
• Almacén de Windows (MSCapi)
• Almacén de MAC OS X
• Almacenes en fichero PKCS#12, JKS,…
• Dispositivos PKCS#11
– Adicionalmente, contiene:
• Clases para la gestión de filtros de certificados.
• Callbacks para la inserción de contraseñas de almacenes y certificados.
• Lógica para el uso del diálogo de selección de certificados.
• Excepciones de uso general para la gestión de errores en almacenes.
afirma-keystores-single
– Módulo para la gestión de certificados sueltos en disco.
– Proporciona un proveedor de seguridad de tipo KeyStore.
10. 3. CLIENTE @FIRMA
Descripción de módulos
afirma-keystores-mozilla
– Módulo para la gestión del almacén de Mozilla Firefox.
– Proporciona un proveedor de seguridad de tipo KeyStore.
afirma-keystores-capiaddressbook
– Módulo para el acceso a la libreta de direcciones de Microsoft Windows.
– Proporciona un proveedor de seguridad de tipo KeyStore.
afirma-keystores-filters-rfc
– Módulo para la gestión de filtros de certificados mediante el estándar RFC-
2254, filtros por KeyUsage y por número de serie del certificado.
– Permite definir filtros para su uso en el diálogo de selección de certificados.
afirma-keystores-filters-old
– Módulo para la gestión de filtros de certificados según la definición del Cliente
@firma v2.4.
– Permite definir filtros para su uso en el diálogo de selección de certificados.
11. 3. CLIENTE @FIRMA
Descripción de módulos
afirma-core-firmaweb
– Módulo para la ejecución de firmas sobre formularios Web importado del
Cliente @firma v2.4.
– Actualmente no se ofrece soporte a las funcionalidades proporcionadas por
este módulo.
afirma-core-massive
– Módulo para la ejecución de procesos de firma/multifirma masiva.
– Contiene las clases para diversos proceso de firma masiva:
• Firma masiva de ficheros.
• Firma masiva programática.
afirma-crypto-core-pkcs7
– Módulo con las funciones básicas para la generación de firmas y envoltorios
binarios.
12. 3. CLIENTE @FIRMA
Descripción de módulos
afirma-crypto-core-pkcs7-tsp
– Módulo con la lógica necesaria para la inclusión de sellos de tiempo en firmas
binarias.
afirma-crypto-cms
– Módulo con el manejador para la generación de firmas en formato
CMS/PKCS#7.
afirma-crypto-cms-enveloper
– Módulo con el manejador para la generación de envoltorios CMS/PKCS#7.
afirma-crypto-cades
– Módulo con el manejador para la generación de firmas (y multifirmas según
dependencias) en formato CAdES.
afirma-crypto-cades-multi
– Módulo con las funciones de multifirma CAdES.
13. 3. CLIENTE @FIRMA
Descripción de módulos
afirma-crypto-pdf
– Módulo con el manejador para la generación de firmas en formato
PAdES/PDF.
afirma-crypto-core-xml
– Módulo con las funciones básicas para la generación de firmas XML.
afirma-crypto-xades
– Módulo con el manejador para la generación de firmas en formato XAdES.
– Incorpora el módulo para la firma de facturas electrónicas.
afirma-crypto-xmlsignature
– Módulo con el manejador para la generación de firmas en formato XMLdSig.
afirma-crypto-odf
– Módulo con el manejador para la generación de firmas en formato ODF.
– Compatible con los documentos de Writer, Calc e Impress.
14. 3. CLIENTE @FIRMA
Descripción de módulos
afirma-crypto-ooxml
– Módulo con el manejador para la generación de firmas en formato OOXML.
– Compatible con los documentos de Word, Excel y PowerPoint.
afirma-crypto-cipher
– Módulo con las funciones de cifrado simétrico.
– Utiliza el proveedor de seguridad SunJCE.
afirma-ui-core-jse
– Módulo con la implementación de los diálogos gráficos necesarios por el
Cliente para su uso en un entorno JSE.
afirma-ui-core-jse-keystores
– Módulo con la implementación del dialogo de selección de certificados
utilizado por el Cliente en entornos JSE.
afirma-util
– Módulo con clases de utilidad.
15. 3. CLIENTE @FIRMA
Bibliotecas externas
BouncyCastle (v1.52)
– Biblioteca criptográfica que proporciona clases y funciones para el tratamiento
de objetos ASN.1 y procesamiento de firmas binarias.
– http://www.bouncycastle.org/
JXAdES
– Biblioteca para la generación de firmas electrónicas de acuerdo al estándar
de firma electrónica avanzada (XAdES).
– https://universitatjaumei.jira.com/browse/JXADES
iText
– Biblioteca para el tratamiento y firma de documentos PDF.
– El Cliente Afirma utiliza una versión modificada de la versión 2.1.7 de iText
(última versión con licencia compatible con la del Cliente @firma) para
hacerla compatible con BouncyCastle v1.52 y proporcionar diversas
características).
16. 3. CLIENTE @FIRMA
Bibliotecas externas
JMimeMagic / Apache Jakarta ORO
– Bibliotecas para la identificación de formatos de datos.
– Versiones modificadas para reducir tamaño y eliminar dependencias.
– http://sourceforge.net/projects/jmimemagic/
– http://jakarta.apache.org/oro/
Universal Charset Detector
– Biblioteca utilizada por el MiniApplet para la identificación de codificaciones de
texto.
17. 3. CLIENTE @FIRMA
Aplicaciones construidas dentro del Cliente @firma
Dentro del propio proyecto @firma se han desarrollado diversas
aplicaciones que incorporan parte de los anteriores módulos.
Estas aplicaciones sirven a:
– Usuarios finales que requieren de estas funcionalidades criptográficas.
– Integradores que necesitan funciones de más alto nivel para la integración de
las capacidades criptográficas en sus sistemas y aplicaciones.
Las principales aplicaciones desarrolladas dentro del proyecto son:
– Applet Cliente @firma
– MiniApplet
– Interfaz StandAlone
– SimpleAfirma
– @firma móvil
– Portafirmas móvil
18. 3. CLIENTE @FIRMA
Applet Cliente @firma
El applet Cliente @Firma es una aplicación cliente que proporciona
capacidades criptográficas a segundas aplicaciones.
Es la aplicación más antigua y conocida del proyecto.
– Integrada en más de un centenar de organismos públicos.
Permite que aplicaciones externas hagan uso de sus funcionalidades a
través de interfaces Java y JavaScript, independientemente del entorno
de desarrollo en que hayan sido programadas.
Compatibilidad con múltiples entornos:
– Versiones de Java: 6, 7 y 8 (32 y 64 bits).
– Sistemas operativos: Windows, Linux, Mac OS X y Solaris.
– Navegadores Web: Internet Explorer, Firefox, Safari,…
19. 3. CLIENTE @FIRMA – Applet Cliente
Funcionalidades
Firma electrónica.
Operaciones de firma, cofirma, contrafirma y operaciones masivas.
Distintos modos, formatos, algoritmos,…
Cifrado / descifrado.
Cifrado y descifrado mediante clave simétrica.
Cifrado por contraseña.
Sobres digitales.
Sobres envueltos.
Sobres envueltos y firmados.
Sobres autenticados.
Acceso a múltiples almacenes.
– Windows
– Mozilla
– …
20. Última versión con cambios funcionales.
Incorpora todos los manejadores de firma con las últimas mejoras
disponibles.
Se abandona la distribución de varias construcciones.
Se elimina compatibilidad con Java 5.
Se eliminan características deprecadas sin soporte:
Firma Web.
Filtros de certificados antiguos.
Firma de múltiples hashes.
Compatibilidad en Mac OS X con la JDK de Oracle.
Se omiten advertencias en la carga de recursos del mismo dominio.
Correcciones varias.
Actualización a la última versión de sus dependencias.
3. CLIENTE @FIRMA – Applet Cliente
Nueva versión 3.4
21. 3. CLIENTE @FIRMA
MiniApplet
Applet cliente con funcionalidades de firma.
Gran estabilidad y fiabilidad.
Diferencias con el applet Cliente @firma:
– Despliegue e integración simplificadas.
– Mejor sistema de tratamiento de errores.
– Sistema de filtros preconfigurado.
– Políticas de firma preconfiguradas.
– Permite la carga de ficheros de mayor tamaño.
– Permite la generación de firmas trifásicas.
– No dispone de funcionalidades de cifrado, generación de sobres digitales,
firma masiva…
Desarrollo compatible con el Cliente de firma móvil y Autofirma para
permitir la compatibilidad de entornos en los que los applets están
restringidos o cuando el usuario no permite su ejecución.
22. 3. CLIENTE @FIRMA – Miniapplet
Nueva versión 1.3
Agrega nuevas funcionalidades:
– Nuevos filtros prediseñados.
– Configuración automática de la política de firma v1.9 de la AGE.
– Iconos informativos en el diálogo de selección de certificados.
– Escritura de log en disco para simplificar la notificación de incidencias.
– Notificación de desfases de tiempo con el servidor.
– Descarga de contenido remoto mediante JavaScript para firma.
Mejoras en los distintos módulos del proyecto.
– Nuevas opciones de configuración en todos los formatos de firma.
– Soporte para la firma de datos de mayor tamaño.
– Mayor estabilidad en los procesos de firma trifásica.
– Mejora de compatibilidad en los nuevos entornos.
Despliegue compatible con el Cliente @firma móvil y clientes nativos.
23. 3. CLIENTE @FIRMA
Interfaz StandAlone
Potente interfaz gráfica de escritorio para operaciones criptográficas.
Permite:
– Firmas y multifirmas.
– Multifirmas masivas de ficheros.
– Cifrado simétrico.
– Generación de sobre digitales.
Acceso a múltiples almacenes.
Múltiples formatos y algoritmos de firma.
Sistema de asistentes para la realización de operaciones.
Multiplataforma.
Ayuda detallada.
25. 3. CLIENTE @FIRMA – Standalone
Situación actual
La versión 2.1 incorpora:
– Interfaz renovada.
– Sistema de perfiles de usuario.
– Completamente accesible.
– Mejor identificación de errores.
– Integración con el driver 100% Java de DNIe.
– Validación de estructura de firmas en local (no de certificados).
Se aprovecha de las mejoras realizadas en cada uno de los módulos del
proyecto.
– Compatibilidad el almacén de los últimos Firefox.
– Compatibilidad con nuevas distribuciones de Linux.
– Configuración de firmas PAdES-Basic y PAdES-BES
– Etc.
27. 3. CLIENTE @FIRMA
SimpleAfirma
Interfaz gráfica de escritorio.
Funcionalidades:
– Firma
– Cofirma
Utiliza el repositorio de certificados del sistema.
Precarga de almacén para un uso más ágil.
Integrado con el driver Java de DNIe.
Multiplataforma.
Configuración individual para cada formato de firma.
Política de la AGE integrada.
Ayuda detallada.
Compatible con los despliegues del MiniApplet @firma v1.3 y superiores.
29. 3. CLIENTE @FIRMA
Componentes del applet Cliente @firma
El applet Cliente @firma está compuesto por:
Un applet con la funcionalidad global del cliente.
A los integradores se les ofrece:
Las bibliotecas JavaScript necesarias para la carga, configuración
del cliente y el uso de las funcionalidades del cliente.
Páginas HTML con ejemplos de uso del cliente.
30. 3. CLIENTE @FIRMA
Construcciones
▶ Se dispone de tres construcciones del cliente, consistentes en
tres distribuciones del núcleo con distintas funcionalidades.
▶ Construcción LITE:
– Firmas/multifirmas CMS, CAdES y las funcionalidades de cifrado y
sobre digital.
▶ Construcción MEDIA:
– Capacidades de la construcción Lite y las firmas/multifirmas XAdES,
XMLdSig, ODF, OOXML y factura electrónica.
▶ Construcción COMPLETA:
– Capacidades de la construcción Media y las firmas/multifirmas PDF.
La versión 3.4 del Applet Cliente @firma abandona el sistema de
construcciones. Sólo se distribuye un JAR con todas las
funcionalidades.
31. 3. CLIENTE @FIRMA v3.4
Instalación y despliegue
Nombre Descripción
applet_afirma_3_4.jar Applet con las funcionalidades del Cliente @firma.
constantes.js Fichero con los parámetros de configuración del cliente @firma.
instalador.js Biblioteca con las interfaces para carga del cliente.
firma.js Funciones de ayuda para la generación de firmas.
cripto.js Funciones de ayuda para el uso de las funciones de cifrado.
» Ficheros requeridos:
32. 3. CLIENTE @FIRMA
Configuración
Existen ciertos parámetros del cliente configurables mediante el fichero JavaScript
“constantes.js”.
Variable Por defecto Descripción
base
Directorio de la
página de carga
Ruta al directorio del BootLoader
signatureAlgorithm SHA512withRSA Algoritmo de firma por defecto.
signatureFormat CAdES Formato de firma por defecto
signatureAlgorithm SHA512withRSA Algoritmo de firma por defecto.
33. 3. CLIENTE @FIRMA
Configuración
Variable Por defecto Descripción
showErrors false
Indica si se deben mostrar al usuario los errores internos
sufridos por el cliente.
showMozillaSmartCa
rdWarning
false
Indica si debe advertirse antes de la carga del almacén
por defecto cuando el navegador sea Firefox que se
inserten las tarjetas inteligentes en los lectores.
showExpiratedCertifi
cates
true
Indica si se deben mostrar los certificados caducados en
el diálogo de selección de certificados para firma.
locale Vacío Idioma por defecto de la aplicación
CUSTOM_JAVA_ARG
UMENTS
Vacío
Parámetros que deseamos que el applet establezca
como propiedades del sistema durante la inicialización.
34. 3. CLIENTE @FIRMA
Notas sobre la configuración
Es recomendable dar valor siempre a “base”
El establecimiento de los valores por defecto “signatureAlgorithm”,
“signatureFormat ” y “cipherAlgorithm” se produce al llamar al método
“configuraFirma()” de firma.js o " configuraCifrador" de cripto.js.
El establecimiento del valor por defecto de "showErrors" se produce al
invocar al método “initialize()” de la biblioteca crypto.js o firma.js.
El Cliente @firma v3.4 sólo dispone del gallego como idioma incorporado
que pueda cargarse a través del parámetro "locale".
35. 3. CLIENTE @FIRMA
Componentes del MiniApplet
Los elementos que se distribuyen con el MiniApplet son:
miniapplet-full_x_y.jar
Applet con la funcionalidad global.
miniapplet.js
Biblioteca JavaScript para la carga y uso del MiniApplet.
miniapplet.html
Página web con ejemplo de carga y uso del MiniApplet.
A los integradores se les ofrece:
Manual del integrador.
Javadoc completo.
Javadoc sólo de la clase applet.
36. 3. CLIENTE @FIRMA
Applet Cliente @firma: Modelo a seguir
Forma de operar:
1. Toma de datos.
Recogemos todos los datos insertados por el usuario o tomados de la sesión.
Evitar la preconfiguración de variables.
2. Inicialización del applet de firma.
Reinicio de todas las variables mediante el método initialize().
3. Configuración de todos los parámetros.
Concentración de la configuración.
4. Ejecución de la operación.
Firma, cifrado, ensobrado, operación masiva,…
5. Recuperación del resultado.
Obtención de firma/multifirma, datos cifrados, datos planos, sobres digitales…
37. 3. CLIENTE @FIRMA
Origen de datos
La selección de los datos puede realizarse de varias formas:
Datos: Se especifican en base 64 los datos a firma. Este método es útil
cuando los datos se han generado como parte del procedimiento (formulario
de datos, ficheros cargados en memoria,…).
Método del cliente: setData(String b64Data);
Ficheros: Se especifica la ruta, local o remota, de un fichero. Este método es
útil cuando el ciudadano desea aportar documentos para un procedimiento
(envió de documentación para trámites, escritos,…).
Método del cliente: setFileuri(String uri);
Hash: Se especifica en base 64 el hash de los datos que deseamos firmar.
Este método es útil para generar firmas sin obligar a subir grandes cantidades
de datos al servidor (carga de ficheros grandes, principalmente).
Método del cliente: setHash(String hash);
41. 3. CLIENTE @FIRMA
MiniApplet vs Applet Cliente
El almacén de certificados sólo puede modificarse durante la carga.
Todos las opciones de configuración de una operación se proporcionan
como parámetros de la función que la ejecuta.
Cada función que ejecuta una operación criptográfica devuelve el
resultado como valor de retorno.
Siempre se opera sobre datos en memoria.
Cualquier selección de fichero (carga o guardado) debe realizarla el
usuario.
Sistema de filtro de certificados predefinidos.
Expansión de variables de configuración.
La gestión de errores se realiza mediante excepciones.
42. 3. CLIENTE @FIRMA
Comunidad
El Ministerio de Hacienda y Administraciones Públicas en colaboración
con Cenatic ha convertido el Cliente @firma en un proyecto de software
libre alrededor del cual se ha construido una comunidad de
desarrolladores.
La comunidad permite que cualquier entidad contribuya al proyecto
agregando nuevas funcionalidades, dando soporte a la comunidad (listas
de distribución, foros,…), realizando baterías de pruebas, aportando
equipos de pruebas (dispositivos móviles, máquinas virtuales en
servidores,…)
En el proyecto participan tanto individuos a nivel personal como distintas
empresas y entidades:
43. 3. CLIENTE @FIRMA
Comunidad
El proyecto Cliente @firma se desarrolla desde la forja del Centro de
Transferencia Tecnológica (CTT) del Ministerio de Hacienda y
Administraciones Públicas (MinHAP).
CTT: http://forja-ctt.administracionelectronica.gob.es/web/clienteafirma
El código se sincroniza a diario con GitHub para obtener una mayor
visibilidad:
GitHub: https://github.com/ctt-gob-es/clienteafirma
La Universidad Jaume I ha puesto a disposición un sistema de integración
continua para facilitar las pruebas, el empaquetado y la comprobación de
la calidad del proyecto.
Jenkins: http://devel.uji.es/hudson/job/afirma-client/
Sonar: http://devel.uji.es/sonar/components/index/es.gob.afirma:afirma-client
El código de la aplicación se encuentra mavenizado para facilitar la
construcción de los distintos artefactos.