Você está na página 1de 40

4identity

Gua de integracin

Bit4id Ibrica
C/ Marie Curie, 8-14
Forum Nord de Tecnologa
08042 Barcelona
Espaa
Tel. +34 935 35 35 18
info.es@bit4id.com

Bit4id Italia
Via Coroglio, 57
Citt della Scienza
80124 Napoli
Italia
Tel. +39 081 762 56 00
info.it@bit4id.com

Bit4id UK
2 London Wall Buildings
London Wall,
London EC2M 5UU
United Kingdom
Tel. +44 (0) 203 397 3166
info.uk@bit4id.com

Oficina Lisboa
Rua Cesrio Verde, 32
2790-495 Queijas (Lisboa)
Portugal
Tel .+351 914 58 30 21
info.pt@bit4id.com

Oficina Miln
Corso Vercelli, 11
20144 Milano
Italia
Tel. +39 024 547 42 59
info.it@bit4id.com

Oficina Guatemala
15 avenida, 14-09 zona 10
Oakland - 01010
Guatemala
Guatemala
Tel: +502 22 21 91 63
aor@bit4id.com

Bit4id Per
Avda. Olavegoya, n 1835
Distrito Jesus Maria
Lima 11
Per
Tel: +51 947 744 704
info.pe@bit4id.com

ISO 9001:2008
ISO 14001:2004
ISO 27001:2005

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

ndice
ndice ..................................................................................................................................................... 2
Revisiones.............................................................................................................................................. 3
1

Resumen ........................................................................................................................................ 4

Integracin..................................................................................................................................... 5
2.1 Proceso de firma ...................................................................................................................... 6
2.1.1

Integracin 4identity con tecnologia PHP ...................................................................... 8

2.1.2

Integracin 4identity con tecnologia .NET ................................................................... 12

2.1.3

Integracin 4identity con tecnologa Java .................................................................... 17

2.1.4

Parmetros adicionales de firma.................................................................................. 21

2.2 Proceso de autenticacin ....................................................................................................... 25


2.2.1

Integracin 4identity con tecnologa PHP .................................................................... 27

2.2.2

Integracin 4identity con tecnologa .NET ................................................................... 29

2.2.3

Integracin 4identity con tecnologa Java .................................................................... 33

2.3 Errores comunes en la integracin ........................................................................................ 37

2.4.1

Diagrama de flujo de firma digital ................................................................................ 39

2.4.2

Diagrama de flujo de autenticacin ............................................................................. 40

ndice

2.4 Diagramas de flujo ................................................................................................................. 39

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Revisin

Fechas

Cambio

Autor

1.0

12/06/2013

Primer borrador

CBU

1.1

12/06/2014

Revisin tcnica

JGM

1.2

16/06/2014

Revisin tcnica

RAV

1.3

27/08/2014

Traduccin y revisin tcnica

SGM

1.4

29/08/2014

Inserccin diagramas de flujo y


Errores comunes

JGM

1.5

09/09/2014

Revisin definitiva

JGM

1.6

30/10/2015

Licenciado, autenticacin, mejoras

RAV

1.7

10/11/2015

Nuevos parametros

RAV

1.8

05/02/2016

Reinsercin de enlace as-demo

RAV

1.9

18/05/2016

Localhost

RAV

1.10

26/08/2016

Mejoras

GBA, RLG

Revisiones

Revisiones

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

1 Resumen
El objetivo de este documento es detallar el proceso de integracin de 4identity en un entorno
estndar basado en los ejemplos del SDK de 4identity.
El entorno SDK est compuesto de:

Aplicacin Web, que incluye dos tipos de aplicaciones:


o

Aplicacin(es) para la firma, permite seleccionar un documento (en funcin


del ejemplo ser firma de un documento local o en almacenamiento remoto) y
comenzar con el proceso de firma mediante 4identity. Se recomienda escoger
un documento PDF debido a que, una vez finalizado el proceso, resulta ms
fcil comprobar que la firma se ha efectuado correctamente (firma tipo PAdES,
en este caso).

Aplicacin para la autenticacin, permite autenticar a un usuario mediante un


certificado. Devuelve el resultado de la validacin.

4identity client, es en el cargado de la operacines cripograficas firma y autenticacin


que se instala en el terminal del usuario y que se ejecutar para guiar al usuario en el
proceso de firma y autenticacin.

4identity server (tambin conocido como SMARTENGINE), dicho componente controla


el canal establecido entre 4identity client y el explorador web del usuario. Adems,
4identity server participa activamente en la funcin de autenticacin pues es el
responsable de validar el certificado con el que el usurario se autentica.
Escritorio usuario, donde se encuentra 4identity cliente y se inicia el explorador, para
acceder a la aplicacin web.
Adicionalmente requerimos que se envie la siguiente informacin, para poder emitir
una licencia de desarrollo temporal o es posible usar nuestro dominio abierto con
limitada funcionalidad para la integracion:
o

Servicio de integracin abierto :


http://as-demo.bit4id.org/smartengine/bit4id-sign.js

Servicio de integracin abierto cuano se usa un ambiente de desarrollo


LOCALHOST:
https://www.4identity.eu/smartengine/bit4id-sign.js
NOTA: El script 4identity.eu solo funciona si su ambiente de desarrollo hace
llamadas desde local host ej: http://localhost/

Resumen

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Nombre del dominio de la aplicacin ejemplo: firma.digital.com

Puerto de acceso que usa la aplicacin web : firma.digital.com:8080

Certificados raz de las autoridades certificadoras emisoras de los certificados


que se usaran para autentcacion y firma.

SMARTENGINE

SERVIDOR DE APLICACIONES

Archivo
firmado

Archivo
a firmar

AUTENTICACION
CANAL DE CONFIANZA

fe.example.com

as.example.com

4IDENTITY
CLIENT

FIRMA

Figura 1 Ejemplo de uso

El cdigo que se muestra en los siguientes apartados, tiene el objetivo de guiar al desarrollador a
travs de las principales funcionalidades de firma y autenticacin de 4identity. Este cdigo muestra
nicamente las caractersticas bsicas de la herramienta, pudindolas implementar a escenarios
ms complejos.

La integracin de la tecnologa de 4identity con la aplicacin web del cliente solo requiere de la
insercin de un simple formulario HTML con unos tags especficos que 4identity es capaz de
interpretar. Adems, la integracin de 4identity concluye con la insercin de un script alojado en
4identity server para que este pueda gestionar el canal 4identity client Explorador Web. Una vez
firmado el documento o autenticado el usuario, la aplicacin web recibir el documento firmado o

Integracin

2 Integracin

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

la respuesta de la validacin va metodo POST y tras ello 4identity client habr finalizado su funcin
por lo que se le devolver el control a la aplicacin web.
A continuacin, se mostrar la arquitectura funcional juntamente con el cdigo requerido, para su
integracin de los procesos de firma y autenticacin.

2.1 Proceso de firma


Los principales componentes involucrados en el proceso de firma son la aplicacin web, que
inicializa el cdigo que gestiona el archivo a firmar y 4identity client que firma el archivo-. La
funcionalidad ms destacable de 4identity server en este proceso consiste en mantener el ciclo de
vida del canal 4identity client-Explorador web, mediante el uso de cookies de sesin, que expiran
luego de cada operacin de firma o autenticacion.
A mdo prctico, basta con tener claro que la aplicacin web es capaz de seleccionar el archivo a
firmar y de recibirlo firmado mediante un message POST, que se generar en 4identity client.
Seguidamente, la aplicacin almacena el archivo en un servidor.

SELECCION
DEL
ARCHIVO A
FIRMAR

EL ARCHIVO ES ENVIADO
AL 4IDENTITY CLIENT
PARA LA FIRMA

EL CLIENTE
4IDENTITY
FIRMA EL
ARCHIVO

ARCHIVO FIRMADO ES
ENVIADO COMO MENSAJE
POST

SERVIDOR DE
APLICACIONES
GUARDA EL
ARCHIVO

Figura 2 Proceso de firma

