Está en la página 1de 25

DESCRIPCIÓN APP

“DNIE AUTENTICACIÓN”
V 1.0
1 ÍNDICE DEL DOCUMENTO.

1 ÍNDICE DEL DOCUMENTO. ....................................................................................... 2


2 INTRODUCCIÓN. ........................................................................................................... 3
3 OBJETIVO DEL DOCUMENTO .................................................................................. 4
4 ÁMBITO DEL EJEMPLO Y USOS FUTUROS .......................................................... 5
5 REQUISITOS ANDROID ............................................................................................... 7
6 COMPONENTE DNIEDROID ...................................................................................... 8
6.1 Arquitectura lógica ...................................................................................................... 8
6.2 Arquitectura física ....................................................................................................... 9
7 EJEMPLO DE USO: DNIE AUTENTICACION ....................................................... 10
7.1 Descripción de la aplicación ...................................................................................... 10
7.2 Operación genérica de conexión mediante DNIe ...................................................... 11
7.2.1 Menú Principal ................................................................................................... 11
7.2.2 Selección de CAN .............................................................................................. 12
7.2.3 Autenticación del DNIe mediante PIN.............................................................. 14
7.2.4 Resultado de la operación .................................................................................. 16
7.3 Consultas a servicios Web con DNIe ........................................................................ 17
7.3.1 Descripción......................................................................................................... 17
7.3.2 Opción “Tributos” .............................................................................................. 17
7.3.3 Opción “Gestión de Multas” .............................................................................. 17
7.3.4 Opción “Datos censales” .................................................................................... 17
7.3.5 Opción “Consulta de expedientes” ..................................................................... 17
8 ESQUEMA DE FUNCIONAMIENTO: DNIE AUTENTICACIÓN ........................ 18
8.1 Consulta securizada. Correcta. .................................................................................. 18
8.2 Consulta securizada. Fallida. ..................................................................................... 19
8.3 Otros servicios Web................................................................................................... 20
9 REFERENCIAS ............................................................................................................. 21
10 TABLA DE FIGURAS................................................................................................... 22
ANEXO A. CÓDIGO FUENTE RELATIVO AL DNIE 3.0 .............................................. 23
A.1 Ejemplo de extracción de certificados........................................................................... 23
A.2 Ejemplo de realización de firma de datos ..................................................................... 23
A.3 Ejemplo de realización y verificación de firmas ........................................................... 24
A.4 Ejemplo de extracción de certificados en modo rápido ................................................ 25
A.5 Ejemplo de conexión a un servidor seguro ................................................................... 25

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 2 de 25


2 INTRODUCCIÓN.

El Documento Nacional de Identidad es un documento con una antigüedad de más de 50


años, y está presente en la mayoría de las relaciones comerciales y administrativas, y su
número figura en un altísimo porcentaje de las bases de datos de entidades y organismos
públicos y privados.

El Documento Nacional de Identidad es el único documento de uso generalizado en todos


los ámbitos a nivel nacional y referente obligado para la expedición de otros documentos
(pasaporte, permiso de conducir, seguridad social, NIF, etc.).
De esta forma se puede afirmar que el Documento Nacional de Identidad goza de una plena
aceptación en la sociedad española.

El DNI electrónico, además de la capacidad de identificación física de su titular, posee la


capacidad de identificación en medios telemáticos y de firmar electrónicamente como si de
una firma manuscrita se tratase. De esta forma garantiza que la personalidad del firmante no
es suplantada.

En la actualidad, ya se han expedido más de 45 millones de documentos nacionales de


identidad DNI electrónicos, y todos los ciudadanos españoles están obligados a tenerlo.

Figura 1: Anverso DNIe 3.0 Dual Interface

El actual DNI electrónico es un dispositivo con “Dual Interface”:

El interfaz con contactos permite mantener la compatibilidad hacia atrás, es decir el uso del
DNIe mediante un lector de tarjetas inteligentes, conectado a un puerto del ordenador,
mientras que el interfaz sin contactos (contactless) es el que permite incluir las mismas
funcionalidades, pero para dispositivos con tecnología NFC.

Además, el DNIe tiene una estructura de datos equivalente al pasaporte. Así que puede
realizar funciones de Documento de Viaje, y se permite su uso en los Pasos Rápidos de
Frontera (ABC systems) de forma totalmente equivalente a el pasaporte electrónico actual.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 3 de 25


3 OBJETIVO DEL DOCUMENTO

En la actualidad se ha generalizado por completo el uso de los dispositivos móviles para el


