Cinque Terre

Saltar la navegación

Contenido 3. Verificar Firma Electrónica

Objetivos

En esta sección tiene como objetivo realizar un ejercicio practico del consumo del servicio verificar firma electrónica PDF.

Conocimiento previo

  • Manejo de protocolo web
  • Nociones básicas de programación
  • Programación web

Actividad

Realización de la verificación de una firma electrónica PDF:

Para este ejercicio se genera un formulario desde una página HTML que permita cargar y enviar un archivo PDF firmado al servicio de Murachí.
En esta sección se requiere de un formulario que permita tomar del sistema de archivo solo documentos PDF y luego enviarlos al sistema Murachí usando el método $.ajax

Característica del formulario HTML

Control:

  • Botón de envío (Submit button)

  • Botón de reinicializando (Reset button)

  • Selección de fichero (file select)

Atributos:

  • action: Función de javaScript que procesa el formulario para esta sección la función es “verifySing()”

  • enctype: Este atributo específica el tipo de contenido que será usado para enviar los datos al servidor, para esta sección se utilizará “multipart/form-data”


Código del formulario HTML

<h2>Verificar la firma electr&oacute;nica</h2>
<form enctype="multipart/form-data" action="javaScript:verifySing()" method="post" id="verificar">
    <br>
    <input id="file-check-sign" class="file" type="file" data-min-file-count="1" name="upload" accept=".pdf">
    <br>
    <button type="submit" class="btn btn-primary">Enviar</button>
    <button type="reset" id="resetVerificacion" class="btn btn-default">Limpiar</button>
    <br>
    <div id="respuestaVerificacion"> </div>
</form>

El elemento <div> del formulario con id = "respuestaVerificacion" se utiliza para presentar el resultado luego de procesar el formulario (consumo del servicio a Murachí)



Función javaScript verifySing()


En esta sección la función procesa los datos del formulario. En tal sentido, primero se obtiene el archivo seleccionado en el formulario a través del método document.getElementById("file-check-sign") donde “file-check-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

Opciones de configuración de la petición:
  • ulr: Establece la URL en donde se realiza la petición, para esta sección es "https://murachi.cenditel.gob.ve/Murachi/0.1/archivos/firmados"
  • type: Establece el tipo de petición, para esta actividad vamos a utilizar "POST"
  • dataType: Establece el formato de la respuesta que es permitido, si el servidor devuelve información con un formato diferente al especificado el código fallará. Para este proceso se establece “json”.
  • data: Establece la información que se enviará al servidor. Para este proceso se envía el archivo almacenado en una variable de tipo FormaData.    
  • contentType: Establece el tipo de codificación que se va a utilizar, para esta sección es "application/json"
  • xhrFields y headers: ya indicado al principio de esta sección.

Código de la función javaScript "version_Murachi”

function verifySing() {
    var formData = new FormData();
    formData.append("upload", $("#file-check-sign")[0].files[0]);
    $.ajax({
        url: "https://murachi.cenditel.gob.ve/Murachi/0.1/archivos/firmados",
        xhrFields: {withCredentials: true},
        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
        type: "post",
        dataType: "json",
        data: formData,
        cache: false,
        contentType: false,
        processData: false,                             
        success: function(response) {
    var responseString = JSON.stringify(response);
    document.getElementById("respuestaVerificacion").innerHTML = responseString;
            }, error: function(response) {
               $("#respuestaVerificacion").html('Error...!!!');
               }
       });
}

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.

Código completo

<html>
<head>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
    
function verifySing() {
    var formData = new FormData();
    formData.append("upload", $("#file-check-sign")[0].files[0]);
    $.ajax({
        url: "https://murachi.cenditel.gob.ve/Murachi/0.1/archivos/firmados",
        xhrFields: {withCredentials: true},
        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
        type: "post",
        dataType: "json",
        data: formData,
        cache: false,
        contentType: false,
        processData: false,                             
        success: function(response) {
    var responseString = JSON.stringify(response);
    document.getElementById("respuestaVerificacion").innerHTML = responseString;
            }, error: function(response) {
               $("#respuestaVerificacion").html('Error...!!!');
               }
       });
    
}
</script>
</head>
<body>
<h2>Verificar la firma electr&oacute;nica</h2>
<form enctype="multipart/form-data" action="javaScript:verifySing()" method="post" id="verificar">
    <br>
    <input id="file-check-sign" class="file" type="file" data-min-file-count="1" name="upload" accept=".pdf">
    <br>
    <button type="submit" class="btn btn-primary">Enviar</button>
    <button type="reset" id="resetVerificacion" class="btn btn-default">Limpiar</button>
    <br>
    <div id="respuestaVerificacion"> </div>
</form>
</body>
</html>

La respuesta del servicio Murachí es un Json con la información de la(s) firma(s) electrónica(s) del archivo PDF que subió al sistema.

Ejempĺo:

{"fileId":"2c6813f5-a4bd-49f5-93f2-b5d904fa5f9a","fileExist":"true","numberOfSignatures":1,"signatures":[{"signatureType":"approval","signedOn":"22-05-201714:26:29.00","integrityCheck":"true","timeStamp":"null",
"reason":"Certificado","location":"CENDITEL","alternativeNameOfTheSigner":"",
"signerCertificateValidFrom":"2015-06-03 20:00:00.00","signerCertificateStillValid":"true",
"signatureCoversWholeDocument":"true","filterSubtype":"adbe.pkcs7.detached",
"signerCertificateSubject":"C=VE,ST=Merida,L=Merida,O=CENDITEL,OU=GIDSI,CN=Pedro Buitrago,E=pbuitrago@cenditel.gob.ve",
"signerCertificateValidAtTimeOfSigning":"true", "encryptionAlgorithm":"RSA", "timeStampService":"null", "digestAlgorithm":"SHA256","certificatesVerifiedAgainstTheKeyStore":"true",
"documentRevision":"1","nameOfTheSigner":"Pedro Buitrago","totalDocumentRevisions":"1",
"contactInfo":"582746574336", "timeStampVerified":"null", "signerCertificateIssuer":"C=VE,ST=Merida,L=Merida,
O=CENDITEL,OU=GIDSI, CN=Autoridad de Certificación del GIDSI,E=acgidsi@cenditel.gob.ve",
"signerCertificateValidTo":"2017-06-03 19:59:59.00"}], "mimeType":"application/pdf"}

Puede descargar el código desde el siguiente enlace: VerificarFirmaPDF.html

Obra Publicada con Licencia Creative Commons Reconocimiento – No Comercial – Compartir Igual – 3.0 Venezuela (https://creativecommons.org/licenses/by-nc-sa/3.0/ve/deed.es_ES)

Material Educativo basado en los resultados del proceso de investigación y desarrollo del Proyecto Seguridad Informática de la Fundación Centro Nacional de Desarrollo e Investigación en Tecnologías Libres (CENDITEL), ente adscrito al Ministerio del Poder para Educación Universitaria, Ciencia y Tecnología, ubicada en Mérida – Venezuela.