Java - Firma electronica xml con Xades-EPES

 
Vista:
sin imagen de perfil

Firma electronica xml con Xades-EPES

Publicado por Juan José (2 intervenciones) el 31/08/2017 18:38:30
Cordial saludo,
Estoy tratando de firmar un documento xml usando la especificación Xades-EPES. He buscado en internet y he encontrado que se puede usar la librería Xades4j pero no estoy seguro de como emplearla y sus archivos tes unit no son comprensibles para mi. He buscado bastante pero no he encontrado un ejemplo comprensible para firmar un xml usando esta librería.

Si alguien tiene experiencia en firma de documentos xml con esta especificación agradecería su ayuda.

P.D
Esto es algo que intenté hacer siguiendo la documentación https://github.com/luisgoncalves/xades4j/wiki/SignatureProduction:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class Main {
 
    private static final String CERT_FOLDER = "/home/jperez/Documentos/factura_electronica";
    private static final String CERT        = "cert.pm";
    private static final String KEY_STORE   = "KeyStore";
    private static final String PASS        = "summan"; //the same in cert and keystorage
 
    private static final String TSA_URL     = "http://XXX.XXX.XXX/ts.inx";
    private static final String TSA_USER    = "XXXXXXXX";
    private static final String TSA_PASS    = "XXXXXXXX";
 
    private static final String UNSIGNED    = "/home/jperez/Documentos/factura_electronica/unsigned.xml";
    private static final String SIGNED      = "/home/jperez/Documentos/factura_electronica/signed-epes.xml";
    private static final String SIGNEDT     = "/home/jperez/Documentos/factura_electronica/signed-t-epess.xml";
    private static final String VERIFY      = "/home/jperez/Documentos/factura_electronica/verify-epess.txt";
    private static final String VERIFYT     = "/home/jperez/Documentos/factura_electronica/verify-t-epes.txt";
    private static final String DOCUMENT    = "/home/jperez/Documentos/valid0.xml";
    private static final String DOCSIGNED   = "/home/jperez/Documentos/factura_electronica/signed.epes.xml";
 
    public static void main(String[] args) throws Exception {
        System.out.println("______________________");
        System.out.println("\tSign");
        System.out.println("______________________");
        signBes();
 
        System.out.println("______________________");
        System.out.println("\tVerify");
        System.out.println("______________________");
        verifyBes();
 
    }
 
    private static void signBes() throws Exception {
        Document doc = DocumentBuilderFactory
                .newInstance()
                .newDocumentBuilder()
                .parse(new File(DOCUMENT));
        Element elem = doc.getDocumentElement();
        DOMHelper.useIdAsXmlId(elem);
 
 
        KeyingDataProvider kdp = new FileSystemKeyStoreKeyingDataProvider(
                "JKS",
                CERT_FOLDER + CERT,
                new FirstCertificateSelector(),
                new DirectPasswordProvider(PASS),
                new DirectPasswordProvider(PASS),
                true);
        DataObjectDesc obj = new DataObjectReference("#" + elem.getAttribute("Id"))
                .withTransform(new EnvelopedSignatureTransform());
        SignedDataObjects dataObjs = new SignedDataObjects().withSignedDataObject(obj);
 
        XadesSigner signer = new XadesBesSigningProfile(kdp).newSigner();
        signer.sign(dataObjs, elem);
 
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File(SIGNED));
        transformer.transform(source, result);
    }

pero esto genera un error que no sé a que se debe.

[Exception in thread "main" java.lang.NoClassDefFoundError: xades4j/providers/impl/FirstCertificateSelector
at Signer.Main.signBes(Main.java:91)
at Signer.Main.main(Main.java:70)
Caused by: java.lang.ClassNotFoundException: xades4j.providers.impl.FirstCertificateSelector
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Firma electronica xml con Xades-EPES

Publicado por Byron (1 intervención) el 13/09/2017 00:31:36
Hola, estoy realizando lo mismo buscando un código que permita realizar la firma de un xml en formato Xades-EPES.

Con respecto al error al parecer te falta una clase java.lang.NoClassDefFoundError: xades4j/providers/impl/FirstCertificateSelector

Te recomendaría que descargues el proyecto de git y realices la generación del jar y lo pongas como dependencia en tu proyecto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Firma electronica xml con Xades-EPES

Publicado por Juan Jose (2 intervenciones) el 12/10/2017 00:33:49
Hola, lamento la tardanza, he tenido bastante inconvenientes y apenas puede retomar el proyecto. Lo que dices funcionó pero me han salido varios mensajes de error:

Exception in thread "main" xades4j.verification.UnexpectedJCAException: The keystore couldn't be initialized
at xades4j.providers.impl.KeyStoreKeyingDataProvider.ensureInitialized(KeyStoreKeyingDataProvider.java:179)
at xades4j.providers.impl.KeyStoreKeyingDataProvider.getSigningCertificateChain(KeyStoreKeyingDataProvider.java:189)
at xades4j.production.SignerBES.sign(SignerBES.java:158)
at xades4j.production.SignerBES.sign(SignerBES.java:129)
at facturaelectronica.Firma.signBes(Firma.java:79)
at facturaelectronica.Firma.main(Firma.java:49)
Caused by: java.security.KeyStoreException: KeyStore instantiation failed
at java.security.KeyStore$Builder$FileBuilder.getKeyStore(KeyStore.java:1862)
at xades4j.providers.impl.KeyStoreKeyingDataProvider.ensureInitialized(KeyStoreKeyingDataProvider.java:175)
... 5 more
Caused by: java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)
at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)
at java.security.KeyStore.load(KeyStore.java:1445)
at java.security.KeyStore$Builder$FileBuilder$1.run0(KeyStore.java:1848)
at java.security.KeyStore$Builder$FileBuilder$1.run(KeyStore.java:1807)
at java.security.KeyStore$Builder$FileBuilder$1.run(KeyStore.java:1796)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.KeyStore$Builder$FileBuilder.getKeyStore(KeyStore.java:1858)
... 6 more

No sé si tu pudiste adelantar algo mas y me pudieras dar un ejemplo para firmar un documento con Xades-Epes.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Firma electronica xml con Xades-EPES

Publicado por Armand Castel (3 intervenciones) el 07/06/2018 19:08:54
Muy buenos dias estimados me encuentro incursionando en la programacion en java y estoy desarrollando un proyecto de facturacion pero me encuentro en la fase de generar el documento xml(generarlo sin las firmas y certificados... y de antemado comento que los datos los tengo almacenados en una BD(para generar los reportes impresos)...) si me pudiesen indicar alguna fuente para instruirme mas y lograr generar dicho xml ya que investigando he encontrado bastante informacion pero de poco o nada me ha servido...

Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 166
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Firma electronica xml con Xades-EPES

Publicado por Cesar (52 intervenciones) el 07/06/2018 19:18:40
Hola.

Necesitas ser mas especifico.

¿Facturacion electronica de que pais?

Si es México, y fuera en C#, yo te puedo ayudar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Firma electronica xml con Xades-EPES

Publicado por Armand Castel (3 intervenciones) el 10/06/2018 07:33:44
Estimado primero que todo muy agradecido por su respuesta... es de ecuador... la verdad de C# no conozco nada... pero con todo buscare infermacion sobre ese lenguaje...

Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar