cliente-firma-miniapplet

ClienteFirmaMiniapplet-1.1.0 2016/04/08

  • Nuevo cliente con soporte autofirma.

ClienteFirmaMiniapplet-1.0.0 2014/09/24

  • Nuevo cliente con soporte miniapplet.
<dependency>
<groupId></groupId>
<artifactId>clientefirma</artifactId>
<version>4.2.0</version>
</dependency>

Configuración

Configuración de la factoría de servicios

Para la utilización del componente clienteFirmaMiniapplet basta con añadir el jar y sus correspondientes dependencias al classpath de la aplicación

El servicio concreto a usar se definirá a partir de un fichero de properties junto con el resto de los parámetros:

KeyDescripciónEjemplo
sistemas.global.amap.clientefirma.urlEndpoint del servicio web.https://******/clientefirma
Los valores de las propieades aquí mostrados son meramente ilustrativos. En los entornos de desarrollo / preproducción y producción los valores de las variables han de ser externalizados tal y como se especifica en el documento Definición de acceso a propiedades de sistema

Ejemplo de contenido del fichero de propiedades:

sistemas.global.amap.clientefirma.url=https://******/clientefirma

Inclusión de librerías JavaScript

El primer paso para la incorporación de cliente es la inclusión de las librerías de javascript que vamos a utilizar:

<script type="text/javascript" src="https://<host>/clientefirma/js/autofirma/miniapplet.js" id="afirmacliente.js"></script>
<script type="text/javascript" src="https://<host>/clientefirma/js/autofirma/afirmaClienteMiniapplet.js"></script>

Inicialización


A continuación se incorporará la llamada de inicialización de la librería al principio del body

<script type="text/javascript">
inicializaClienteFirma();
</script>
Los ficheros .js también son accesibles vía http
La carga de la librería (la llamada a inicializaClienteFirma) debe hacerse al principio del body como se muestra ya que ha de hacerse en el proceso de carga (método onload) o en otro momento anterior provocaría que no estuviesen cargados los prerrequisitos de invocación de la función y, por lo tanto, no se ejecutase correctamente.
Es importante especificar el id de la referencia al recurso miniapplet.js dado que se utiliza para obtener la url de referencia.

Información General miniapplet-autofirma

 

Cuando el firmante no cuenta con un entorno de ejecución de Java instalado en su navegador Web para la ejecución de Applets de Java, el despliegue del MiniApplet deriva las tareas de firma a la aplicación *AutoFirma* sin necesidad de que el integrador deba gestionar por su parte esta delegación de tareas. Es decir, en caso de no poder ejecutarse el MiniApplet por problemas de compatibilidad de entorno (Google Chrome versión 42 o superior, etc.), razones confianza o permisos restringidos (falta de permisos, Java no instalado,etc), el JavaScript de despliegue derivará las tareas de firma en la aplicación Autofirma siempre y cuando este previamente instalada en el sistema.

Para que AutoFirma pueda asumir cualquier operación de firma, es necesario que esté instalada en el equipo local antes de iniciar el trámite de firma. 

Para consultar la instalación de Autofirma consulte el documento de instalación y gestión

El ejecutable de autofirma puede ser descargado de la ublicación :
http://firmaelectronica.gob.es/Home/Descargas.html

Puede consultar los requisitos en :
https://sede.cantabria.es/web/sede-electronica/requisitos-necesarios 

Si presenta algún problema puede consultar laos problemas conocidos y su solución en :
https://github.com/ctt-gob-es/clienteafirma/wiki/Instalaci%C3%B3n-AutoFirma:-Problemas-conocidos

Nota : Si el entorno cliente es Linux será necesario que tenga instalado un jdk (openjdk) versión 8 en el equipo cliente.

Información de aplicación particular a las aplicaciones del Gobierno de Cantabria

 

Para el uso del miniapplet y de autofirma en las aplicaciones que siguen el Framework-amap del Gobierno de Cantabria se deberá tener en cuenta las indicaciones que aparecen al respecto en dicho Framework. 

En dichas aplicaciones en caso de que el firmante no cuente con el entorno de ejecución de java para el despliegue del miniapplet y además no tenga instalado la aplicación de autofirma, se propone una descarga para su posterior instalación (vease documento de instalación y gestión).

instalar-autofirma.png

Nota : En los puestos plataformados del Gobierno de Cantabria se hará una instalación por defecto en dichos puestos. 

Configuración de la JVM 1.7 de cliente para descarga de componentes de firma

  • Acceder al panel de control
    • XP: Inicio -> Configuración -> Panel de Control
    • W7: Inicio -> Panel de control
  • Pulsar sobre el icono Java

jvm17firma1.png

  • Ir a la pestaña de seguridad y marcar las opciones que aparecen en rojo

jvm17firma2.png

N/A

Nombreclientefirma
Identificadorclientefirma
Grupo
Versión4.2.0
LicenciaGPLv3
DesarrolladorGobierno de España / Gobierno de Cantabria
Descripción

