ctt-gob-es / clienteafirma

Cliente @firma
http://administracionelectronica.gob.es/ctt/clienteafirma
254 stars 119 forks source link

Error al identificar PDF. Se identifican como binario. #318

Open fmmanso opened 1 year ago

fmmanso commented 1 year ago

Hemos detectado que cuando se hace uso de la aplicación Autofirma v1.7.2 para la firman las facturas a veces se produce un error. Estas facturas llegan en formato pdf y se ha detectado que algunos de los pdfs que se reciben no es posible firmarlos. En concreto el problema es que no los identifica como pdf sino como fichero binario. Sin embargo los ficheros sí se pueden abrir con Acrobat sin problema alguno.

Se han activado los logs de la aplicación Autofirma y se ha visto el siguiente mensaje:

2023-03-16T14:35:19.795446400Z 1678977319795 446400 5013 es.gob.afirma WARNING es.gob.afirma.core.misc.MimeHelper <init> 23 No se pudo detectar el formato de los datos

Se ha procedido a abrir los fichero para analizar el contenido y se ha identificado que aquellos que no se reconocen como pdf tienen una cabecera distinta a aquellos que funcionan, tienen cabeceras de este estilo:

--F2B80151804830459D127FA Content-Length: 43346 Content-Type: application/pdf X-Content-Length: 43346 X-compId: data X-compDateC: 2023-02-07 X-compTimeC: 13:10:58 X-compDateM: 2023-02-07 X-compTimeM: 14:17:02 X-compStatus: online X-pVersion: 0047 X-compVers: 1 X-isAddon: 0 X-volName: VGSCENBDCPA %PDF-1.3

Los ficheros se han abierto desde Acrobat Reader y también por programación mediante java y no dan error alguno. Se identifican y se accede a ellos correctamente. La solución sencilla sería eliminar esas cabeceras antes de firmarlas mediante un programa que se realizase, pero la facturas ya no tendrían validez al ser distintas a las recibidas. Por todo ello solicito su ayuda ¿Se puede solucionar de alguna forma?

Añado más información técnica: internos.zip

Haciendo uso de GitHub y la publicación del código hemos visto que la librería afirma-core es la que contiene la clase es.gob.afirma.core.misc.MimeHelper. Esta clase hace uso de la clase net.sf.jmimemagic.MagicMatch para verificar el tipo de fichero. Se ha realizado un programa que hace uso de la clase MagicMatch y ésta no reconoce como pdf aquellos que contienen las cabecera indicada más arriba.

Adjunto envío dos pdf de ejemplo, si se abren desde Autofirma uno se identifica como pdf y el otro como binario, la diferencia son las cabeceras indicadas. Tambié una imagen con la información que indica Autofirma, tanto para la versión 1.7.2 como para la versión 1.6.5: