Changes between Version 3 and Version 4 of actividades_2018_pruebas


Ignore:
Timestamp:
May 30, 2018, 12:02:31 PM (6 years ago)
Author:
pbuitrago
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • actividades_2018_pruebas

    v3 v4  
    3434
    3535'''Código del formulario HTML:'''
     36
     37----
     38
    3639|| <form enctype="multipart/form-data" method="post" id="firmar" name="SignFormat">
    3740    <h2>Firmar electr&oacute;nica (PDF)</h2>
     
    5356<div id="seccion4"> </div>
    5457||
     58[[BR]]
    5559
    5660Los elementos <div> del formulario con id = "sección1", “sección2” y “sección3” se utiliza para mostrar los resultados correspondientes a los 3 procesos descritos para la firma electrónica (consumo del servicio a Murachí).
     
    5862Como se va a utilizar certificado con soporte a software se requiere tener en la pagina una sección que me permita cargar a la pagina el archivo .p12 o .pxf
    5963
    60 '''Código del formulario HTML:'''
     64'''Código del formulario HTML:''' [[BR]]
     65
    6166
    6267|| <div>
     
    6772</div>
    6873||
    69 
    70 Ahora vamos a necesitar una función en javascript que me permita usar la librería Forge para cargar y acceder al archivo .p12 o .pfx y obtener la información necesaria para realizar el proceso de firma electrónica.
    71 '''
    72 Función getCertificate(e)'''
     74[[BR]]
     75
     76Ahora vamos a necesitar una función en javascript que me permita usar la librería Forge para cargar y acceder al archivo .p12 o .pfx y obtener la información necesaria para realizar el proceso de firma electrónica.[[BR]]
     77
     78'''Función getCertificate(e)'''[[BR]]
     79
    7380
    7481|| function getCertificate(e)
     
    127134        }
    128135||
     136[[BR]]
    129137
    130138Con esta función obtenemos la clave privada almacenada en la variable privateKey y el certificado almacenado en la variable certBytesHex.
    131139
    132140La clave privada es un conjunto de bytes que debemos convertir a string, para esto se tiene la siguiente función
     141[[BR]]
    133142
    134143|| function arrayBufferToString( buffer )
     
    145154||
    146155
     156[[BR]]
    147157
    148158'''Función SignFilePDF() Sección 1. Subir documento pdf'''
     159[[BR]]
    149160
    150161En esta sección la función procesa los datos del formulario. Vamos a cargar el archivo .p12 o .pfx y usando la función getCertificate(e), y se obtiene el archivo pdf seleccionado en el formulario a través del método document.getElementById("file-sign") donde “file-sign” corresponde al id del elemento input de tipo “file” del formulario. Luego se almacena en un objeto de tipo FormData que permite el envío del archivo al servidor usando el método $.ajax
     
    157168processData: Establece si la información que se envía al servidor debe ser procesada a una cadena de caracteres. Para evitar esto se debe utilizar el valor “false”. En esta sección sólo se quiere enviar el archivo sin ser procesado.
    158169xhrFields y headers: ya indicado al principio de esta sección.
     170[[BR]]
     171
    159172Código de la función javaScript "SignFilePDF()" sección 1
    160173
    161 function SignFilePDF() {
     174----
     175
     176|| function SignFilePDF() {
    162177        //cargar el archivo .p12
    163178        getCertificate();
     
    182197        }
    183198)}
     199||
     200[[BR]]
    184201
    185202La repuesta de esta sección se procesa por el método .done a través del argumento response donde podemos acceder al valor del JSON con la función JSON.stringify.
    186203
    187 Código completo de la sección 1:
    188 
    189 <!doctype html>
     204'''Código completo de la sección 1:'''
     205[[BR]]
     206
     207----
     208
     209|| <!doctype html>
    190210<html>
    191211<head>
     
    290310    )}
    291311
     312||
     313[[BR]]
    292314
    293315La respuesta del servicio Murachí es el identificador único del archivo pdf, la respuesta es un json.
    294316
    295 Ejemplo: {"containerId":"b43ea1f0-2c1a-463e-a0b8-1804e2041f33"}
    296 
    297 Sección 2: Preparar firma del archivo
     317'''Ejemplo:''' {"containerId":"b43ea1f0-2c1a-463e-a0b8-1804e2041f33"}
     318
     319'''Sección 2: Preparar firma del archivo'''
    298320
    299321En esta sección se va a calcular el valor del hash del documento que se envió en la sección 1, en tal sentido antes del cálculo del hash se debe enviar al servidor Murachí toda la información que se agregará al documento tales como el certificado del firmante como información adicional necesaria para la firma electrónica:
     
    304326contact: corresponde a información de contacto del firmante.
    305327signatureVisible: true para mostrar un indicador visible de firma en la primera página del documento pdf y false para no mostrar un indicador visible de firma en la primera página del documento pdf.
     328
    306329El certificado lo obtuvimos en la sección anterior, en la función getCertificate(). Luego enviarlo al sistema Murachí con el metodo $.ajax usando el recurso :Murachi/0.1/archivos/pdfs
     330
     331
     332----
     333||
    307334
    308335document.getElementById("seccion1").innerHTML = responseString;
     
    335362                        }
    336363    )}
     364||
    337365
    338366Si la petición tiene éxito la repuesta de esta sección se procesa a través de la función success: donde se le pase tres parámetros, data: que corresponde al resultado de la petición formateado según el valor del parámetro dataType (respuesta del servidor), textStatus: que corresponde a una cadena que describe el estado y jpXHR: que es un objeto que permite ejecutar varias funciones.
    339367
    340 Código completo de la sección 2
     368'''Código completo de la sección 2'''
     369
     370
     371----
     372
     373||
    341374
    342375<!doctype html>
     
    468501           }
    469502    )}
     503||
    470504
    471505
    472506La respuesta del sistema Murachí es el valor del hash del archivo pdf que se subió al servidor en la sección 1.
    473507
    474 Ejemplo :{"hash":"a3fbfc857e0796b5e5e9fdb8e3183d8e532afe0fe662f3a24eb459f0c22bd472","error":""}
    475 
    476 Sección 3: Completar la firma del archivo
     508Ejemplo :{"hash":"a3fbfc857e0796b5e5e9fdb8e3183d8e532afe0fe662f3a24eb459f0c22bd472","error":""}[[BR]]
     509
     510'''
     511Sección 3: Completar la firma del archivo'''[[BR]]
     512
    477513
    478514En esta sección se firma el hash del documento a firmar con el certificado firmante almacenado en el archivo .p12 o .pfx. En tal sentido partimos desde el resultado que obtuvimos en la sección 2 (el valor del hash del archivo pdf).
    479 La firma del hash, en particular se esta probando tres librerias javaScripts y luego se envía el hash cifrado con el método $.ajax al sistema Murachí para completar la firma del archivo pdf
     515La firma del hash, en particular se esta probando tres librerias javaScripts '''forge''', '''hwcrypto''' y  '''crypto'''
     516
     517luego se envía el hash cifrado con el método $.ajax al sistema Murachí para completar la firma del archivo pdf