Figura 3 Eleccin del certificado con el que llevar a cabo la firma

Integracin

En el proceso de firma, 4identity Client muestra al usuario los certificados disponibles para firmar:

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Muestra una vista previa del documento a firmar. (Esta funcionalidad es unicamente para archivos
Pdf).
Es importante mencionar que el nombre del archivop a firmar puede contener cualquier carcter
del lenguage castellano.

Figure 4 Vista previa del documento

y comienza el proceso de firma. En el caso en que el documento no fuese de tipo PDF, aparecera el
siguiente mensaje en el cual se verifica que el usuario ha revisado el documento. Despus de la
verificacin, se habilita el botn que permite llevar a cabo la firma.

Figura 5 Proceso de firma

Seguidamente, se detallan los requisitos de la Aplicacin Web para integrar 4identity:

2. Un fichero web (la extensin depender del cdgio utilizado html, php, aspx) donde
se llegar tras pulsar el botn descrito en el punto anterior. En este fichero web, se
espera recibir el documento va POST. Tras la recepcin del documento se espera una

Integracin

1. Un FORM (formulario) HTML que permite introducir los parmetros de la firma. Este
formulario tendr asociado un botn Firma o Autenticacin (input del tipo
submit).

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

redireccin para finalizar el proceso de firma y enviar al usuario de nuevo a la


aplicacin web (con esto concluye la funcin de 4identity y el usuario vuelve al control
de la aplicacin web).
3. Una pgina final llamada landing page en los ejemplos del SDK, que muestra al
usuario el resultado del proceso y el enlace hacia el archivo firmado.
A continuacin, se detallan los ejemplos de cdigo que componen el SDK de 4identity divididos por
lenguaje de programacin. Cabe destacar que 4identity puede ser integrado con cualquier
tecnologia web. Nostros hemos seleccionado tres de las tecnologias ms comunes que son JAVA,
.NET y PHP.
2.1.1

Integracin 4identity con tecnologia PHP

Para entornos PHP la solucin se compondr de:


a) Un servidor web (comnmente Apache) as.example.com:8080 que contiene la
aplicacin personalizada /4identity ;
El nombre definitivo depender de la configuracin del servidor de aplicaciones. Por
esta razn suponemos que /4identity ser la carpeta donde se alojar la Aplicacin
Web de ejemplo.

b) /4identity, que es el ejemplo de firma local (firmar_un_doc_local) del SDK, se compone


de:

index.php

index.php: que contiene el formulario y la llamada al script ;

Una pgina llamada sign-ok.php que lee el POST y redirige la sesin a la


landing page sign-end-ok.php.

sign-end-ok.php que muestra al usuario el archivo firmado;

Una pgina llamada sign-end-error.php. La sesin se redirigir hacia esta


landing page si el proceso de firma ha experimentado algn tipo de error.

EL ARCHIVO ES ENVIADO A
CLIENTE 4IDENTITY PARA
LA FIRMA

El canal es creado
entre el 4idenitity
client
y
el
SMARTENGINE

EL CLIENTE
4IDENTITY
FIRMA EL
ARCHIVO

ARCHIVO FIRMADO ES
ENVIADO COMO
MENSAJE POST

EL SERVIDOR
DE
APLCACIONES
GUARDA EL
ARCHIVO

/sign-ok.php

Figura 10 Proceso de firma en PHP

REDIRECCION

EL USUARIO ES
REDIRIGIDO A
LA PGINA
DEL ARCHIVO
FIRMADO

sign-end-ok.php

Integracin

ESCOGER
EL
ARCHIVO
A FIRMAR

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Index.php
A continuacin aparece el cdigo de la pgina principal index.php (ejemplo de firma de archivo
local):
<html>
<head>
<meta charset="utf-8" />
<title>Firma Digital de M&uacute;ltiples documentos en local</title>
</head>
<body>
<?php
//$folders=Lista de carpetas necesarias para llegar al fichero sign-ok.php. Tiene que
ser el path absoluto de la url.
//$documentName=Nombre del documento a firmar.
//$documentID=Identificador del documento. Sirve para relacionar el proceso dado que
se enva por mtodo POST al destino.
//$tipo=Tipo de firma a realizar. Puede ser PAdES, XAdES y CAdES.
//$url_4identity_server_sign=Url del script con las funciones del 4identity server.
$folders="demos_4identity/firmar_mult_docs_local/";
$documentName="multiples_documentos_local";
$documentID="_mults_local";
$tipo="PAdES";
$url_4identity_server_sign="https://www.4identity.eu/smartengine/bit4id-sign.min.js";
?>
<form class="bit4id-sign" method="post" action="<?php echo $folders; ?>sign-ok.php">
<div class="bit4id-signReq" >
<div style="visibility: visible" class="bit4id-documentName"><?php echo $documentName; ?></div>
<div style="visibility: visible" class="bit4id-documentID"><?php echo $documentID; ?></div>
<div class="bit4id-localFile">YES</div>
<div class="bit4id-message">Seleccionar los ficheros a firmar</div>
<div class="bit4id-caption">Seleccione los ficheros a firmar</div>
<div class="bit4id-signatureType"><?php echo $tipo; ?></div>
</div>
<div id="bit4id-status">loading</div>
<input type="submit" disabled="disabled" value="Firmar" />
</form>
<script src="<?php echo $url_4identity_server_sign; ?>"></script>
</body>
</html>

A diferencia de ejemplos anteriores en los que se firmaba un documento ya predefinido, en este se


firma un archivo seleccionado de forma local.
Esta pgina contiene el FORM con la clase personalizada bit4id-sign, un action (con
method=post) que redirige a la pgina sign-ok.php y el botn de tipo submit:
<form class="bit4id-sign" method="post" action="<?php echo $folders; ?>sign-ok.php">
[]

</form>

Integracin

<input type="submit" disabled="disabled" value="Firmar" />

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Gracias al resto de etiquetas del formulario, definiremos la solicitud de firma con la clase bit4idsignReq:

El nombre del archivo, que se pasar por variable (documentName):


<div style="visibility: visible" class="bit4id-documentName"><?php echo $documentName;
?></div>

Identificador del documento. Sirve para relacionar el proceso dado que se enva por
mtodo POST al destino. Especificar si se trata de un archivo online o local, y si la
seleccin es simple o mltiple. Tambin se obtiene mediante variable (documentID):
<div style="visibility: visible" class="bit4id-documentID"><?php echo $documentID;
?></div>

Etiqueta que determina que el documento a firmar se obtendr mediante un


explorador de archivos local:
<div class="bit4id-localFile">YES</div>

Con esta tiqueta definida en YES, se incluyen tambin dos posibles parmetros:
<div class="bit4id-message">Seleccionar los ficheros a firmar</div>

Muestra el mensaje que aparece en la parte superior del explorador.


<div class="bit4id-caption">Seleccione los ficheros a firmar</div>

Que muestra el mensaje que aparecer en el botn para abrir el explorador de


archivos.

El estndard de firma (PAdES). En este caso se obtiene mediante la variable tipo,


definida previamente:
<div class="bit4id-signatureType"><?php echo $tipo; ?></div>

El botn de entrega se encuentra disabled, ya que se habilita automticamente una vez


que se establece la conexin con 4identity server:
<input type="submit" disabled="disabled" value="Firmar" />

El script en 4identity server, encargado de establecer la comunicacin Explorador4identity client. La URL del script se obtiene mediante la variable
(url_4identity_server_sign) definida previamente:
<script src="<?php echo $url_4identity_server_sign; ?>"></script>

que es el valor de la variable


url_4identity_server-sign, es el 4identity server expuesto por Bit4id para las pruebas
de integracin.
Para poder realizar la firma en lotes se debe agregar la siguiente lnea de cdigo:

Integracin

https://www.4identity.eu/smartengine/bit4id-sign.js,

10

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
<div class="bit4id-bundle">YES</div>

