21
hackfest de seguridad y firma digital 21 y 22 nov 2012

Taller Firma

Embed Size (px)

DESCRIPTION

firma digital

Citation preview

h a c k f e s t d e s e g u r i d a d y f i r m a d i g i t a l

2 1 y 2 2 n o v 2 0 1 2

creando una aplicación desde cerocon firma electrónica móvil

con DNIe

Título de la presentación 3

algunas notas sobre nosotros

Título de la presentación 4

Sufridores del applet de @firma pesado (@firma3,4,5)OpenOces → viafirma GPLClientes pequeños en nuestros inicios

- Neutralidad en la integración versiones- NSS, Keychain nativo, CryptoAPI, GNOME Keyring- Applet realmente multiplataforma, ¿Donde está el truco?- iOS, Android, Blackberry, Windows Phone 7/8, Windows 8 ARM y PRO.

Historia

Funciona

Nuestro lenguajes

- Java- Javascript- Objetive-c

- Objetive-c- C# / mono- c++

Título de la presentación 5

Dispositivos, navegadores, sistemas operativos, permisos, plugins, Javascript?, cookies?, cache

Conocimientos, experiencia, ayer me funcionaba, antivirus, ...

Eterogeniedad de sistemas

Usuarios

Conexión

Fiabilidad de la conexión, ancho de banda, visibilidad, proxies, tarifa de datos, operadora de red, los malos,....

Nuestros enemigos como desarrolladores

Título de la presentación 6

Nuestro Objetivo

- Simplificar los conceptos involucrados: RSA, SHA1, PAdES, XAdES - Simplificar la integración (dispositivos?, integración?, formatos?....)- Adaptación y evolución continua- Tiene que ser sencillo de utilizar. Nos dan una sola oportunidad.

- Nuestros clientes NO son expertos- Nuestros clientes NO pueden dedicar muchos esfuerzos a EL PROBLEMA- En entornos clásicos de escritorio. Windows, Linux, MacOS.- Cualquier navegador cualquier, máquina virtual,....- En entornos móviles (iOS,Android,Blackberry, Windows phone, ...)- Operaciones de firma desatendidas, HSM, .......

Integradores: Simplificar y desmitificar la firma digital

Usuario: Funcionalidades desde cualquier dispositivo o situación

Título de la presentación 7

principios básicosde funcionamiento

Título de la presentación 8

javascript Applet ?Librerías

ExtrasServidor/ WSDL

Tradicional

Centralizada

viafirma

Título de la presentación 9

haciendo la vida fácila los integradores

Título de la presentación 10

• JavaEE (jdk 1.4+)

• Jbos 4,5,6

• WebSphere 5,6

• WebLogic 7,8,9

• Aspx/.Net

• PHP

portal para desarrolladores

kit de integración

http://developers.viafirma.com

• c++

• Objective-C

• PhoneGap

• Java (Escritorio)

• c#/Mono(Escritorio)

• Java (Android)

• Phyton

• Drupal

• Joomla

• Django

API standard • Jax-ws

• Jax-rs

• openId

Título de la presentación 11

manos a la obra!

Título de la presentación 12

Descargar el SDK

Montar el entorno

¿Qué ofrece el SDK?

Manos a la obra! (I)

Título de la presentación 13

Inicializar el cliente

Ejemplo de autenticación simple

¿Qué está pasando?

Manos a la obra! Autenticación (II)

Título de la presentación 14

Manos a la obra! Autenticación (III)

// Inicializamos el componente de firma// url del servicio, appkey, appPassString url=”http://services.viafirma.com/viafirma”String login="xnoccio";String pass="12345";ViafirmaClientFactory.init(url, url, login, pass);

Inicializar el cliente

Solicitar autenticación

ViafirmaClient client=ViafirmaClientFactory.getInstance();

client.solicitarAutenticacion(request, response,"/test");

Título de la presentación 15

Manos a la obra! Autenticación (IV)

Procesar respuesta autenticación

public class Test extends ViafirmaClientServlet {

public void authenticateOK(UsuarioGenericoViafirma usuario, HttpServletRequest request, HttpServletResponse response) {

// Obtenemos los datos del usuario // TODO procesar la respuesta String nif=usuario.getNumberUserId();

// TODO siguiente paso?}

Título de la presentación 16

Inicializar el cliente

Ejemplo de firma simple

¿Qué está pasando?

Manos a la obra! Firma (V)

Título de la presentación 17

Manos a la obra! Firma (V)

¿Qué quiero firmar?

¿Comó lo quiero firmar?

// 1.- Recuperamos la instancia de ViafirmaCliet ViafirmaClient client=ViafirmaClientFactory.getInstance();

// 2.- ¿Que quiero firmar? Documento documento=new Documento(); byte [] bytes=...; documento.setDatos(bytes); documento.setTipo(TypeFile.PDF); documento.setNombre("Documento ejemplo.pdf");

// 3.- Como quiero firmar Policy policy=new Policy(); policy.setTypeFormatSign(TypeFormatSign.PAdES_BES); policy.setTypeSign(TypeSign.ATTACHED);

Título de la presentación 18

Manos a la obra! Firma (V)

Preparamos el documento para su firma

Solicitamos la firma

// 4.- Iniciamos la firmaString temporalId=client.prepareSignWithPolicy(policy, documento);

// 5.- Solicitamos la firmaclient.solicitarFirma(temporalId,request, response,"/test");

Procesamos la respuestapublic void signOK(FirmaInfoViafirma signInfo, HttpServletRequest req,HttpServletResponse res) { // Obtenemos el identificador de firma String idSign=signInfo.getSignId(); // Recuperamos cualquier otro parametro ...

// Recuperamos el documento o cualquier otra información. byte [] datos=viafirmaClient.getDocumentoCustodiado(idSign);

}

Título de la presentación 19

Nativo - Nativo con salto (iOS, Android)

Librería interna (iOS, Android)

PhoneGap

Appcelerator

App to App Movil

Título de la presentación 20

en acción ...

GRACIAS

Félix García

[email protected]

twitter @felixgborrego