Con IvSign es posible verificar un archivo PDF firmado para confirmar su integridad, su validez, las firmas que contiene y la validez de las mismas
Como siempre, primero necesitamos autenticarnos y obtener un token de sesión:
Ejecutar en una consola (sustituyendo los datos en azul por los datos recibidos en el correo electrónico)
curl -sS –user-agent WebSend –header ‘Content-Type: application/json’ –header ‘Accept: application/json’ –request POST –data ‘{«login»:»USUARIO«,»pass»:»PASSWORD«,»orgaid»:»ORGAID«,»module»:»integra»,»modkey»:»K#t@g-n2a_d[3-G1″,»modver»:»1.0″}’ https://test.ivsign.net/Keyman/rest/v4/Auth/Login
RESPUESTA:
{
"token":"KOCisd+DfGFOzcTxGwcthUsNQl0jaRFKUrrlB2OUPs0tNTIfORd7/zW1e8mb0iHuUMBuHitlLU8hewG/mJfFczw==",
"user":{"userid":"ivsdemo","extid":null,"orgaid":"orgademo","email":"demomail@ivnosys.com","name":"Usuario","lastname":"Demostraciones","lastip":"42.0.1.59","ident":null,"disabled":false,"createdate":"2019-03-11T13:54:55Z","lastlogin":"2019-03-11T14:02:34.9055158Z","previouslogin":null,"authprovider":"db","admin":false,"superadmin":false,"pass":null,"validation":null,"lang":"es","valid":true,"phone":null,"orgachain":"root.integra.orgademo.","disabledreason":null},
"error":{"code":"K0000","message":"OK","traceid":"CIK4QZVHU5V7G"}
}
Necesitaremos el token devuelto en la llamada anterior (en azul) y el documento PDF firmado en base64 (Aquí un ejemplo)
A continuación podemos realizar la llamada para verificar el documento.
curl -sS --user-agent WebSend --header 'Accept: application/json' --header 'Authentication: TOKEN' --header 'Content-Type: application/json' --request POST --data '{"document":"DocumentoPDFenBase64"}' https://test.ivsign.net/Keyman/rest/v4/verify/pades
Respuesta obtenida del servicio de verificación:
{
"error": {
"code": "K0000",
"message": "OK",
"traceid": "CIK4Q545SOPZC"
},
"valid": true,
"signatures": [
{
"certificatevalidation": {
"certinfo": {
"serial": "4330BCC6ACFE64605AC73C528A4BEAA3",
"validfrom": "2018-04-06T11:22:25+02:00",
"validto": "2021-02-26T23:59:59+01:00",
"issuer": "CN=AC DNIE 001, OU=DNIE, O=DIRECCION GENERAL DE LA POLICIA, C=ES",
"issuercn": "AC DNIE 001",
"subject": "CN=\"Ficticio Activo, Ciudadano (FIRMA)\", G=Ciudadano, SN=Ficticio, SERIALNUMBER=99999018D, C=ES",
"subjectcn": "Ficticio Activo, Ciudadano (FIRMA)",
"subjectcountry": "ES",
"signalg": "sha256RSA",
"keyusage": [
"NonRepudiation"
],
"enhancedkeyusage": [],
"caname": "DGP",
"type": "PF",
"userinfo": {
"name": "Ciudadano",
"lastname": "Ficticio",
"ident": "99999018D",
"email": null,
"birthdate": null
},
"orgainfo": {
"ident": null,
"name": null
},
"qualified": false,
"qualifiedclassification": 0,
"sha1sum": "4812E1518AD027A6ED8FCE38CA749ED6FE60363A",
"sha1sumissuer": "41CF9EC0733D58E43997A6C65DF797C3EE99407B"
},
"expired": false,
"untrusted": false,
"revoked": false,
"invalidsignature": false,
"valid": true,
"error": {
"code": "K0000",
"message": "OK",
"traceid": "CIK4Q545SOPZC"
}
},
"signatureid": "Signature1",
"valid": true,
"integrity": true,
"profile": "Basic",
"extensions": "epes",
"envelop": "Enveloped",
"cer": "MIIFMjCCBBqgAwIBAgIQQzC8xqz+ZGBaxzxSikvqozANBgkqhkiG9w0BAQsFADBcMQswCQYDVQQGEwJFUzEoMCYGA1UECgwfRElSRUNDSU9OIEdFTkVSQUwgREUgTEEgUE9MSUNJQTENMAsGA1UECwwERE5JRTEUMBIGA1UEAwwLQUMgRE5JRSAwMDEwHhcNMTgwNDA2MDkyMjI1WhcNMjEwMjI2MjI1OTU5WjB1MQswCQYDVQQGEwJFUzESMBAGA1UEBRMJOTk5OTkwMThEMREwDwYDVQQEDAhGaWN0aWNpbzESMBAGA1UEKgwJQ2l1ZGFkYW5vMSswKQYDVQQDDCJGaWN0aWNpbyBBY3Rpdm8sIENpdWRhZGFubyAoRklSTUEpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvy+Vgy//4S+0tSGTRHgAeK8nzR4xYm5eGWA3LOaVsaF80hfcmwUAhfxGM4zIEhNz2fSIqSf3ckxnzXeirxLlNgjsM+uyCc+xjiF9PaJp3i7HPQ6c8F3VN/ig+0jURgQ4sFd8nymUOqGBsDRTzVlXNW0GbM/R1P4nNR6oQTwSCXZztp6sfWI9HlA2aEqzuxI+wl/ccwMG7mc4O+T5Jbm7oJ59SNDPceXlmnA1zkHLL1U/2pWqtXevBnD5tD48ywtj1uIqko/vqC4oUV5WOfcYcZFDM9+Y17sCX/ylHNrhI5QIGM7DVMXNYpM6Pnsl/A/bmZ86AdfKqUFrXlDT2joM5QIDAQABo4IB1TCCAdEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUtGpuINaPSc4CPd2yEFF2oGt5w1EwHwYDVR0jBBgwFoAUGomoxe6Pdl1VcYnzOzW9qgUAlW8wgZAGCCsGAQUFBwEDBIGDMIGAMAgGBgQAjkYBATAIBgYEAI5GAQQwEwYGBACORgEGMAkGBwQAjkYBBgEwSAYGBACORgEFMD4wHRYXaHR0cHM6Ly93d3cuZG5pZS5lcy9wZHMTAmVuMB0WF2h0dHBzOi8vd3d3LmRuaWUuZXMvcGRzEwJlczALBgYEAI5GAQMCAQ8wXwYIKwYBBQUHAQEEUzBRMB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5kbmllLmVzMC4GCCsGAQUFBzAChiJodHRwOi8vd3d3LmRuaWUuZXMvY2VydHMvQUMwMDEuY3J0MH0GA1UdIAR2MHQwcgYIYIVUAQICAgMwZjAiBggrBgEFBQcCARYWaHR0cDovL3d3dy5kbmllLmVzL2RwYzBABggrBgEFBQcCAjA0DDJESVJFQ0NJw5NOIEdFTkVSQUwgREUgTEEgUE9MSUPDjUEsIFZBVEVTLVMyODE2MDE1SDAOBgNVHQ8BAf8EBAMCBkAwDQYJKoZIhvcNAQELBQADggEBAKDWHwOakHTzfcQ+NFrZQW1ymSgglQK8B0TDJl5CRA0maDcrF1lqiiBTmSQ7yLTCfVnt0mnRxWXSeN5g35CkhGBtqm0PmDdSDn1aASAx1oU3P8L4LwkZOgWqzK84sz0OJriPBJJIrdSAmFS6kk99lYKw2erLZXuVnXyi7NEvARw5gp0LJA90WC8BG0UAjc0j2xg6tfU+h4s/OAD6iisWpmHgvYW5WmoTbJ1ZJdYbimBGWjTnf7umTAXhso6W+mugMoVTA/v7Q2a07aT2byrehghrcIlVkAjnd4A7MXjEXRXrUfKuc+Gumdl8cyftyM3DE7IZtUoX1uPjpwKWizEuafk=",
"signingtime": "2019-03-12T09:18:00",
"hashalgorithm": "SHA1",
"timestamps": null,
"validationtimestamps": null
}
]
}
Y con esto podremos obtener toda la información relevante de un documento PDF firmado, y si es completamente válido; de no serlo, se indicarían los motivos por los que no lo es (problemas con el certificado firmante, integridad del documento, corrupción en la firma, etc…)