Sign-ok.php
A continuacin se muestra el cdigo de la pgina sign-ok.php:
<?php
if (!empty($_FILES["attach"])) {
$myFile = $_FILES["attach"];
if ($myFile["error"] !== UPLOAD_ERR_OK) {
echo "<p>Ha ocurrido un error en la subida del fichero.</p>";
exit;
}
$name = preg_replace("/[^A-Z0-9._-]/i", "_", $myFile["name"]);
$parts = pathinfo($name);
$name=$parts["filename"]."-".$_POST["documentID"].".".$parts["extension"];
$success = move_uploaded_file($myFile["tmp_name"],$name);
if (!$success) {
echo "<p>No puede guardar el archivo.</p>";
exit;
}
header("Location: sign-end-ok.php?file=".$name);
exit();
} else {
header("Location: sign-end-error.php");
exit();
}
?>

La pgina sign-ok.php controla el mensaje POST y se encarga de guardar el fichero una vez firmado.
Tambin controla la redireccin de la sesin a una u otra landing page en funcin de los resultados
finales.
El cdigo mostrado a continuacin gestiona el POST:
$name=$parts["filename"]."-".$_POST["documentID"].".".$parts["extension"];

El fichero se guardar mediante:


$success = move_uploaded_file($myFile["tmp_name"],$name);

Si todo ha ido correctamente, la pgina nos redirigir hacia sign-end-ok,


header("Location: sign-end-ok.php?file=".$name);

header("Location: sign-end-error.php");

Sign-end-ok.php

Integracin

en el caso contrario, hacia sign-end-error.php

11

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Una vez finalizado el proceso, si todo ha ido correctamente, se muestra la pgina sign-end-ok.php:
<?php
echo "El proceso de firma ha sido correcto.";
echo "<br><a href='".$_GET['file']."'/>Descargar documento</a>";
?>

La pgina muestra un enlace mediante el qual podremos descargarnos el documento. Mediante la


peticin '".$_GET['file']."', se obtiene de la aplicacin web el archivo ya firmado.
Sign-end-error.php
Si se ha producido algn tipo de error, la sesin se redirigir a sign-end-error-php:
<?php
echo "Ha habido un error durante el proceso de firma.";
?>

2.1.2

Integracin 4identity con tecnologia .NET

Para entornos .NET, la solucin se compondr de:


a) un servidor web IIS as.example.com:9090 que contiene la aplicacin .NET en
/4identity que es el ejemplo 4IdentityNET_esttico (test.pdf) del SDK;
Los ejemplos de cdigo llaman a la carpeta que contiene el cdigo SmartEngineDemo sin
embargo el nombre definitivo depender de la configuracin del servidor IIS. Por esta
razn suponemos que /4identity ser la carpeta donde se alojar la Aplicacin Web de
ejemplo.
a) /4identity se compone de:
Sign.aspx: contiene el formulario y la llamada al script;

Figura 7 Sign.aspx

un archivo aspx (Active Server Pages) llamado SignOk.aspx, que lee el POST y
redirige la sesin a la landing page llamada landing.aspx;

landing.aspx muestra al usuario el resultado final y la direccin donde se encuentra


el archivo firmado;

Integracin

12

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Figura 8 landing.aspx

ESCOGER
EL
ARCHIVO
A FIRMAR

Sign.aspx

EL ARCHIVO ES ENVIADO A
CLIENTE 4IDENTITY PARA
LA FIRMA
El canal es creado
entre el 4idenitity
client
y
el
SMARTENGINE

EL CLIENTE
4IDENTITY
FIRMA EL
ARCHIVO

ARCHIVO FIRMADO ES
ENVIADO COMO
MENSAJE POST

EL SERVIDOR
DE
APLCACIONES
GUARDA EL
ARCHIVO

REDIRECCION

/SignOK.aspx

EL USUARIO ES
REDIRIGIDO A
LA PAGINA
DEL ARCHIVO
FIRMADO

landing.aspx

Figura 9 Proceso de firma en entornos .NET

Sign.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Sign.aspx.cs"
Inherits="SmartEngineDemo.Sign" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>4Identity Authentication</title>
</head>
<body>
<form class="bit4id-sign" method="post" action="/identity/SignOk.aspx">
<div class="bit4id-signReq" style="display: none;">
<div class="bit4id-localFile">NO</div>
<div class="bit4id-document">http://192.168.187.41:8080/identity/Documents/test.pdf</div>
<div class="bit4id-documentName">test.pdf</div>
<div class="bit4id-documentID">01</div>
<div class="bit4id-signatureType">PAdES</div>
</div>
<div id="bit4id-status">wait</div>
<input disabled="disabled" type="submit" value="Sign Document" />
</form>
<script src="http://dominio.licencia.com /smartengine/bit4id-sign.min.js"></script>

Esta pgina contiene el FORM (formulario) con la clase personalizada bit4id-sign, un action (con
method=post) que redirige a nuestro a la pgina personalizada SignOk.aspx y el botn de tipo
submit:
<form class="bit4id-sign" method="post" action="/4identity/SignOk.aspx">
[]

Integracin

</body>
</html>

13

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
<input disabled="disabled" type="submit" value="Sign Document" />
</form>

Gracias al resto de etiquetas del formulario, definiremos la solicitud de firma con la clase bit4idsignReq:

La direccin del documento, en este caso un archivo (test.pdf) almacenado en el


servidor as.example.com :
<div class="bit4iddocument">http://as.example.com:9090/4identity/Documents/test.pdf</div>

El nombre del archivo:

<div class="bit4id-documentName">test.pdf</div>

El estandard de firma(PAdES):

<div class="bit4id-signatureType">PAdES</div>

El algoritmo de firma utilizado (RSASHA256) :

<div class="bit4id-signingAlgorithm">RSASHA256</div>

El atributo del certificado (CN) mostrado en el 4identity client cuando se listen los
certificados:

<div class="bit4id-certInfo">CN</div>

La informacin del estado del canal. Utilizado normalmente con propsitos de


depuracin. Si esta etiqueta se aade en el formulario, index.html mostrar el estado
de 4identity desde el inicio de la comunicacin hasta finalizar el proceso de firma:

<div id="bit4id-status"></div>

El botn de accin firma/autenticacin para comenzar el proceso, luego de hacer clic o


ejecutaro automticamente se establece la conexin con 4identity server:
<input disabled="disabled" type="submit" value="Sign Document" />

El script en 4identity server, encargado de establecer la comunicacin Explorador4identity client:

<script src="http://dominio.licencia.com/smartengine/bit4id-sign.min.js"></script>
O

O
<script src="https://www.4identity.eu/smartengine/bit4id-sign.js"</script>

Integracin

<script src="http://as-demo.bit4id.org/smartengine/bit4id-sign.min.js"</script>

14

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

NOTA: El script 4identity.eu solo funciona si su ambiente de desarrollo hace llamadas


desde localhost ej: http://localhost/
https://www.4identity.eu/smartengine/bit4id-sign.js es El

el 4identity server expuesto por

Bit4id para las pruebas de integracin.


Para poder realizar la firma en lotes se debe agregar la siguiente lnea de cdigo:
<div class="bit4id-bundle">YES</div>

Este parametro indica que debe prepararse para la firma en lotes y el tipo de archive que recibir
ser un .zip
<div class="bit4id-document">http://192.168.187.41:8080/identity/Documents/comprimido.zip</div>

Este parmetro debe indicar en que ruta se encuentra el archivo .zip , este zip debe contener todos
los archivos a firmar, por ejemplo:
Si los archivos son todos pdf, se debe usar el formato PAdES
Si los archivos son de diferente naturaleza (.pdf, .doc, .jpg, etc) se debe usar el formato CAdES
SignOK.aspx
La pgina SignOk.aspx contiene un frontend y el cdigo necesario que se inicia en el evento
Page_Load.
Cdigo frontend:
<%@ Page Title="About Us" Language="C#" AutoEventWireup="true" trace="true"
CodeBehind="SignOk.aspx.cs" Inherits="SmartEngineDemo.SignOk" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>process page</title>
</head>
<body>
</body>
</html>