Componente para el firmado de información a través de certificados instalados en el navegador del usuario

Sin particularidades. Seguir las recomendaciones del fabricante.

Firmar

firmar(tipoFirmaValue,datos,filtroTitular,filtroEmisor,filtroSoloFirma,
       firmaSalidaEnFichero,firmaMultiple,politicaFirma,
       firmarResultCallback,firmarErrorCallback);

Esta función espera recibir los siguientes valores como parámetros:

  • tipoFirmaValue: indica el tipo de firma a aplicar sobre el contenido, puede tener uno de los siguientes valores:
    • 101: Indica que se va a firmar fichero en base 64 en formato CAdES Implicito.
    • 100: Indica que se va a firmar fichero en base 64 en formato CAdES Explicito.
    • 301: Indica que se va a firmar fichero en base 64 en formato PAdES Implicito.
    • 501. Indica que se va a firmar fichero en base 64 en formato XAdES Implicito.
    • 0. Solo aplicable a cofirma/contrafirma. Indica que se va a cofirmar/contrafirmar el fichero en base 64 en formato de la firma original..
  • datos: Datos a firmar codificados en base 64.
  • filtroTitular: Indica el texto de filtrado del titular a utilizar para mostrar la lista de certificados con los que se firmará el contenido (según estándar RFC-2254)
  • filtroEmisor: Indica el texto de filtrado del emisor a utilizar para mostrar la lista de certificados con los que se firmará el contenido (según estándar RFC-2254)
  • filtroSoloFirma: Indica si se deben filtrar los certificados que no están diseñados para firma electrónica (true) o por el contrario se muestran todos (false).
  • firmaSalidaEnFichero: Indica si la firma resultado de la operación se va a guardar en un fichero (true) o en un string (false).
  • firmaMultiple: Indica si la firma se va a aplicar a múltiples ficheros (true) o, por el contrario, se aplica a un único fichero (false).
  • politicaFirma: Se recomienda aplicar la política de firma (true); no se aplicara política de firma en caso contrario (false). En el caso recomendado de usar la política de firma (true) se realizara los tipos de firma :
    • CAdES: La firma resultante será CAdES-EPES.
    • PAdES: La firma resultante será PAdES-BES.
    • XAdES: La firma resultante será XAdES-EPES.
  • firmarResultCallback: Función a invocar en caso de firma correcta, en esta función se tratará la firma y el certificado firmante (parte pública). 
  • firmarErrorCallback: Función a invocar en caso de firma incorrecta, en esta función se tratará el tipo de error y el mensaje de error que ha sucedido en la operación.

Por ejemplo, si queremos firmar el texto "facturación mensual" (y su codificación en base64 es "ZmFjdHVyYWNp824gbWVuc3VhbA==") con un certificado de firma (el que el usuario desee), podríamos invocar a la función de la siguiente manera:


firmar("101","ZmFjdHVyYWNp824gbWVuc3VhbA==",null,null,false,true,false,false,fOk,fError);
....

function fOk(signatures, certificates) {
  // operación realizada correctamente: tratar firmas y/o certificados firmantes
  // si se ha obtenido la firma
  if ( signatures.length > 0 ) {
    // guardar en el formulario
    var i;
    for(i=0;i!=signatures.length;i++) {
      document.getElementById("resultadoFirma").value= document.getElementById("resultadoFirma").value+signatures[i]+"\n"+"\n";
    }

    for(i=0;i!=certificates.length;i++) {
        document.getElementById("certificadoFirma").value= document.getElementById("certificadoFirma").value+certificates[i]+"\n"+"\n";
    }
 }
}

function fError(errorType, errorMessage) {
   // error en la operación: tratar el error
   if ( window.console ) {
     console.log("Type: " + errorType + "\nMessage: " + errorMessage);
   } 
}

De esta manera, tras la invocación se invocaría a "fOk" si la invocación ha sido correcta o bien a "fError" si ha sucedido algún error.

En la invocación de la función "fOk" se recibirán 2 parámetros de tipo array, en el primero las firmas realizadas y en el segundo los certificados firmantes (ambos codificados en base64).

En la invocación de la función "fError" se recibirán a su vez otros 2 parámetros, el tipo y el mensaje de error.

Por otro lado, se permite filtrar el certificado firmante según un patrón del nombre del firmante o de la autoridad certificadora, y también, según el objeto por el que el certificado fue generado. (para firma o autenticación)

Cofirmar

cofirmar(tipoFirmaValue,datos,filtroTitular,filtroEmisor,filtroSinAutenticacion,firmaSalidaEnFichero,firmaMultiple,politicaFirma,fOk,fError);

Esta función espera recibir como parámetros los mismos valores que en el apartado "Firmar".

Por ejemplo, si queremos cofirmar un documento ya firmado anteriormente, podríamos invocar a la función de la siguiente manera:

cofirmar("101",null,null,null,false,true,false,false,fOk,fError);