acceso a internet. Esto permite a cualquier usuario estar siempre conectado y tener
disponibles multitud de servicios telemáticos. En función del nivel de seguridad que
requieran dichos servicios, éstos pueden necesitar de la autenticación del usuario, lo que
hace que el Documento Nacional de Identidad (DNIe 3.0) pueda convertirse en una pieza
clave.

La incorporación de la tecnología NFC a los dispositivos móviles de última generación


elimina las barreras del lector, drivers, etc. facilitando la conexión online y la autenticación
del ciudadano. Por su parte, el DNIe 3.0 tiene un chip dual-interface que permite su
utilización tanto con contactos como en modo contactless.

Figura 2: Reverso DNIe 3.0 Dual Interface

El objetivo de este documento es detallar la arquitectura y el funcionamiento de una


aplicación Android con soporte al DNIe v3.0 mediante NFC e indicar los requisitos
funcionales para el desarrollo de aplicaciones similares.

Se detalla la descripción funcional de la aplicación de ejemplo “App DNIe Autenticación”,


que implementa un portal web completo desde el que podemos acceder a servicios
mediante el DNI electrónico.

En los siguientes apartados se describirá el proceso completo de solicitud de acceso al


documento, autenticación y firma para la conexión.

Para información relativa a los certificados X509 incluidos en el DNIe 3.0, véase [1] RFC
2459. Internet X.509 Public Key Infrastructure. Certificate and CRL Profile. En cuanto a
la conexión por radiofrecuencia entre dispositivos, ver [2] ISO 14443 - Tarjetas de
Identificación. Tarjetas sin contacto. Tarjetas de proximidad.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 4 de 25


4 ÁMBITO DEL EJEMPLO Y USOS FUTUROS

La aplicación de ejemplo “DNIe Autenticación” implementa el acceso mediante DNIe 3.0 a


una serie de servicios web del Ayuntamiento de Madrid.

Se ha elegido ese proveedor de servicios pero hay actualmente cientos de posibles usos
que se podrían implementar:

- Seguridad Social
o Informes de vida laboral,
o Situación laboral actual,
o Retenciones e ingresos …
- AEAT,
o Consulta del borrador,
o Validación del borrador de la RENTA,
o Consulta de datos fiscales…
- Dirección general de Tráfico,
o Consulta de puntos del carnet,
o Multas…
- Ministerio de Justicia,
o Certificado de antecedentes penales,
o Certificado de Nacimiento,
o Certificado de Matrimonio…
- Sede Electrónica del Catastro,
o Bienes inmuebles asociados a un titular,
o Consulta de datos catastrales,
o Expedientes…
- Entidades bancarias,
o Autenticación de acceso,
o Firma de transferencias…
- Etc.

Partiendo de este ejemplo de código abierto, cualquier desarrollador podría fácilmente


implementar un nuevo portal web de acceso a servicios de organismos y Ministerios. El fin
último es facilitar el acercamiento de la Administración Electrónica al ciudadano.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 5 de 25


Los cambios a realizar para nuevos desarrollos serían mínimos, ya que prácticamente
bastaría con modificar la URL de conexión al servicio y, si no estuviera instalado en
nuestro dispositivo, incluir el certificado de la CA intermedia de la entidad destino.

También está incluido al final del documento un Anexo con código fuente de ejemplo para la
realización de las operaciones básicas con el DNI electrónico:

- Carga de Certificados,
- Firma de datos,
- Verificación de firma.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 6 de 25


5 REQUISITOS ANDROID

Los requisitos de funcionamiento para el entorno son los siguientes:

- Dispositivo Android con tecnología NFC,

- DNIe v3.0 del ciudadano,

- Aplicación “DNIe Autenticación”.

La autenticación del usuario para el acceso a servicios del Ayuntamiento se realiza mediante
el uso del DNI electrónico v3.0. Este DNIe funciona mediante NFC, (Near Field
Communication, ver [3] NFC Forum Type Tags - White Paper v1.0. NXP
Semiconductors) lo que permite a cualquier dispositivo que disponga de esta tecnología,
actuar como lector de tarjetas.

Las comunicaciones entre el dispositivo y el DNIe se realizarán siempre cifradas según la


norma [4] CWA 14890-1: Application Interface for smart cards used as Secure
Signature Creation Devices.

