Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
2.1.2
2.1.3
2.1.4
2.2.2
2.2.3
2.4.1
2.4.2
ndice
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
SGM
1.4
29/08/2014
JGM
1.5
09/09/2014
Revisin definitiva
JGM
1.6
30/10/2015
RAV
1.7
10/11/2015
Nuevos parametros
RAV
1.8
05/02/2016
RAV
1.9
18/05/2016
Localhost
RAV
1.10
26/08/2016
Mejoras
GBA, RLG
Revisiones
Revisiones
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:
Resumen
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
SMARTENGINE
SERVIDOR DE APLICACIONES
Archivo
firmado
Archivo
a firmar
AUTENTICACION
CANAL DE CONFIANZA
fe.example.com
as.example.com
4IDENTITY
CLIENT
FIRMA
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
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.
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
Integracin
En el proceso de firma, 4identity Client muestra al usuario los certificados disponibles para firmar:
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.
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.
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).
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
index.php
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
REDIRECCION
EL USUARIO ES
REDIRIGIDO A
LA PGINA
DEL ARCHIVO
FIRMADO
sign-end-ok.php
Integracin
ESCOGER
EL
ARCHIVO
A FIRMAR
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ú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>
</form>
Integracin
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:
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>
Con esta tiqueta definida en YES, se incluyen tambin dos posibles parmetros:
<div class="bit4id-message">Seleccionar los ficheros a firmar</div>
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>
Integracin
https://www.4identity.eu/smartengine/bit4id-sign.js,
10
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"];
header("Location: sign-end-error.php");
Sign-end-ok.php
Integracin
11
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>";
?>
2.1.2
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;
Integracin
12
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
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
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:
<div class="bit4id-documentName">test.pdf</div>
El estandard de firma(PAdES):
<div class="bit4id-signatureType">PAdES</div>
<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>
<div id="bit4id-status"></div>
<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
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
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
15
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);
}
}
}
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"] %>
Integracin
</body>
</html>
16
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
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
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
17
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.
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:
<div class="bit4id-document">http://as.example.com:8080/4identity/TestData.pdf</div>
<div class="bit4id-documentName">TestData.pdf</div>
<div class="bit4id-signatureType">PAdES</div>
<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
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
<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:
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
19
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");
}
}
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>
<%
Integracin
20
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
%>
</body>
</html>
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
Valores
Por defecto
bit4id-signatureType
CAdES
NO DEFAULT
bit4id-signingAlgorithm
RSASHA256
bit4id-encoding
1, 0
bit4id-issuerFilter
bit4id-subjectFilter
bit4id-certType
ANY
bit4id-certInfo
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
Integracin
bit4id-encoding: Define la codificacin del archivo una vez firmado. 1 para codificacin de base64 o
0 para codificacin binaria.
21
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
bit4id-signatureType
PAdES
Por defecto
NO DEFAULT
0 (Invisible)
bit4id-page
0, 1..n
bit4id-position
bit4id-location
ubicacin
bit4id-reason
razn
bit4id-image
http://imageurl,
data:image/png;base64,R0lGODdhMA...
bit4id-signingAlgorithm
RSASHA256
bit4id-paragraphFormat
bit4id-issuerFilter
bit4id-subjectFilter
bit4id-certType
ANY
bit4id-certInfo
NO DEFAULT
bit4id-localFile
YES,NO
NO DEFAULT
bit4id-message
String de texto
NO DEFAULT
[]
Integracin
Parmetro
22
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.
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
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
Parmetro
Valores
Por defecto
bit4id-signatureType
XAdES
NO DEFAULT
bit4id-hashAlgorithm
SHA256
bit4id-signatureMode
Enveloped
bit4id-level
BES, T, C, X, XL
BES
bit4id-binary
1, 0
bit4id-xpath
/*
bit4id-issuerFilter
bit4id-subjectFilter
bit4id-certType
ANY
bit4id-certInfo
NO DEFAULT
bit4id-localFile
YES,NO
NO DEFAULT
bit4id-bundle
YES , NO
NO
bit4id-caption: define el mensaje que se muestra que muestra el mensaje que aparecer en el
botn para abrir el explorador de archivos.
Integracin
24
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
bit4id-tsUserName
Nombre de usuario
bit4id-tsPassword
Contrasea
bit4id-reqPolicy
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.
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.
Integracin
25
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
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
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:
Integracin
26
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
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
27
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.
POST
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ón</div>
Integracin
?>
28
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>
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>
Integracin
2.2.2
29
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
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
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
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>
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>
<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.
Integracin
Cdigo frontend:
31
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"];
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
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
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
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
Challenge: 4IDENTITYCH
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>
<div class="bit4id-challenge">4IDENTITYCH</div>
Integracin
El reto intercambiado con 4identity client. El reto puede ser alfanumrico y no tiene
lmite de carcteres:
34
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>
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
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);
Integracin
success.jsp
36
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>
Integracin
37
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:
Integracin
38
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
Integracin
2.4.1
39
26/08/2016
Gua de integracin
Versin 1.10
Producto:
4identity
Integracin
2.4.2
40