Changes between Version 3 and Version 4 of actividades_2018_pruebas
- Timestamp:
- May 30, 2018, 12:02:31 PM (6 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
actividades_2018_pruebas
v3 v4 34 34 35 35 '''Código del formulario HTML:''' 36 37 ---- 38 36 39 || <form enctype="multipart/form-data" method="post" id="firmar" name="SignFormat"> 37 40 <h2>Firmar electrónica (PDF)</h2> … … 53 56 <div id="seccion4"> </div> 54 57 || 58 [[BR]] 55 59 56 60 Los 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í). … … 58 62 Como 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 59 63 60 '''Código del formulario HTML:''' 64 '''Código del formulario HTML:''' [[BR]] 65 61 66 62 67 || <div> … … 67 72 </div> 68 73 || 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 76 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.[[BR]] 77 78 '''Función getCertificate(e)'''[[BR]] 79 73 80 74 81 || function getCertificate(e) … … 127 134 } 128 135 || 136 [[BR]] 129 137 130 138 Con esta función obtenemos la clave privada almacenada en la variable privateKey y el certificado almacenado en la variable certBytesHex. 131 139 132 140 La clave privada es un conjunto de bytes que debemos convertir a string, para esto se tiene la siguiente función 141 [[BR]] 133 142 134 143 || function arrayBufferToString( buffer ) … … 145 154 || 146 155 156 [[BR]] 147 157 148 158 '''Función SignFilePDF() Sección 1. Subir documento pdf''' 159 [[BR]] 149 160 150 161 En 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 … … 157 168 processData: 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. 158 169 xhrFields y headers: ya indicado al principio de esta sección. 170 [[BR]] 171 159 172 Código de la función javaScript "SignFilePDF()" sección 1 160 173 161 function SignFilePDF() { 174 ---- 175 176 || function SignFilePDF() { 162 177 //cargar el archivo .p12 163 178 getCertificate(); … … 182 197 } 183 198 )} 199 || 200 [[BR]] 184 201 185 202 La 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. 186 203 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> 190 210 <html> 191 211 <head> … … 290 310 )} 291 311 312 || 313 [[BR]] 292 314 293 315 La respuesta del servicio Murachí es el identificador único del archivo pdf, la respuesta es un json. 294 316 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''' 298 320 299 321 En 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: … … 304 326 contact: corresponde a información de contacto del firmante. 305 327 signatureVisible: 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 306 329 El 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 || 307 334 308 335 document.getElementById("seccion1").innerHTML = responseString; … … 335 362 } 336 363 )} 364 || 337 365 338 366 Si 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. 339 367 340 Código completo de la sección 2 368 '''Código completo de la sección 2''' 369 370 371 ---- 372 373 || 341 374 342 375 <!doctype html> … … 468 501 } 469 502 )} 503 || 470 504 471 505 472 506 La respuesta del sistema Murachí es el valor del hash del archivo pdf que se subió al servidor en la sección 1. 473 507 474 Ejemplo :{"hash":"a3fbfc857e0796b5e5e9fdb8e3183d8e532afe0fe662f3a24eb459f0c22bd472","error":""} 475 476 Sección 3: Completar la firma del archivo 508 Ejemplo :{"hash":"a3fbfc857e0796b5e5e9fdb8e3183d8e532afe0fe662f3a24eb459f0c22bd472","error":""}[[BR]] 509 510 ''' 511 Sección 3: Completar la firma del archivo'''[[BR]] 512 477 513 478 514 En 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 515 La firma del hash, en particular se esta probando tres librerias javaScripts '''forge''', '''hwcrypto''' y '''crypto''' 516 517 luego se envía el hash cifrado con el método $.ajax al sistema Murachí para completar la firma del archivo pdf