De esta manera, tras la invocación se invocaría a la función fOk o fError según el éxito de la invocación (si ha sido correcta "fOk" y si ha sido incorrecta "fError).

Contrafirmar

contrafirmar(tipoFirmaValue,datos,filtroTitular,filtroEmisor,filtroSinAutenticacion,firmaSalidaEnFichero,firmaMultiple,politicaFirma,fOk,fError);

Esta función espera recibir como parámetros los mismos valores que en el apartado "Firmar".

Por ejemplo, si queremos contrafirmar un documento ya firmado anteriormente, podríamos invocar a la función de la siguiente manera:

contrafirmar("101",null,null,null,false,true,false,false,fOk,fError);

De esta manera, tras la invocación se invocaría a la función fOk o fError según el éxito de la invocación (si ha sido correcta "fOk" y si ha sido incorrecta "fError).

El MiniApplet @firma es una herramienta de firma electrónica que funciona en forma de applet de Java integrado en una página Web mediante JavaScript, y es una aplicación que se ejecuta en cliente (en el ordenador del usuario, no en el servidor Web).
Por eso a partir de la versión 1.2 del MiniApplet el límite de tamaño de los documentos a firmar pasa a depender más de los recursos del equipo del usuario y la configuración de la operación de firma, pero debido a que las validaciones de las firmas contra @firma están limitadas a 7MB, no se debe utilizar el miniapplet de firma para firmar documentos mayores de este tamaño (7MB).

Migración del cliente de firma al cliente MiniApplet

Se recomienda sustituir el uso del cliente de @firma por el uso del nuevo miniapplet de @firma ya que el cliente de @firma ha sido deprecado por el Ministerio.

Hay que tener en cuenta que el miniapplet no admite firmas de tipo CMS/ PKCS#7.  

Hay que tener en cuenta que el método getCertificados utilizado en el cliente de @firma para recuperar la lista de certificados desaparece y se debe sustituir  por una  firma en cliente (realizada con el cliente de MiniApplet, es decir, en JavaScript) y su posterior verificación en el servidor (con el componente amap-firma, es decir, en Java), de esta manera el valor firmado viajará de la parte cliente a la parte servidora.

La sustitución del miniapplet supone también cambios en la parte de la invocación a los métodos de verificación de amap-firma.

Para las verificaciones de la firma (amap-firma) :  

- Solo en el caso de que la firma y la verificación de la firma se este utilizando en la fase de autenticación hay que poner en el parámetro del método de verificación la operación "autentica"

- En el caso de que se realice una verificación de una firma realizada en cliente (con certificado instalado en navegador) el parámetro operación correspondiente al método de verificación "verifica".

Ejemplo de uso de autenticación:

Parte cliente, cliente miniaplet (JavaScript)

var firmas = firmar("101","ZmFjdHVyYWNp824gbWVuc3VhbA==",null,null,false,true,false,false);

Parte servidora, cliente amap-firma (Java)

String firma =/* valor de "firmado" una vez enviado al servidor */;
String ficheroOriginal=null;
String aplicacion="aplicacion"; /* identificador de aplicación dada de alta en la plataforma de firma */
String operacion = "autentica"
TipoFirma tipoFirma = TipoFirma.CADES;
boolean attach=true;
RetornoVerificaFirma retornoVerificaFirma=firmaFacade.verificaFirmaDSS(ficheroOriginal, firma, aplicacion, operacion, tipoFirma, attach);
Certificado[] certificados = retornoVerificaFirma.getCertificados();

Migración del cliente de firma al cliente compatible con autofirma

 

En los clientes anteriores al compatible con autofirma cada función de firma (firma, cofirma y contrafirma) devolvían el resultado de la firma, a partir de esta versión se adopta un enfoque asíncrono, de tal forma que se añaden 2 métodos de callback en la invocación, uno para las invocaciones que finalicen correctamente y otro para las que finalicen incorrectamente.

De esta forma, para migrar al nuevo cliente sería necesario convertir las invocaciones actuales con la forma

...
var firmas = firmar("101","ZmFjdHVyYWNp824gbWVuc3VhbA==",null,null,false,true,false,false);
...

de la siguiente forma

...
firmar("101","ZmFjdHVyYWNp824gbWVuc3VhbA==",null,null,false,true,false,false,fOk,fError);
...

function fOk(firmas, certificadosFirmantes) {
/* tratar firmas y/o certificados firmantes */
 ....
}

function fError(errorType, errorMessage) {
 /* tratar errorres */
 ...
}

Ejemplo de uso del componente

Ejemplo sin autofirma clientefirma-4.2.0 (zip)
Ejemplo con autofirma clientefirma-autofirma-4.2.0 (zip)

Documentación de uso del componente

Ver el documento de uso del componente y el documento de  uso del cliente de firma

Creado por Administrator el 2015/05/14 09:24
© 2014 GOBIERNO DE CANTABRIA - AVISO LEGAL Y PROTECCIÓN DE DATOS