Leyendo numero de serie de .cer (Para facturacion electronica)

Este es mi codigo:

import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
.........
........
........

InputStream is = new FileInputStream(archivo);
             CertificateFactory cf = CertificateFactory.getInstance("X.509");
            certificado=(X509Certificate)cf.generateCertificate(is);
            certificado.getSerialNumber();

El numero que obtengo es 292233162870206001759766198388986002352876564528

Sin embargo, cuando abro el archivo .cert manualmente consigo lo siguiente en el apartado de Serial Number :

Serial Number:
33:30:30:30:31:30:30:30:30:30:30:31:30:30:30:30:30:38:30:30

Estoy usando los certificados de prueba que ofrece el SAT. ¿Que es lo que estoy haciendo mal?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

bytes

El SAT codifica mal el número de serie porque lo meten como texto, y debería ir como un entero sin signo. Según yo en Java el número de serie es un BigInteger; simplemente obtén los bytes del BigInteger y crea una cadena con eso, y obtienes el verdadero número de serie.

En tu ejemplo, el número de serie es 30001000000100000800 (está en hexadecimal, 0x33 es el "3" en ASCII, 0x30 es "0", etc).

Funciona!

Gracias ezamudio, tienes razon. Es tan sencillo como:

byte[] byteArray= certificado.getSerialNumber().toByteArray();
            String value = new String(byteArray);

Ahora la duda es: ¿El SAT siempre emite los certificados malformados? ¿Con esta solucion bastara para el futuro?

Imagen de ezamudio

pregunta al SAT

Yo estuve lidiando con certificados del SAT hace como 7 años y ya venían así, y los que emiten ahorita siguen siendo así (me di cuenta al leer mi FIEL con Java).