Para facilitar el uso del DNI electrónico en plataformas Android se ha adaptado la librería
DNIeDroid, que se incluye como librería externa dentro del proyecto de ejemplo. Este
middleware existía previamente para el uso en Java de las versiones de DNIe con
contactos. Ahora se ha adaptado para su correcto funcionamiento en Android y el interfaz
sin contactos vía NFC.

En el siguiente apartado se incluye una breve descripción del componente. Para más
información puede consultarse el “Manual de Usuario para Apps DNIe 3.0”.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 7 de 25


6 COMPONENTE DNIEDROID
6.1 Arquitectura lógica

En esta parte del documento describiremos la arquitectura lógica de una aplicación Android
y su utilización del middleware DNIeDroid. Como ejemplo tomaremos la app de ejemplo
DNIe Autenticación, desarrollada para la autenticación en servicios web.

A continuación se muestra un diagrama en el que se detalla la arquitectura lógica de la


aplicación. Aunque está enfocado a esta app de ejemplo, el diseño y la arquitectura serían
idénticos en cualquier otra aplicación que hiciese uso del DNIeDroid.

Figura 3: Arquitectura lógica App sobre DNIeDroid

En esta figura podemos ver las partes que integran la aplicación. Dado que nuestro ejemplo
se trata de una aplicación Android, el punto de contacto con el usuario son las Activities. El
componente DNIeHelper está disponible para todas ellas, y gestiona la interacción con el
DNIe y los cuadros de diálogo que se muestran al usuario durante esta interacción.

Por otro lado, aquellas Activities que requieran el uso del DNIe para la firma y la
autenticación en servidores de terceros, se pone a su disposición el componente
DroidHTTPClient, que gestiona esta problemática y que también se apoya en el
componente de interacción con el DNIe.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 8 de 25


6.2 Arquitectura física
En cuanto a la arquitectura física, se mostrarán los componentes físicos necesarios para la
interacción de la aplicación con el DNIe. Esa interacción permitirá la conexión del DNIe con
sitios web externos para la consulta de datos del ciudadano, realización de firmas
electrónicas, etc.

La aplicación utilizada como ejemplo, DNIe Autenticación, debe estar instalada en un


dispositivo Android con tecnología NFC (Smartphone o Tablet). De esta manera la conexión
entre el smartphone o tablet con el DNIe se realizará mediante proximidad.

También sería posible desarrollar la aplicación para trabajar con DNIe y un lector de tarjetas
USB conectado a él mediante un adaptador USB-OTG. En este documento nos centraremos
sólo en la versión para DNIe v3.0 y tecnología NFC.

Figura 4: Arquitectura física del sistema

Para el acceso a los servicios al ciudadano será necesaria la conexión segura mediante
protocolo https con los servidores del proveedor de servicios correspondiente. Esa conexión
requerirá la autenticación con el DNIe del ciudadano mediante el uso de la tecnología NFC.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 9 de 25


7 EJEMPLO DE USO: DNIe AUTENTICACION
7.1 Descripción de la aplicación

El ejemplo que detallaremos en este documento consiste en una aplicación que implementa
un portal Web del Ayuntamiento de Madrid. Desde este portal se pueden navegar por las
opciones más destacadas del ayuntamiento y acceder a servicios al ciudadano mediante
DNI electrónico 3.0.

El interés de este documento se centra en la implementación real de las operaciones


relativas al DNIe 3.0. Es por esto que las cuestiones del diseño elegido, imágenes, logos,
etc. así como el desarrollo de la interfaz de usuario no son relevantes y no se detallan.

Podría haberse realizado este ejemplo con otro portal cualquiera de acceso a servicios de la
Administración, tal y como se explicó en el apartado ÁMBITO DEL EJEMPLO Y USOS
FUTUROS. (Seguridad Social, Dirección General de Tráfico, Registro Civil, Catastro, etc.).

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 10 de 25


7.2 Operación genérica de conexión mediante DNIe
7.2.1 Menú Principal

La pantalla principal de la aplicación muestra las opciones básicas de funcionamiento. Aquí


podemos ver todos los servicios accesibles para el ciudadano, ya sean de información
general o de acceso protegido a servicios mediante DNIe.

Figura 5: Pantalla principal App DNIe Autenticación

Las opciones disponibles son:

 Tributos,
 Gestión de Multas ,
 Datos Censales,
 Información de Expedientes,
 Web Madrid.es,
 Ayuda.
.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 11 de 25


7.2.2 Selección de CAN

Una vez seleccionado el servicio de DNIe al que queremos acceder, la aplicación le solicita
el CAN (Card Access Number) del documento con el que queremos hacerlo.

