dpineda / factura-electronica

Automatically exported from code.google.com/p/factura-electronica
Apache License 2.0
0 stars 0 forks source link

Comprobante valido no reconocido <Invalid signature> #58

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Buenas tardes intento validar el cfd que adjunto a continuación y me aparece 
el error 

        java.lang.Exception: Invalid signature

Cuando valido este mismo comprobante en otro 3 validadores distintos a este me 
aparece que esta correcto. ¿A que se debe que no lo pase por válido?
¿A que se refiere esta exception? ¿Podrían decirme donde esta el error de mi 
comprobante?
Cabe señalar que poseia una addenda y se la quite.

Les agradezco mucho su tiempo y atención.

Original issue reported on code.google.com by garciacr...@gmail.com on 8 May 2012 at 6:54

Attachments:

GoogleCodeExporter commented 9 years ago
si no me equivoco esta excepción sale de la siguiente parte del código:

public void verificar() throws Exception {
    String certStr = document.getCertificado();
    Base64 b64 = new Base64();
    byte[] cbs = b64.decode(certStr);
    X509Certificate cert = KeyLoader
      .loadX509Certificate(new ByteArrayInputStream(cbs)); 
    verificar(cert);
  }

  public void verificar(Certificate cert) throws Exception {
    String sigStr = document.getSello();
    Base64 b64 = new Base64();
    byte[] signature = b64.decode(sigStr); 
    byte[] bytes = getOriginalBytes();
    boolean md5 = true;
    if (getYear() < 2011) {
      Signature sig = Signature.getInstance("MD5withRSA");
      sig.initVerify(cert);
      sig.update(bytes);
      try {
        sig.verify(signature);
      } catch (SignatureException e){
        // Not MD5
        md5 = false;
      }
    } 
    if (getYear() > 2010 || !md5) {
        System.out.println("AÑO MAYOR A 2010 - " + getYear());
      Signature sig = Signature.getInstance("SHA1withRSA");
      sig.initVerify(cert);
      sig.update(bytes);
      boolean bool = sig.verify(signature);
      if (!bool) {
        throw new Exception("Invalid signature");
      }
    }
  }

Que hay de diferencia en su verificación del sello digital con respecto al 
validador de sat, ya que este sello según el sat es válido... debo considerar 
indudablemente  que la fatura posee un sello inválido y decirle a mi cliente 
que no la acepte? Agradecería su pronta respuesta puesto que me urge un poco.

Les mando un saludo :)

Original comment by garciacr...@gmail.com on 8 May 2012 at 11:18

GoogleCodeExporter commented 9 years ago
Otra duda, la verificación/generación del sello se hace respecto a la cadena 
original o a su certificado? la pregunta es por lo que puedo leer de su código 
de verificación en el que utilizan el sello y el certificado.

Gracias :)

Original comment by garciacr...@gmail.com on 8 May 2012 at 11:25

GoogleCodeExporter commented 9 years ago
Disulpen en su encriptacion y desencriptacion utilizan SHA1withRSA, SHA1withRSA 
es lo mismo que SHA1? y de no ser asi, por qué se uso ese en vez del SHA1? 
Todo debido a mi mismo problema de que me aparece el sello invalido cuando en 
otro validadores si lo es. Les agradezo de antemano y espero puedan ayudarme.

Original comment by garciacr...@gmail.com on 9 May 2012 at 5:24

GoogleCodeExporter commented 9 years ago
Hola que tal, comparto una pronta posible respuesta a tu pregunta, he tenido el 
mismo problema con diferentes comprobantes y lo que puedo detectar es que lo 
que te está afectando, sea la transformación de las cantidades manejadas 
dentro de tu comprobantes, las cuáles, contienen ceros a la izquierda! 

Saludos.

Original comment by jcaflori...@gmail.com on 14 May 2012 at 3:23

GoogleCodeExporter commented 9 years ago
Hola! 
Antes que nada muchisimas gracias por tu respuesta. Le he quitado literalmente 
en al archivo xml los ceros a los comprobantes y aun así me sigue marcando 
invalid signature, no se si se deba generar el cfd desde el principio. Cabe 
mencionar que este comprobante no lo he generado yo, simplemente recibo las 
facturas en formatdo xml ya que el proyecto que me encuentro desarrollando es 
un validador de cfds y cfdis. 
Disculpa la molestia pero me gustaría preguntarte si es correcto que a mi 
cliente le entreguen estos comprobantes con ceros a la izq o si puedo y debo 
decirle que le pida por favor a sus proveedores que no ingresen dichos ceros 
para que puedan ser validados.

Te reitero mis agradecimientos por tu ayuda. Buena día :) 

Original comment by garciacr...@gmail.com on 14 May 2012 at 3:17

GoogleCodeExporter commented 9 years ago
Jejejeje, al modificar manualmente un comprobante digital, automáticamente 
estás rompiendo o quebrantando el sello de autenticidad del mismo, éste, debe 
ser generado nuevamente pero sin esos ceros. Respecto a lo que me comentas, he 
estado investigando y  Hacienda no ha dicho que éstos sean inválidos, por tal 
motivo, se deberían de aceptar aunque técnicamente estén mal.

Lo que te recomiendo es que si tienen la posibilidad de volver a generarlo sin 
ceros a la izquierda, lo generen y lo valides!

Saludos.

Original comment by jcaflori...@gmail.com on 15 May 2012 at 2:20

GoogleCodeExporter commented 9 years ago
Oki. Pues muchisimas gracias por la información y el tiempo. Que tengas buen 
día. Saludos :)

Original comment by garciacr...@gmail.com on 15 May 2012 at 5:47

GoogleCodeExporter commented 9 years ago
@jcafloriano, gracias por la información. Me parece que para evitar el 
problema el sistema debería de procesar los campos numéricos como cadenas de 
caracteres y no convertirlos a tipos numéricos.

Voy a pensar una solución para este problema.

Saludos

Original comment by bigdata.mx on 15 May 2012 at 6:56

GoogleCodeExporter commented 9 years ago
La librería de factura-electronica ha sido migrada a GitHub para facilitar la 
colaboración.

Los temas han sido migrados a 

https://github.com/bigdata-mx/factura-electronica/issues/

Visítanos!

Original comment by bigdata.mx on 21 Oct 2012 at 5:51