namespace SmartEngineDemo
{
public partial class SignOk : System.Web.UI.Page
{
public String outError = "not Set";
public String pathOut;
public String pathFinal;
protected void Page_Load(object sender, EventArgs e)
{
foreach (string file in Request.Files)
{
HttpPostedFile postfile = Request.Files[file] as HttpPostedFile;
if (postfile.ContentLength == 0)
{
outError = "File not sent";

Integracin

Cdigo behind (en segundo plano) SignOK.aspx.cs:

15

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
}
else
{
outError = "File sent";
string savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory +
"signed", Path.GetFileName(postfile.FileName));
pathOut = postfile.FileName;
pathFinal = savedFileName;
postfile.SaveAs(savedFileName);
}
}
Response.Redirect("landing.aspx?SignedFile="+ pathOut + "&" + "out=" + pathFinal);
}
}
}

El cdigo anterior controla el mensaje POST y almacena el archivo firmado utilizando


HttpPostedFile (en la direccin que determine la variable: savedFileName).
HttpPostedFile postfile = Request.Files[file] as HttpPostedFile;
postfile.SaveAs(savedFileName);

Una vez tratado el archivo firmado, el cdigo redirige la sesin hacia la landing page (Landing.aspx
en el ejemplo). En este ejemplo se pasa como parmetro de la URL la ruta del archivo firmado:
Response.Redirect("landing.aspx?SignedFile="+ pathOut + "&" + "out=" + pathFinal);

Landing.aspx
La pgina landing.aspx contiene un frontend y cdigo que se inicia desde el evento Page_Load.
Cdigo frontend:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="landing.aspx.cs"
Inherits="SmartEngineDemo.landing" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>4Identity Signature</title>
</head>
<body>
<h2>
Landing Page
</h2>
File correctly Signed and downloadable here: <asp:HyperLink ID="hlSigned" runat="server">Signed
File</asp:HyperLink>
<BR />Output: <%=Request.QueryString["out"] %>

Cdigo behind (en segundo plano) landing.aspx.cs:


public partial class landing : System.Web.UI.Page
{

Integracin

</body>
</html>

16

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
protected void Page_Load(object sender, EventArgs e)
{
String wserver = " http://as.example.com:8080/4identity/signed/";
String LinkAddr = wserver + Request.QueryString["SignedFile"];
hlSigned.NavigateUrl = LinkAddr;
}
}

El cdigo anterior crea el enlace de descarga del documento y fija el valor del parmetro
NavigateUrl mediante el objeto hlSigned :
hlSigned.NavigateUrl = LinkAddr;

2.1.3

Integracin 4identity con tecnologa Java

Para entornos con Java EE la solucin se compondr de:


b) Un servidor de aplicaciones as.example.com:8080 que contiene la aplicacin web
/4identity;
c) /4identity, que es el ejemplo de cdigo JAVA del SDK, se compone de:

index.html: que contiene el formulario y la llamada al script ;

un servlet llamado Signing que lee el POST de los datos y redirige la sesin a la
landing page llamada success.jsp;

una pgina JSP llamada success.jsp que muestra al usuario el archivo firmado;

EL ARCHIVO ES ENVIADO A
CLIENTE 4IDENTITY PARA
LA FIRMA

ESCOGER
EL
ARCHIVO
A FIRMAR

El canal es creado
entre el 4idenitity
client
y
el
SMARTENGINE

INDEX.HTML

EL CLIENTE
4IDENTITY
FIRMA EL
ARCHIVO

ARCHIVO FIRMADO ES
ENVIADO COMO
MENSAJE POST

EL SERVIDOR
DE
APLCACIONES
GUARDA EL
ARCHIVO

REDIRECCION

/Signing

EL USUARIO ES
REDIRIGIDO A
LA PGINA
DEL ARCHIVO
FIRMADO

success.jsp

Figura 6 Proceso de firma en entorno Java

INDEX.HTML

1.
2.
3.
4.
5.

<div>
<form class="bit4id-sign" action="4identity/Signing" method="post">
<p></p>
<div class="bit4id-signReq" style="display: none;">
<div class="bit4iddocument">http://as.example.com:8080/4identity/TestData.pdf</div>

Integracin

A continuacin se muestra el cdigo de la pgina index.html.

17

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.

<div class="bit4id-documentName">TEST PDF DOCUMENT</div>


<div class="bit4id-signatureType">PAdES</div>
<div class="bit4id-signingAlgorithm">RSASHA256</div>
<div class="bit4id-certInfo">CN</div>
</div>
<div>
<fieldset>
<div><h3>Document Signature</h3></div>
<div><p><strong>Proceeding the document TestData.pdf will be signed, are you
sure?</strong></p></div>
<div id="bit4id-status"></div>
<div><input type="submit" value="Sign Document" name="cmd" disabled></div>
</fieldset>
</div>
</form>
<script src="http://fe.example.com:8082/smartengine/bit4id-sign.min.js"></script>
</div>

Esta pgina contiene el FORM con la clase personalizada bit4id-sign, un action (con
method=post) que redirige a nuestro servlet Signing y el botn de tipo submit:
<form class="bit4id-sign" action="4identity/Signing" method="post">
[]
<div><input type="submit" value="Sign Document" name="cmd" disabled></div>
</form>

Gracias al resto de etiquetas del formulario, definiremos la solicitud de firma con la clase bit4idsignReq:

La direccin del documento, en este caso un archivo (TestData.pdf) almacenado en el


servidor as.example.com :

<div class="bit4id-document">http://as.example.com:8080/4identity/TestData.pdf</div>

El nombre del archivo:

<div class="bit4id-documentName">TestData.pdf</div>

El estndard de firma (PAdES):

<div class="bit4id-signatureType">PAdES</div>

El algoritmo de firma utilizado (RSASHA256) :

<div class="bit4id-signingAlgorithm">RSASHA256</div>

El atributo del certificado (CN) que 4identity client mostrar cuando se listen los
certificados:

Integracin

<div class="bit4id-certInfo">CN</div>

18

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

La informacin del estado del canal. Utilizado normalmente con propsitos de


depuracin. Si esta etiqueta se aade en el formulario, index.html mostrar el estado
de 4identity desde el inicio de la comunicacin hasta finalizar el proceso de firma.

<div id="bit4id-status"></div>

El botn que permite enviar el POST. El nombre ha de tener el valor cmd y tiene que
permanecer habilitado el parmetro disabled:

<div><input type="submit" value="Sign Document" name="cmd" disabled></div>

El script en 4identity server, encargado de establecer la comunicacin Explorador4identity client:


<script src="http://dominio.licencia.com/smartengine/bit4id-sign.min.js"></script>
O
<script src="http://as-demo.bit4id.org/smartengine/bit4id-sign.min.js"</script>
O
<script src="https://www.4identity.eu/smartengine/bit4id-sign.js"</script>

NOTA: El script 4identity.eu solo funciona si su ambiente de desarrollo hace llamadas


desde localhost ej: http://localhost/
https://www.4identity.eu/smartengine/bit4id-sign.js es El

el 4identity server expuesto por

Bit4id para las pruebas de integracin.


Para poder realizar la firma en lotes se debe agregar la siguiente lnea de cdigo:
<div class="bit4id-bundle">YES</div>

Este parametro indica que debe prepararse para la firma en lotes y el tipo de archive que recibir
ser un .zip
<div class="bit4id-document">http://192.168.187.41:8080/identity/Documents/comprimido.zip</div>

Este parmetro debe indicar en que ruta se encuentra el archivo .zip , este zip debe contener todos
los archivos a firmar, por ejemplo:
Si los archivos son todos pdf, se debe usar el formato PAdES
Si los archivos son de diferente naturaleza (.pdf, .doc, .jpg, etc) se debe usar el formato CAdES
Servlet de firma