Este identificador es un número de 6 dígitos que aparece en el anverso del documento


físico del DNIe y se utiliza para establecer canal cifrado PACE entre el documento y el
dispositivo.

Figura 6: Card Access Number en el DNIe 3.0

El canal PACE es obligatorio para poder establecer una conexión inalámbrica cifrada con
el documento pero en ningún caso sustituye al código PIN ni da permisos de uso de las
claves de firma y/o autenticación del ciudadano.

Es una medida adicional de seguridad que pretende evitar que alguien pueda realizar
lecturas de datos públicos sin conocimiento del ciudadano.

Figura 7: Inserción de un nuevo CAN

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 12 de 25


Con el fin de no tener que introducirlo cada vez que vayamos a operar con un DNIe, en esta
aplicación de ejemplo se mantiene un listado de los números CAN ya utilizados.

En cualquier momento podemos eliminarlos o incluir nuevos documentos. Sólo se


mantienen para facilitar la operatividad.

Figura 8: Selección de un CAN ya introducido

Si intentásemos leer un DNIe con un CAN incorrecto, fallaría la construcción del canal
PACE, y no sería posible la comunicación entre documento y dispositivo.

Para más información sobre el establecimiento del canal PACE (Password Authenticated
Connection Establishment) ver [5] Technical Guideline TR-03110-2.Advanced Security
Mechanisms for Machine Readable Travel Documents –P2.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 13 de 25


7.2.3 Autenticación del DNIe mediante PIN
Una vez indicado el CAN (Card Access Number) del documento que vamos a utilizar, la
aplicación nos solicitará que aproximemos el DNIe al dispositivo para comenzar con las
comunicaciones.

Por motivos hardware y de seguridad la distancia máxima soportada por NFC es,
dependiendo del dispositivo, de alrededor de un centímetro. Esta conexión es muy sensible
a la distancia y al movimiento, por lo que para el correcto funcionamiento se requiere la
mayor cercanía y estabilidad posibles.

Figura 9: Lectura del DNIe por proximidad

Al acercar el documento al dispositivo, éste lo detectará y se establecerá la comunicación


cifrada entre ambos mediante el canal PACE, permitiendo el intercambio de comandos y
respuestas.

Una vez realizadas las operaciones básicas de lectura de certificados se solicitará el PIN
(Personal Identification Number) del usuario. La presentación del PIN autentica al usuario
contra el DNIe y le concede permisos de acceso a las claves.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 14 de 25


A partir de ese momento todas las comunicaciones entre DNIe y el dispositivo irán cifradas
según [4] CWA 14890-1: Application Interface for smart cards used as Secure
Signature Creation Devices.

El ciudadano podrá entonces realizar operaciones que requieran el uso de las claves, ya sea
para realizar una firma de documentos, establecer una conexión segura con el servidor del
prestador de servicios, etc.

Figura 10: Inserción del PIN de usuario

Una vez autenticado el ciudadano, la aplicación realizará la conexión segura con el servidor
del prestador de servicios (Ayuntamiento de Madrid, en este caso). Se llevarán a cabo las
operaciones criptográficas necesarias para establecer el canal SSL y obtener la información
personal solicitada.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 15 de 25


7.2.4 Resultado de la operación

Si la conexión con el prestador de servicios se ha completado satisfactoriamente, la


aplicación nos mostrará la información que se solicitó.

En caso contrario se mostrará una pantalla de error, indicando la razón del problema.

Figura 11: Resultado correcto Figura 12: Error en la operación

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 16 de 25


7.3 Consultas a servicios Web con DNIe
7.3.1 Descripción

Las distintas operaciones implementadas en este ejemplo App “DNIe Autenticación” son
ejemplos reales ofrecidos por el Ayuntamiento de Madrid.

Estos servicios están disponibles desde PC mediante certificados digitales (FNMT-RCM o


DNI electrónico). Con esta aplicación de ejemplo implementamos su acceso mediante DNIe
3.0 y NFC en dispositivos móviles.

Los servicios accesibles mediante DNIe son los descritos en los siguientes apartados.

7.3.2 Opción “Tributos”

Desde esta opción podemos comprobar los tributos pendientes de pago al Ayuntamiento. Se
incluyen impuestos de circulación, tasas de limpieza, impuesto de bienes inmuebles, etc.

7.3.3 Opción “Gestión de Multas”

Permite consultar si tenemos alguna multa pendiente con el Ayuntamiento de Madrid. En


caso de no tener ninguna multa se indicará en la pantalla de resultado.

7.3.4 Opción “Datos censales”

Ofrece información sobre los datos censales en poder del Ayuntamiento, datos personales,
fecha de nacimiento, etc. Desde aquí podríamos solicitar un volante de empadronamiento.

7.3.5 Opción “Consulta de expedientes”

Permite consultar si tenemos algún expediente abierto con el Ayuntamiento de Madrid. En


caso de no tener ninguno, se indicará en la pantalla de resultado.

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 17 de 25


8 ESQUEMA DE FUNCIONAMIENTO: DNIE AUTENTICACIÓN
8.1 Consulta securizada. Correcta.

Figura 13: Consulta de puntos de la DGT mediante DNIe

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 18 de 25


8.2 Consulta securizada. Fallida.

Figura 14: Error en el acceso y la conexión con el DNIe

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 19 de 25


8.3 Otros servicios Web

Figura 15: Otras consultas Web sin servicio de DNIe

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 20 de 25


9 REFERENCIAS

[1] RFC 2459. Internet X.509 Public Key Infrastructure. Certificate and CRL Profile
[2] ISO 14443 - Tarjetas de Identificación. Tarjetas sin contacto. Tarjetas de proximidad
[3] NFC Forum Type Tags - White Paper v1.0. NXP Semiconductors
[4] CWA 14890-1: Application Interface for smart cards used as Secure Signature Creation
Devices
[5] Technical Guideline TR-03110-2.Advanced Security Mechanisms for Machine Readable
Travel Documents –Part 2
[6] ISO/IEC 7816-4. Identification cards – Integrates circuit cards. Part 4: Organization, security
and commands for interchange.
[7] ISO/IEC18092 Information technology — Telecommunications and information exchange
between systems — Near Field Communication — Interface and Protocol
(NFCIP-1)
[8] Android.NFC. http://developer.android.com/reference/android/nfc/package-summary.html
[9] UIT-T X.509 (11/2008) – Open systems interconnection: Public-key and attribute certificate
frameworks

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 21 de 25


10 TABLA DE FIGURAS

Figura 1: Anverso DNIe 3.0 Dual Interface..................................................................... 3


Figura 2: Reverso DNIe 3.0 Dual Interface ..................................................................... 4
Figura 3: Arquitectura lógica App sobre DNIeDroid ...................................................... 8
Figura 4: Arquitectura física del sistema ......................................................................... 9
Figura 5: Pantalla principal App DNIe Autenticación .................................................. 11
Figura 6: Card Access Number en el DNIe 3.0 ............................................................. 12
Figura 7: Inserción de un nuevo CAN............................................................................ 12
Figura 8: Selección de un CAN ya introducido ............................................................. 13
Figura 9: Lectura del DNIe por proximidad .................................................................. 14
Figura 10: Inserción del PIN de usuario ....................................................................... 15
Figura 11: Resultado correcto ....................................................................................... 16
Figura 12: Error en la operación................................................................................... 16
Figura 13: Consulta de puntos de la DGT mediante DNIe............................................ 18
Figura 14: Error en el acceso y la conexión con el DNIe ............................................. 19
Figura 15: Otras consultas Web sin servicio de DNIe................................................... 20

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 22 de 25


ANEXO A. CÓDIGO FUENTE RELATIVO AL DNIe 3.0
A.1 Ejemplo de extracción de certificados
// Se instancia el proveedor y se añade
final DnieProvider p = new DnieProvider();
p.setProviderTag(tagFromIntent); // Tag discovered by the activity
p.setProviderCan(canNumber); // DNIe’s Can number
Security.insertProviderAt(p, 1);

// Creamos el cuadro de diálogo que gestionará la solicitud del PIN


MyPasswordDialog myFragment = new MyPasswordDialog(NFCOperationsEnc.this,
true);
DNIeDialogManager.setDialogUIHandler(myFragment);

// Cargamos certificados y keyReferences


final KeyStore ksUserDNIe = KeyStore.getInstance("MRTD");
ksUserDNIe.load(null, null);

Certificate signCert = ksUserDNIe.getCertificate("CertFirmaDigital");


Certificate authCert = ksUserDNIe.getCertificate("CertAutenticacion");

A.2 Ejemplo de realización de firma de datos


// Se instancia el proveedor y se añade
final DnieProvider p = new DnieProvider();
p.setProviderTag(tagFromIntent); // Tag discovered by the activity
p.setProviderCan(canNumber); // DNIe’s Can number
Security.insertProviderAt(p, 1);