@WebServlet("/Signing")
@MultipartConfig(fileSizeThreshold=1024*1024*10,maxFileSize=1024*1024*15,maxRequestSize=1024*1024*30)
public class Signing extends HttpServlet {
private static final long serialVersionUID = 1L;

Integracin

A continuacin se muestra el cdigo de Servlet class:

19

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
private static final String contentdir = "D:\\jboss-as7.1.1\\standalone\\deployments\\4identity.war\\signed";
public Signing() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("SIGNATURE MANAGEMENT SERVLET");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
String signstore ="http://as.example.com:8080/4identity/signed";
for (Part part : request.getParts()) {
part.write(contentdir + File.separator + "FILESIGNED.pdf");
}
response.sendRedirect("success.jsp?link=" + signstore + "//" + "FILESIGNED.pdf");
}
}

El cdigo mostrado a continuacin gestiona el POST y almacena el archivo en el servidor:


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {}
for (Part part : request.getParts()) {
part.write(contentdir + File.separator + "FILESIGNED.pdf");
}

Una vez tratado el archivo firmado, el cdigo redirige la sesin hacia la landing page (success.jsp en
el ejemplo). En este ejemplo se pasa como parmetro de la URL la ruta del archivo firmado:
response.sendRedirect("success.jsp?link=" + signstore + "//" + "FILESIGNED.pdf");

success.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Signature Process</title>
</head>
<body>
<%

if (request.getParameter( "outprint" ) != null) {


String outprint = request.getParameter("outprint");
out.println("REQUEST PRINT:" + outprint.toString());
}

Integracin

if (request.getParameter( "link" ) != null) {


String link = request.getParameter("link");
out.println("<a href=" + link.toString() + ">SIGNED FILE</a>") ;
}

20

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
%>
</body>
</html>

Las funciones principales son:


La lectura del enlace (donde se encuentra el archivo) que se ha enviado:
String link = request.getParameter("link");

Y la creacin del enlace enlace para que el usuario pueda realizar la descargar del documento
firmado:
out.println("<a href=" + link.toString() + ">SIGNED FILE</a>")

2.1.4

Parmetros adicionales de firma

Seguidamente se detallan los parmetros para la funcionalidad de la firma.


API DE FIRMA CAdES
Esta seccin describe los parmetros de la firma que se incluyen junto a la clase bit4idsignReq para
realizar una solicitud de firma CAdES.
Parmetro

Valores

Por defecto

bit4id-signatureType

CAdES

NO DEFAULT

bit4id-signingAlgorithm

RSASHA256, RSASHA1, RSAMD5

RSASHA256

bit4id-encoding

1, 0

bit4id-issuerFilter

CN=..., OU=..., T=..., ecc.

bit4id-subjectFilter

CN=..., serialNumber= OU=..., T=..., ecc.

bit4id-certType

ANY, SIG, AUT

ANY

bit4id-certInfo

CN, OU, T, ecc.

NO DEFAULT

bit4id-localFile

YES,NO

NO DEFAULT

bit4id-message

String de texto

NO DEFAULT

bit4id-caption

String de texto

NO DEFAULT

bit4id-bundle

YES , NO

NO

bit4id-signingAlgorithm: Define el algoritmo que se usar para llevar a cabo la firma.

bit4id-issuerFilter: Define el filtro de certificado de la firma, como un sub-string del nombre


completo del emisor del certificado.

Integracin

bit4id-encoding: Define la codificacin del archivo una vez firmado. 1 para codificacin de base64 o
0 para codificacin binaria.

21

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

bit4id-subjectFilter: Define el filtro de certificado de la firma, como un sub-string del nombre


completo del propietario del certificado.
bit4id-certType: Define el filtro de certificado de firma, como un string describiendo el tipo de
certificado.
bit4id-certInfo: Define el atributo mostrado en el 4Identity client.
bit4id-localFile: Define si el documento a firmar se obtendr mediante un explorador de archivos
local.
bit4id-message: Define el mensaje que aparece en la parte superior del explorador
Muestra el mensaje que aparece en la parte superior del explorador.
bit4id-caption: Define el mensaje que se muestra que muestra el mensaje que aparecer en el
botn para abrir el explorador de archivos.
bit4id-bundle: Si este atributo tiene como valor YES, el fichero a firmar debe ser un zip que
contiene los archivos a firmar. Los ficheros a firmar dentro del dentro del zip seran mostrados en la
vista previa, como de costumbre. El fichero de salida ser un zip que contendr dentro, los ficheros
ya firmados.

API DE FIRMA PAdES


La siguiente tabla describe los parmetros que pueden acompaar a la clase: bit4idsignReq para
llevar a cabo la solicitud de firma tipo PAdES.
Valores

bit4id-signatureType

PAdES

Por defecto
NO DEFAULT
0 (Invisible)

bit4id-page

0, 1..n

bit4id-position

[0, 100, 51, 39]

bit4id-location

ubicacin

bit4id-reason

razn

bit4id-image

http://imageurl,
data:image/png;base64,R0lGODdhMA...

bit4id-signingAlgorithm

RSASHA256, RSASHA1, RSAMD5

RSASHA256

bit4id-paragraphFormat

signature string (on image)

bit4id-issuerFilter

CN=..., OU=..., T=..., .=...

bit4id-subjectFilter

CN=..., serialNumber= , OU=..., T=..., ecc.

bit4id-certType

ANY, SIG, AUT

ANY

bit4id-certInfo

CN, OU, T, ecc.

NO DEFAULT

bit4id-localFile

YES,NO

NO DEFAULT

bit4id-message

String de texto

NO DEFAULT

[]

Integracin

Parmetro

22

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
bit4id-bundle

YES , NO

NO

bit4id-page: Define la pgina del documento pdf donde se aadir la firma, (nicamente para firma
grfica). Si este parmetro tiene un valor nmerico diferente de 0, la firma grfica se activar.
bit4id-position: Define la posicin, en puntos, en la cual se mostrar la firma grfica dentro del
documento PDF.
bit4id-location: Define la localizacin que se mostrar en la firma grfica.
bit4id-reason: Define la raznn que se mostrar en la firma grfica.
bit4id-image: Define la url o la data-url en la cual, se deber descargar la imagen que ser utilizada
para incluirla en la firma grfica.
bit4id-signingAlgorithm: Define el algoritmo que se emplear para la firma.
bit4id-paragraphFormat: Define el texto que se incluir en la firma grfica.
bit4id-issuerFilter: Define el filtro de certificado de la firma, como un sub-string del nombre
completo del emisor del certificado.
bit4id-subjectFilter: Define el filtro de certificado de la firma, como un sub-string del nombre
completo del propietario del certificado.
bit4id-certType: Define el filtro de certificado de la firma como un string, describiendo el tipo de
certificado.
bit4id-certInfo: Define el atributo mostrado en el 4identity Client.
bit4id-localFile: Define si el documento a firmar se obtendr mediante un explorador de archivos
local
bit4id-message: define el mensaje que aparece en la parte superior del explorador
Muestra el mensaje que aparece en la parte superior del explorador.
bit4id-caption: define el mensaje que se muestra que muestra el mensaje que aparecer en el
botn para abrir el explorador de archivos.

API DE FIRMA XAdES


La siguiente tabla describe los parmetros que pueden acompaar a la clase: bit4idsignReq para
llevar a cabo la solicitud de la firma tipo XAdES.

Integracin

bit4id-bundle: Si este atributo tiene como valor YES, el fichero a firmar debe ser un zip que
contiene los archivos a firmar. Los ficheros a firmar dentro del dentro del zip seran mostrados en la
vista previa, como de costumbre. El fichero de salida ser un zip que contendr dentro, los ficheros
ya firmados.

23

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
Parmetro

Valores

Por defecto

bit4id-signatureType

XAdES

NO DEFAULT

bit4id-hashAlgorithm

SHA256, SHA1, MD5

SHA256

bit4id-signatureMode

Enveloping, Enveloped, InternalDetached, Binary

Enveloped

bit4id-level

BES, T, C, X, XL

BES

bit4id-binary

1, 0

bit4id-xpath

xpath of node to be signed