// Creamos el cuadro de diálogo que gestionará la solicitud del PIN


MyPasswordDialog myFragment = new MyPasswordDialog(NFCOperationsEnc.this,
true);
DNIeDialogManager.setDialogUIHandler(myFragment);

// Cargamos certificados y keyReferences


final KeyStore ksUserDNIe = KeyStore.getInstance("MRTD");
ksUserDNIe.load(null, null);

final String alias = "CertFirmaDigital”; //$NON-NLS-1$

// Se obtiene el motor de firma y se inicializa


final Signature signature = Signature.getInstance("SHA1withRSA"); //$NON-NLS-
1$
signature.initSign((PrivateKey) ksUserDNIe.getKey(alias, null));

// Vamos a firmar el texto 'hola'


signature.update("hola".getBytes()); //$NON-NLS-1$

// Completamos el proceso y obtenemos la firma PKCS#1


final byte[] signatureBytes = signature.sign();

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 23 de 25


A.3 Ejemplo de realización y verificación de firmas

// Se instancia el proveedor y se añade


final DnieProvider p = new DnieProvider();
p.setProviderTag(tagFromIntent); // Tag discovered by the activity
p.setProviderCan(canNumber); // DNIe’s Can number
Security.insertProviderAt(p, 1);

// Creamos el cuadro de diálogo que gestionará la solicitud del PIN


MyPasswordDialog myFragment = new MyPasswordDialog(NFCOperationsEnc.this,
true);
DNIeDialogManager.setDialogUIHandler(myFragment);

// Cargamos certificados y keyReferences


final KeyStore ksUserDNIe = KeyStore.getInstance("MRTD");
ksUserDNIe.load(null, null);

final String alias = "CertFirmaDigital”; //$NON-NLS-1$

// Se obtiene el motor de firma y se inicializa


final Signature signature = Signature.getInstance("SHA1withRSA"); //$NON-NLS-
1$
signature.initSign((PrivateKey) ksUserDNIe.getKey(alias, null));

// Vamos a firmar el texto 'hola'


signature.update("hola".getBytes()); //$NON-NLS-1$

// Completamos el proceso y obtenemos la firma PKCS#1


final byte[] signatureBytes = signature.sign();

// Comprobacion de la validez de la firma obtenida


signature.initVerify(ks.getCertificate(alias).getPublicKey());
signature.update("hola".getBytes()); //$NON-NLS-1$
signature.verify(signatureBytes);

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 24 de 25


A.4 Ejemplo de extracción de certificados en modo
rápido

// Se activa el modo rápido


System.setProperty("es.gob.jmulticard.fastmode", "true");

// Se instancia el proveedor y se añade


final DnieProvider p = new DnieProvider();
p.setProviderTag(tagFromIntent); // Tag discovered by the activity
p.setProviderCan(canNumber); // DNIe’s Can number
Security.insertProviderAt(p, 1);

// Creamos el cuadro de diálogo que gestionará la solicitud del PIN


MyPasswordDialog myFragment = new MyPasswordDialog(NFCOperationsEnc.this,
true);
DNIeDialogManager.setDialogUIHandler(myFragment);

// Cargamos certificados y keyReferences


final KeyStore ksUserDNIe = KeyStore.getInstance("MRTD");
ksUserDNIe.load(null, null);

Certificate authCert = ksUserDNIe.getCertificate("CertAutenticacion");

// El siguiente certificado es completo/real ya que nos pedirá el PIN


KeyStore.Entry entry = ksUserDNIe.getEntry("CertAutenticacion", null);
KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) entry;
Certificate authCertCompleto = pkEntry.getCertificate();

A.5 Ejemplo de conexión a un servidor seguro


// Creamos el objeto que gestionará los certificados adicionales,
// MyCaCertificate implements es.inteco.labs.net.CaCertificatesHandler
MyCaCertificate myCert = new MyCaCertificate(NFCOperationsEncKitKat.this);
DNIeCaCertsManager.setCaCertHandler(myCert);

// Lanzamos la conexión al driver dniedroid


HttpEntity webContent = DroidHttpClient.executeRequest(m_SSLtargetURL,
myContext,
ksUserDNIe);

// Almacenamos la respuesta obtenida


m_SSLresultado = new String(EntityUtils.toByteArray(webContent),
Charset.forName(“utf-8”));

// Limpiamos las cookies del dniedroid


DroidHttpClient.cleanCookies();

Descripción App “DNIe Autenticación” sobre DNIe 3.0 Página 25 de 25

También podría gustarte