/*

bit4id-issuerFilter

CN=..., OU=..., T=..., .=...

bit4id-subjectFilter

CN=..., serialNumber= , OU=..., T=..., ecc.

bit4id-certType

ANY, SIG, AUT

ANY

bit4id-certInfo

CN, OU, T, ecc.

NO DEFAULT

bit4id-localFile

YES,NO

NO DEFAULT

bit4id-bundle

YES , NO

NO

bit4id-hashAlgorithm: Define el tipo de algoritmo hash que se usar para la firma.


bit4id-signatureMode: Define el tipo de firma XAdES que se emplear.
bit4id-level: Define el nivel de firma XAdES que se utilizar.
bit4id-binary: Se debe fijar en 1 si se quiere firmar un archivo binario, o en 0 para firmar un archivo
xml.
bit4id-xpath: Define el nodo del documento XML que se firm como una cadena de expresin
xpath.
bit4id-issuerFilter: Define el filtro de certificado de firma, como un sub-string del nombre completo
del emisor del certificado.
bit4id-subjectFilter: Define el filtro de certificado de la firma, como un sub-string del nombre
completo del propietario del certificado.
bit4id-certType: Define el filtro de certificado de firma como un string, describiendo el tipo de
certificado.
bit4id-certInfo: Define el atributo mostrado en el 4Identity Client.
bit4id-localFile: Define si el documento a firmar se obtendr mediante un explorador de archivos
local.

bit4id-caption: define el mensaje que se muestra que muestra el mensaje que aparecer en el
botn para abrir el explorador de archivos.

Integracin

bit4id-message: define el mensaje que aparece en la parte superior del explorador


Muestra el mensaje que aparece en la parte superior del explorador.

24

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

bit4id-bundle: Si este atributo tiene como valor YES, el fichero a firmar debe ser un zip que
contiene los archivos a firmar. Los ficheros a firmar dentro del dentro del zip seran mostrados en la
vista previa, como de costumbre. El fichero de salida ser un zip que contendr dentro, los ficheros
ya firmados.
Parmetros de sellado de tiempo
Esta seccin describe los parmetros del sellado de tiempo. Estos parmetros son aplicables a
cualquier estndar de firma descrita anteriormente. Dichos parmetros deben ser facilitados por la
autoridad de sellado de tiempo.
Parmetro

Valores

Por defecto

bit4id-tsUrl

Direccin de la autoridad de sellado de tiempo

bit4id-tsUserName

Nombre de usuario

bit4id-tsPassword

Contrasea

bit4id-reqPolicy

OID de la autoridad de sellado de tiempo

Para llevar a cabo pruebas contra la plataforma de Bit4id se debe introducir como valor del
parmetro bit4id-tsUrl la siguiente direccin:
http://as-demo.bit4id.org/smartengine/tsa
Esta plataforma es de acceso pblico (no requiere credenciales de acceso) y no requiere ningn OID
de poltica de sellado.

2.2 Proceso de autenticacin


Los principales componentes involucrados en el proceso de autenticacin son:

Aplicacin Web que define el reto (o challenge, cadena de carcetres a firmar) con
4identity Client.

4identity client que, usando el certificado seleccionado por el usuario, firma el reto.

4identity Server, que valida el certificado a partir del reto firmado. Este devolver a la
aplicacin web informacin acerca de la correcta autenticacin.

Nombre del dominio de la aplicacin ejemplo: firma.digital.com

Puerto de acceso que usa la aplicacin web : firma.digital.com:8080

Integracin

Adicionalmente requerimos que se envie la siguiente informacin, para poder emitir


una licencia de desarrollo temporal:

25

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Certificados raz de las autoridades certificadoras emisoras de los certificados


que se usaran para autentcacion y firma.

Para que la aplicacin web reciba la respuesta de 4identity server es imprescindible


que esta se exponga pblicamente (accesible desde fuera de la red local). Sino es as el
proceso de autenticacin nunca podr concluir correctamente.
Profundizando en el proceso, el ususario presiona el botn para comenzar el proceso. El reto
utilizado se firma mediante el certificado elegido.

Figura 11 Eleccin del certificado para la autenticacin

4identity client, una vez firmado el reto, lo enva al 4identity server para validar el certificado. El
reto firmado es necesario para asegurar la posesin del par de claves por parte del usuario que se
est autenticando.
RESPUESTA DE VALIDACIN
POSITIVA

RESPUESTA DE VALIDACIN
NEGATIVA

Figura 12 Proceso de autenticacin

El resultado final del proceso de autenticacin se compone de diferentes variables POST que
muestran y dan informacin del resultado. La variable POST ms significativa e importante tiene el
nombre de result, que puede adquirir los valores ok o ko seguidos de informacin del certificado
validado.
La siguiente cadena de carcetres es un ejemplo de los valores que el valor de la variable result
puede devolver:

Donde se puede ver que, el texto inmediatamente despus de ok es el CN del certificado.


Consultar el apartado 2.2.5 para ver la descripcin de los parmetros de autenticacin enviados.

Integracin

Result = ok: Doe/John/DOEJHN1234567890

26

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Aunque el cdigo explicado en los siguientes pargrafos solo verifique el valor del parmetro
result, se debe seguir el siguiente procedimiento para garantizar el mximo grado de seguridad:
1. El reto debe ser cambiado en cada sesin y verificado por el servidor (aplicacin web) en el
proceso de autenticacin.
2. El parmetro de clave secreta (secret key o sk) debe ser verificado por el servidor en el
proceso de autenticacin.
La aplicacin que se encuentra en el servidor consta de:
1. Una pgina login (o index dependiendo del ejemplo) que permite al usuario
autenticarse.
2. Un conjunto de componentes que reciben la respuesta de 4identity server (va POST) y
deciden sobre el proceso de autenticacin.
3. Una landing page en la que se muestran los resultados de la autenticacin.
Tal y como se detalla anteriormente, en el caso de los ejemplos del SDK la pgina final es siempre
(sea cual sea el certificado) la landing page con los resultados de la autenticacin.
El objetivo en casos prcticos es procesar los resultados de la validacin como apoyo para la
autenticacin o no del usuario pues la decisin final en cualquier caso es de la aplicacin web. Por
lo tanto la redireccin se realizara haca el rea restringida del usuario o a una seccin web donde
se le informe del error de autenticacin.
2.2.1

Integracin 4identity con tecnologa PHP

Para un entorno con PHP, utilizaremos:


a) Un servidor de aplicaciones as.example.com:8080 que contiene y pone a disposicin
de los usuarios el componente /4identity ;
El nombre definitivo depender de la configuracin del servidor de aplicaciones. Por
esta razn suponemos que /4identity ser la carpeta donde se alojar la Aplicacin
Web de ejemplo.

index.php: que contiene el formulario y la llamada al script.

Una pgina llamada auth-ok.php que lee el POST de datos y toma la decisin
basndose en stos. Esta pgina redirige la sesin hacia una landing page
llamada auth-end-ok.php

Integracin

b) /4identity, que es el ejemplo de autenticacin (autenticacin) del SDK, se compone de:

27

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Una pgina llamada auth-end-ok.php que muestra los resultados del proceso
de autenticacin, dejando ver los datos recibidos:

Challenge: 4IDENTITYCH
Result: ok
SK: 5787237843
Issuer: CN=Bit4ID - TEST CA, C=IT, S=NA, L=Napoli, O=Bit4ID
Subject: 2.5.4.46=619, 2.5.4.4=ROSSI, 2.5.4.42=MARIO, CN=MARIO ROSSI,
O=Bit4id, C=IT
Serial: 026b
Not_Before: Thu, 08 Nov 2012 09:34:58GMT
Not_After: Sun, 06 Nov 2022 09:34:58GMT
Certificate: MIIDiTCCAvKgAwIBAgICAmswDQYJKoZIhvcNAQ.

Una pgina llamada auth-end-error.php que nos muestra un mensaje


informndonos que ha habido un error en la autenticacin.

POST

Figura 15 Proceso de autenticacin en PHP

index.php
A continuacin, se muestra el cdigo de la pgina index.php.
<html>
<body>
<div>
<?php
$folders="demos_4identity/autenticacion/";
$url_4identity_server_auth="http://dominio.licencia.com/smartengine/bit4idsign.min.js";
$secure_code="4sCCvGMx8PaxuYQ==";
<form class="bit4id-auth" action="<?php echo $folders; ?>auth-ok.php" method="post">
<div class="bit4id-authReq" style="display: none;">
<div class="bit4id-challenge"><?php echo $secure_code; ?></div>
<div class="bit4id-certType">ANY</div>
<div class="bit4id-issuerFilter"></div>
</div>
<div id="bit4id-status">Espere hasta la conexi&oacute;n</div>

Integracin

?>

28

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
<input type="submit" disabled="disabled" value="Autenticar" name="cmd">
</form>
<script src="<?php echo $url_4identity_server_auth; ?>"></script>
</div>
</body>
</html>

Esta pgina contiene el FORM con la clase personalizada bit4id-auth, un action (con
method=post) que redirige a la pgina auth-ok.php y el botn de tipo submit:
<form class="bit4id-auth" action="<?php echo $folders; ?>auth-ok.php" method="post">
[]
</form>

Seguidamente, necesitamos crear la solicitud de autenticacin mediante la clase bit4id-authReq. La


solicitud incluye la siguiente informacin:
El reto intercambiado con 4identity client. El reto puede ser alfanumrico y no tiene
lmite de carcteres:
<div class="bit4id-challenge">4IDENTITYCH</div>

El tipo de certificado:

<div class="bit4id-certType">ANY</div>

El atributo del certificado (CN en este caso) que 4identity client mostrar cuando se
listen los certificados:

<div class="bit4id-certInfo">CN</div>

El botn que permite el envio de los datos del formulario:

<input type="submit" value="Authenticate" />

El script en 4identity server, encargado de la validacin del certificado. La URL del


script se obtiene mediante la variable (url_4identity_server_auth) definida
previamente:
<script src="<?php echo $url_4identity_server_auth; ?>"></script>

dominio.licencia.com, que es el valor de la variable url_4identity_server-sign, es el


4identity server expuesto por Bit4id para las pruebas de integracin.
Integracin 4identity con tecnologa .NET

Para un entorno con .NET, utilizaremos:


a) Un servidor web (comnmente Apache) as.example.com:8080 que contiene la
aplicacin personalizada /4identity ;

Integracin

2.2.2

29

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

El nombre definitivo depender de la configuracin del servidor de aplicaciones. Por


esta razn suponemos que /4identity ser la carpeta donde se alojar la Aplicacin
Web de ejemplo.
b) El componente 4identity server esta compuesta por:

login.aspx: que contiene el formulario y la llamada al script.

Una pgina llamada AuthOK.aspx que lee el POST de datos y toma la decisin
basndose en stos. Esta pgina redirige la sesin hacia una landing page
llamada landingauth.aspx.

Una pgina llamada landingauth.aspx que muestra los resultados del proceso
de autenticacin.
Output: ok
User: Doe/John/DOEJHN1234567890
Secret Server Code: 5787237843
Challenge: 4IDENTITYCH

POST

Figura 14 Proceso de autenticacin en .NET

login.aspx
A continuacin, se muestra el cdigo de la pgina principal login.aspx.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs"
Inherits="SmartEngineDemo.login" %>
<!DOCTYPE html>
<html>

<body>
<form class="bit4id-auth" method="post" action="/4identity/AuthOk.aspx">
<div class="bit4id-authReq" style="display: none;">
<div class="bit4id-challenge">4IDENTITYCH</div>

Integracin

<head>
<meta charset="ISO-8859-1">
<title>4Identity Authentication</title>
</head>

30

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
<div class="bit4id-certType">ANY</div>
<div class="bit4id-certInfo">CN</div>
</div>
<input type="submit" value="Authenticate" />
</form>
<script src="http://fe.example.com:8082/smartengine/bit4id-auth.min.js"></script>
</body>
</html>

Esta pgina contiene el FORM con la clase personalizada auth-sign, un action (con
method=post) que redirige a la pgina authok.php y el botn de tipo submit:
<form class="bit4id-auth" action="4identity/AuthOK.aspx" method="post">
[]
</form>

Seguidamente, necesitamos crear la solicitud de autenticacin mediante la clase bit4id-authReq. La


solicitud incluye la siguiente informacin:
El reto intercambiado con 4identity client. El reto puede ser cualquier texto o cifra:
<div class="bit4id-challenge">4IDENTITYCH</div>

El tipo de certificado:

<div class="bit4id-certType">ANY</div>

El atributo del certificado (CN en este caso) que 4identity client mostrar cuando se
listen los certificados:

<div class="bit4id-certInfo">CN</div>

El botn que permite el envio de los datos del formulario:

<input type="submit" value="Authenticate" />

El script en 4identity server, encargado de la validacin del certificado:

<script src="http://dominio.licencia.com/smartengine/bit4id-sign.min.js"></script>
O
<script src="http://as-demo.bit4id.org/smartengine/bit4id-sign.min.js"</script>

AuthOK.aspx
La pgina AuthOk.aspx contiene un frontend y otro cdigo que arranca desde el evento Page_Load.

%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AuthOK.aspx.cs"


Inherits="SmartEngineDemo.AuthOK" %>
<!DOCTYPE html>

Integracin

Cdigo frontend:

31

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
<html>
<head>
<meta charset="ISO-8859-1">
<title>process page</title>
</head>
<body>
</body>
</html>

Cdigo behind:
namespace SmartEngineDemo
{
public partial class AuthOK : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
String authres = Request.Form["result"].Substring(0, 2);
int lenres = Request.Form["result"].ToString().Length;
String userId = Request.Form["result"].Substring(3, lenres - 3);
String secretCode = Request.Form["sk"];
String challenge = Request.Form["challenge"];
Response.Redirect("landingauth.aspx?Auth=" + authres + "&User=" + userId + "&sk=" +
secretCode + "&challenge=" + challenge);
}
}
}

Si prestamos atencin al cdigo behind anterior, esta pgina gestiona el mensaje POST (resultados
recibidos) y toma una decisin basndose en el valor de la variable obtenida result.
Como ya hemos visto, el cdigo principal est formado por una extraccin del valor de la variable
result que pueden ser ok o ko .
Los valores recibidos sk y challenge tambin deben ser gestionados. El valor de sk se especifica en
un archivo de configuracin, mientras que el reto (challenge) debe ser cambiado de forma aleatria
en cada solicitud y comparado/verificado por el servidor.
String secretCode = Request.Form["sk"];
String challenge = Request.Form["challenge"];

Despus, el cdigo redirige la sesin hacia la pgina landingauth.aspx:


Response.Redirect("landingauth.aspx?Auth=" + authres + "&User=" + userId + "&sk=" + secretCode +
"&challenge=" + challenge);

La pgina landingauth.aspx solo contiene cdigo frontend. sta, recoge los datos obtenidos a travs
de la pgina AuthOK.aspx y los muestra en pantalla como comprobacin.

Integracin

Landingauth.aspx

32

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Cdigo frontend:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="landingauth.aspx.cs"
Inherits="SmartEngineDemo.landingauth" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>4Identity Authentication</title>
</head>
<body>
<h2>
Landing Page for authentication
</h2>
User status for Authentication:
<BR />Output: <%=Request.QueryString["Auth"] %>
<BR />User: <%=Request.QueryString["User"] %>
<BR />Secret Server Code: <%=Request.QueryString["sk"] %>
<BR />Challenge: <%=Request.QueryString["challenge"] %>
</body>
</html>

2.2.3

Integracin 4identity con tecnologa Java

Para un entorno de desarrollo en J2EE:


a) Un servidor de aplicaciones as.example.com:8080 que contiene el componente
/4identity ;
El nombre definitivo depender de la configuracin del servidor de aplicaciones. Por
esta razn suponemos que /4identity ser la carpeta donde se alojar la Aplicacin
Web de ejemplo.
b) la aplicacin 4identity server consiste en:

login.html: que contiene el formulario y la llamada al script;

un servlet llamado Auth que lee el POST de datos y toma la decisin basndose
en stos. Esta pgina redirige la sesin hacia una landing page llamada
success.jsp

una pgina llamada success.jsp que muestra los resultados del proceso de
autenticacin.

Integracin

Output: ok
User: Doe/John/DOEJHN1234567890
Secret Server Code: 5787237843

33

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Challenge: 4IDENTITYCH

Figura 13 Proceso de autenticacin en JAVA

Tal y como se detalla anteriormente, en el caso de los ejemplos del SDK de 4identity la pgina final
es siempre (sea cual sea el certificado) success.jsp y en esta se mostrar el resultado de la
validacin por parte del 4identity server.
LOGIN.HTML
A continuacin se muestra el cdigo para la pgina login.html.
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>4Identity Authentication</title>
<head>
<body>
<form class="bit4id-auth form-stacked" method="post" action="4identity/Auth">
<div class="bit4id-authReq" style="display: none;">
<div class="bit4id-challenge">4IDENTITYCH</div>
<div class="bit4id-certType">ANY</div>
<div class="bit4id-certInfo">CN</div>
</div>
<input type="submit" value="Authenticate" />
</form>
<script src="http://dominio.licencia.com/smartengine/bit4id-sign.min.js "></script>
</body>
</html>

Esta pgina contiene el FORM (formulario) con la clase personalizada bit4id-auth, la accin
configurada hacia la pgina Auth y el mtodo con el valor POST:
<form class="bit4id-auth" action="4identity/Auth" method="post">
[]
</form>

Despus necesitamos llevar a cabo la solicitud de autenticacin mediante la clase bit4id-authReq.


La solicitud incluye la siguiente informacin:

<div class="bit4id-challenge">4IDENTITYCH</div>

El tipo de certificado que mostrar 4identity client (filtro de certificados):

Integracin

El reto intercambiado con 4identity client. El reto puede ser alfanumrico y no tiene
lmite de carcteres:

34

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
<div class="bit4id-certType">ANY</div>

El atributo del certificado (CN en este caso) que 4identity client mostrar cuando se
listen los certificados:

<div class="bit4id-certInfo">CN</div>

El botn que permite el envio de los datos:

<input type="submit" value="Authenticate" />

El script en 4identity server, encargado de la validacin del certificado:


<script src="http://dominio.licencia.com/smartengine/bit4id-auth.min.js"></script>
O
<script src="http://as-demo.bit4id.org/smartengine/bit4id-sign.min.js"</script>

Para ms informacin acerca de la peticin de autenticacin consultar el apartado 2.2.5


Auth servlet
A continuacin se mustra el cdigo para Servlet class:
package com.bit4id.identity;
import
import
import
import
import
import
import
import

java.io.IOException;
java.io.PrintWriter;
java.util.Enumeration;
javax.servlet.ServletException;
javax.servlet.annotation.WebServlet;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;

@WebServlet("/Auth")
public class Auth extends HttpServlet {
private static final long serialVersionUID = 1L;
public Auth() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("AUTH MANAGEMENT SERVLET");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
Enumeration<String> parameterNames = request.getParameterNames();
String htmlout="";

while (parameterNames.hasMoreElements()) {
String paramName = parameterNames.nextElement();
if ("result".equals(paramName))
{

Integracin

response.setContentType("text/html");

35

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
String prmRes = request.getParameter(paramName);
String result = prmRes.substring(0, 2);
htmlout = "<p></p>AUTHENTICATION: " + result + "<p></p>";
}
htmlout= htmlout + "<br>" + paramName;
String[] paramValues = request.getParameterValues(paramName);
for (int i = 0; i < paramValues.length; i++) {
String paramValue = paramValues[i];
htmlout= htmlout + "(" + paramValue + ")";
}
}
response.sendRedirect("success.jsp?outprint=" + htmlout);
}
}

El cdigo anterior muestra un servlet que controla un mensaje POST y toma la decisin basndose
en el el valor de la variable recibida result.
El cdigo principal est compuesto de una extraccin del valor de la variable result. Los valores
de esta variable pueden ser ok o ko . stos gestionarn el proceso de autenticacin. Esta parte
del cdigo debe ser creada dependiendo de los requerimientos de la aplicacin a integrar, por
ejemplo se puede utilizar en una aplicacin que permita al usuario la identificacin y el acceso. Por
todo ello, dependiendo del valor de esta variable, podremos dar la autenticacin como vlida o
como errnea.
if ("result".equals(paramName))
{
String prmRes = request.getParameter(paramName);
String result = prmRes.substring(0, 2);
htmlout = "<p></p>AUTHENTICATION: " + result + "<p></p>";
// INSERTAR CDIGO PARA GESTIONAR LOS RESULTADOS DE LA
AUTENTICACIN
// USING THE VARIABLE result, sk and challenge:
// ok -> AUTENTICACIN CORRECTA
// ko -> AUTENTICACIN ERRNEA
}

Despus de esto, el programa guardar en la variable htmlout todos los datos recibidos a travs
del mtodo POST mediante la sintaxis: POSTED_VARIABLE_NAME(POSTED_VARIABLE_VALUE).
Finalmente, el cdigo redirigir al usuario a la pgina success.jsp, donde tambin se mostrar la
variable htmlout :
response.sendRedirect("success.jsp?outprint=" + htmlout);

A continuacin se muestra el cdigo de la pgina success.jsp:


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>

Integracin

success.jsp

36

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Signature Process</title>
</head>
<body>
<%
if (request.getParameter( "link" ) != null) {
String link = request.getParameter("link");
out.println("<a href=" + link.toString() + ">SIGNED FILE</a>") ;
}
if (request.getParameter( "outprint" ) != null) {
String outprint = request.getParameter("outprint");
out.println("REQUEST PRINT:" + outprint.toString());
}
%>
</body>
</html>

El cdigo mostrado seguidamente, obtiene el parmetro outprint procedente del servlet y


muestra su valor:
if (request.getParameter( "outprint" ) != null) {
String outprint = request.getParameter("outprint");
out.println("REQUEST PRINT:" + outprint.toString());
}

2.3 Errores comunes en la integracin


1. Canal explorador-4identity no se ha establecido
Para detectar si el canal se ha establecido se debe ejecutar el proceso de firma o autenticacin y
ejecutar el ndice o la pgina principal del ejemplo de autenticacin para que el script intente
establecer el canal.
Si el canal se ha establecido debera mostrarse en la barra de tareas el siguiente logo:

Sino es as, las causas pueden ser:

Se debe comprobar si 4identity cliente est correctamente instalado.


1.2 El proxy de la red bloquea la conexin con 4identity server

Integracin

1.1 4identity client no est instalado en la mquina

37

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

De esta forma no se puede realizar la llamada al script y por tanto no se establecer nunca el canal
2. La ruta del documento a firmar no es vlida
Si la ruta no es vlida y el documento es PDF el proceso de firma mostrar el siguiente mensaje:

Tanto si es o no PDF tras confirmar la firma el proceso fallar.


Selecione la ruta completa del documento a firmar almacenada en la etiqueta <div class="bit4iddocument"> y cpiela en el explorador para comprobar si la ruta es correcta. El documento PDF se
debera mostrar en el explorador. Sino se visualice modifique la ruta del documento y compruebe
de nuevo la direccin hasta que se consiga cargar el documento.
Si no se soluciona el problema a travs de las vas mencionadas anteriormente y a travs del
anlisis del cdigo en cuestin se debe habilitar la carpeta de registros de 4identity.
Para ello se debe crear una carpeta llamada log en la sigueitne ruta:
C:\Users\Nombre_Usuario\AppData\Roaming\Bit4id\4identity\browser_intent\var\log

Integracin

Estos logs se enviarn al departamento de soporte de Bit4id para su anlisis.

38

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

2.4 Diagramas de flujo


Diagrama de flujo de firma digital

Integracin

2.4.1

39

Ttulo del documento:

26/08/2016

Gua de integracin

Versin 1.10

Producto:

4identity

Diagrama de flujo de autenticacin

Integracin

2.4.2

40

Você também pode gostar