« Volver a Uso de la aplicación

RE: Error al firmar desde consola.

Vista combinada Visión Plana Vista de árbol
Discusiones [ Anterior | Siguiente ]
Mostrando el intervalo 1 - 20 de 29 resultados.
de 2
Hola.
Desde la aplicación de Sinadura, hemos conseguido firmar documentos pdf sin problema.
Ahora necesitamos poder firmar desde la consola, pero no lo conseguimos.

He leido en el foro, que es importante hacer la llamada desde la ruta raiz de sinadura.
La aplicación la tenemos instalada en c:\sinadura.
La llamada que hacemos es la siguiente:

c:\sinadura>c:\sinadura\bin\sinadura-console.bat --sign --pdf --input c:\sinadura\ficheros\Prueba.pdf --output c:\sinadura\ficheros\Prueba-signed.pdf -preferences preferences-sinadura-console.properties

Lo primero que nos sale es:


log4j:ERROR Precision option (0) isn´t a positive integer
log4j:ERROR Precision option (0) isn´t a positive integer
Enter your PIN:

y una vez introducido la clave del certificado, nos aparece lo siguiente :

ERROR net.esle.sinadura.core.console.SignController - java.io.FileNotFoundException:
at java.io.FileInputStream.open(Native Method)
.....
.....

Alguna pista de cual puede ser el fallo?

Gracias.
He leido en el foro, que es importante hacer la llamada desde la ruta raiz de sinadura.
La aplicación la tenemos instalada en c:\sinadura.
La llamada que hacemos es la siguiente:


Supongo que se refieren a ejecutar

1c:\sinadura>bin\sinadura-console.bat --sign --pdf --input c:\sinadura\ficheros\Prueba.pdf --output c:\sinadura\ficheros\Prueba-signed.pdf -preferences preferences-sinadura-console.properties
Me uno al hilo porque tengo el mismo problema.

Saludos.
En la firma por consola creo que no es necesario ejecutar la aplicación (sinadura-console) desde la raiz, así que supongo que ese no sera el problema:

http://www.sinadura.net/wik/-/wiki/sinadura/UserManual200#section-UserManual200-FirmandoPorConsola


Podéis poner el fichero de preferencias completo? para que le echemos un vistazo.
Este es el mío:

#Tarjeta criptografica=1; Certificado Software=0
preferencias.radioCertType.active=

#Rutas del driver de la tarjeta y del certificado software
hardware.dispositive=
software.dispositive=

#Alias del certifcado
certificate.alias=AA AA AA

#Rutas de los keystores y sus passwords
ks.cache=/home/daniel/workspace/sinadura3/sinaduraDesktop/resources/preferences/cache.jks
ks.trusted=/home/daniel/workspace/sinadura3/sinaduraDesktop/resources/preferences/trusted.jks
ks.cache.pass=sinadura
ks.trusted.pass=sinadura

#Habilitar firmado con sello de tiempo(y su URL) y/o validacion OCSP
sign.ts.enable=true
sign.ts.tsa=http://ocsp.izenpe.com:8093
sign.ocsp.enable=false

#Propiedades de la imagen de la firma
pdf.stamp.enable=true
pdf.stamp.height=122
pdf.stamp.path=/home/daniel/workspace/sinadura3/sinaduraDesktop/resources/images/sinadura150.png
pdf.stamp.y=17
pdf.stamp.x=17
pdf.stamp.width=122
pdf.visible=true
pdf.location=Bilbao
pdf.reason=powered by e.s.l.e. & zylk.net & irontec
pdf.certified=0

#Definicion de la peticion de las passwords de los certificados
#callback.handler=net.esle.sinadura.core.password.ConsoleCallbackHandler
callback.handler=net.esle.sinadura.core.password.FileCallbackHandler
certificate.password=1111

#Propiedades del proxy
proxy.http.user=user
proxy.http.pass=pass
proxy.http.system=true
Perdonad, el preferences correcto es este, no el anterior:

#Wed Mar 16 14:09:53 CET 2011
hardware.dispositive=dni
preferencias.radioCertType.active=0
output.dir=C\:\\sinadura\\Firmados
pdf.reason=Firmado
pdf.stamp.height=121
enable.statistics=false
pdf.location=Espa\u00F1a
sign.ts.enable=false
software.dispositive=Daniel
save.extension=-Firmado
sign.ocsp.enable=false
pdf.stamp.y=701
pdf.stamp.width=192
filedialog.path=C\:\\Documents and Settings\\Daniel\\Escritorio
pdf.stamp.x=375
output.auto.enable=false
pdf.stamp.enable=false
Este es mi fichero. No he puesto los datos privados.
Al principio me da el siguiente mensaje:
log4j:ERROR Precision option (0) isn´t a positive integer.
log4j:ERROR Precision option (0) isn´t a positive integer.
Exception in thread "main" java.lang.nullpointerexception
at net.esle.sinadura.core.console.preferencesUtil.getProperty (PreferencesUtil.java:135)
at net.esle.sinadura.core.console.preferencesUtil.getBoolean (PreferencesUtil.java:153)
at net.esle.sinadura.core.sinadura.main (Sinadura.java:42)
y no me pide ni siquiera la clave.
--------

#Tarjeta criptografica=1; Certificado Software=0
preferencias.radioCertType.active=0

#Rutas del driver de la tarjeta y del certificado software
hardware.dispositive=
software.dispositive=c:\\sinadura\\certificado.pfx

#Alias del certifcado
certificate.alias= <<alias del certificado según el Keytool>>

#Rutas de los keystores y sus passwords
ks.cache=
ks.trusted=
ks.cache.pass=
ks.trusted.pass=

#Habilitar firmado con sello de tiempo(y su URL) y/o validacion OCSP
sign.ts.enable=true
sign.ts.tsa=http://ocsp.izenpe.com:8093
sign.ocsp.enable=false

#Propiedades de la imagen de la firma
pdf.stamp.enable=true
pdf.stamp.height=122
pdf.stamp.path=c:\\sinadura\\sinadura48.png
pdf.stamp.y=17
pdf.stamp.x=17
pdf.stamp.width=122
pdf.visible=true
pdf.location=<<Poblacion de la empresa>>
pdf.reason=<<Nombre de la empresa>>
pdf.certified=0

#Definicion de la peticion de las passwords de los certificados
callback.handler=net.esle.sinadura.core.password.ConsoleCallbackHandler
#callback.handler=net.esle.sinadura.core.password.FileCallbackHandler
certificate.password=

#Propiedades del proxy
proxy.http.user=
proxy.http.pass=
proxy.http.system=false
Buenas,

vale veo que los nombre de las propiedades son de las 3.0 así que estáis con esta versión.

Iñigo del Rio Arrieta, analizamos tu fichero y te contamos.


Anonimo, el fichero de preferencias que estas usando no es el correcto:
http://www.sinadura.net/wik/-/wiki/sinadura/UserManual300#section-UserManual300-FirmandoPorConsola
Hola a todos.
He conseguido firmar desde la consola.
Me sigue saliendo antes de pedir la clave del certificado :

log4j:ERROR Precision option (0) isn´t a positive integer
log4j:ERROR Precision option (0) isn´t a positive integer

Una vez metida la clave, me sale :

ERROR net.esle.sinadura.core.console.SignController -
java.lang.NullPointerException
at java.io.FileInputStrean.<init><Unknown Source>
at java.io.FileInputStrean.<init><Unknown Source>
at net.esle.sinadura.core.console.PreferencesUtil.loadKeystorePreferences(PreferencesUtil.java:115)
at net.esle.sinadura.core.console.SignController.setPdfProperties(SignController.java:92)
at net.esle.sinadura.core.Sinadura.main(Sinadura.java:54)

Alguna idea de estos errores?

Pero al fin y al cabo me firma.

Al abrir el PDF, me dice que la firma es válida y todo correcto. Pero lo único que no aparece es la imagen que le he indicado en el
fichero de configuración. Pero por lo demás, parece que todo es correcto.

Un saludo.
Buenas Íñigo:

parece que en el fichero de preferencias no indicas ni la ruta donde está el Keystore ni su contraseña. Si has ejecutado la aplicación en escritorio, se habrá creado la carpeta .sinadura/preferences en tu User home. Dentro de esta carpeta tienes un keystore con el que firmar, se llama cache.jks y su contraseña es: sinadura.

En cuanto al error del log4j, no influye en la firma.

Por último, comprueba que la ruta de la imagen que estás indicando en las preferencias es correcta

Saludos
Muchas Gracias.

Efectivamente, al poner lo que me comentas del Keystore, ya no me salen los errores despues de la firma.
Y la imagen de la firma tambien sale correctamente, el fallo estaba en las coordenadas X Y, que eran valores demasiado
pequeños.

Ya solo queda el error que sale antes de la firma :

log4j:ERROR Precision option (0) isn´t a positive integer
log4j:ERROR Precision option (0) isn´t a positive integer

Pero si comentas que no influye en la firma, que de hecho me firma correctamente los pdf´s y la firma es válida, pues lo dejamos.
Pero sería bueno intentar que no salga, más que nada por si se instala en algún cliente y al ver ERROR, empieza a preguntar.

Voy a abrir un nuevo hilo con este error, ya que me imagino es algo muy específico y no influyente en la firma.

Un saludo.
Buenos días, Íñigo.

¿Podrías copiar aquí el fichero preferences que has utilizado?

Saludos y gracias.
Por supuesto, no hay problema :

*************************************************************
#Tarjeta criptografica=1; Certificado Software=0
preferencias.radioCertType.active=0

#Rutas del driver de la tarjeta y del certificado software
#hardware.dispositive=
software.dispositive=c\:\\sinadura\\certificado\\certificado.pfx

#Alias del certifcado
certificate.alias= xxxxxxxxxx-xxx-xxxxx

#Rutas de los keystores y sus passwords
ks.cache=c\:\\sinadura\\cache.jks
ks.trusted=c\:\\sinadura\\trusted.jks
ks.cache.pass=sinadura
ks.trusted.pass=sinadura

#Habilitar firmado con sello de tiempo(y su URL) y/o validacion OCSP
sign.ts.enable=true
sign.ts.tsa=http://ocsp.izenpe.com:8093
sign.ocsp.enable=false

#Propiedades de la imagen de la firma
pdf.stamp.enable=true
pdf.stamp.height=122
pdf.stamp.path=c\:\\sinadura\\sinadura48.png
pdf.stamp.y=250
pdf.stamp.x=250
pdf.stamp.width=122
pdf.visible=true
pdf.location=<<Poblacion>>
pdf.reason=<<Nombre Empresa>>
pdf.certified=0

#Definicion de la peticion de las passwords de los certificados
callback.handler=net.esle.sinadura.core.password.ConsoleCallbackHandler
#callback.handler=net.esle.sinadura.core.password.FileCallbackHandler
#certificate.password=

#Propiedades del proxy
#proxy.http.user=
#proxy.http.pass=
proxy.http.system=false


*************************************************************
He ocultado por tema de seguridad el alias del certificado, población y empresa

Si tienes alguna duda de donde obtener algun dato o fichero me lo comentas.

Un saludo.
Gracias Íñigo.

A mi me sigue dando un warning al firmar desde consola aunque la firma parece ser válida. El error que da es:

WARN net.esle.sinadura.core.validate.CertPathUtil - Incomplete chain

Saludos y gracias.
Si no te importa, pon el fichero de configuración (ocultando los datos privados) y vemos si entre todos
te podemos echar una mano y detectar ese Warning.

Un saludo.
por el tipo de warning tiene pinta de que falta importa algun certificado intermedio para en el almacen de confianza. ¿con qué certificado estas realizando la firma, y que tsa estás usando?
Hola,

Estoy intentando firmar con Sinadura Console.

Si lo hago con una tarjeta de Izenpe "Certificado Corporativo Privado" me aparece el siguiente error:

Exception in thread "main" java.lang.NullPointerException
at net.esle.sinadura.core.service.PdfService.sign(PdfService.java:99)
at net.esle.sinadura.core.console.SignController.signPdf(SignController.java:152)
at net.esle.sinadura.core.Sinadura.main(Sinadura.java:55)

Por lo que he podido comprobar el problema se produce con el valor "certificate.alias" del fichero de preferencias.

Si miro los certificados por medio de Internet Explorer-->Herramientas-->Opciones de internet-->Pestaña Contenido-->Botón Certificados, veo que en la columna "Emitido para" pone XXXXX y en la columna "Nombre des" pone <ninguno>.

He probado a firmar poniendo "certificate.alias=XXXXX", y poniendo "certificate.alias=", en ambos casos no me funciona.

Si lo hago con una tarjeta de Izenpe "Certificado de Entidad"

En "Emitido para" pone YYYYY y en la columna "Nombre des" pone YYYYY

Pongo certificate.alias=YYYYY, cambio certificate.password=**** y funciona perfectamente.

¿Que hago mal?

Si firmo con el GUI de Sinadura, firma correctamente con las dos tarjetas.

Gracias
Buenas,

que versión de sinadura estas usando?

Según lo que dices parece que el alias que estas poniendo no es correcto. En el foro hay varios post donde se explica como obtener el alias de los certificados.


saludos.
Gracias por tu respuesta.

La versión que estoy utilizando el la 3.0.0

En mi caso en la carpeta usuario\.sinadura\log\ no contiene ningún archivo, esto después de haber firmado desde la interfaz. He mirado en preferencias y no he visto nada para activar o desactivar el log.

Un saludo
Al final el problema era del Alias.

He tenido que hacer un programa para recuperar el Alias de la tarjeta.

Por si le sirve a alguien lo pongo a continuación.

 1import java.io.ByteArrayInputStream;
 2import java.io.InputStream;
 3import java.security.KeyStore;
 4import java.security.KeyStoreException;
 5import java.security.Provider;
 6import java.security.Security;
 7
 8import javax.security.auth.login.LoginException;
 9
10import sun.security.pkcs11.SunPKCS11;
11
12public class ObtenAlias {
13
14    /**
15     * @param args
16     * args[0]=pin
17     */
18    public static void main(String[] args) {
19
20        String pass = args[0];
21
22        KeyStore ks = null;
23
24        String name = "HARD";
25        String file = "c:\\windows\\system32\\aetpkss1.dll";
26        String slot = "0";
27        KeyStore.Builder builder = null;
28        try {
29            String pkcs11config = "name = "+name+"\nlibrary ="+file+"\nshowInfo=false\nslotListIndex="+slot;
30            InputStream confStream = new ByteArrayInputStream(pkcs11config.getBytes());
31                   
32            Provider sunpkcs11 = new SunPKCS11(confStream);
33            Security.addProvider(sunpkcs11);
34            try {
35                KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(pass.toCharArray());
36                builder = KeyStore.Builder.newInstance("PKCS11", sunpkcs11, pp);
37            }
38            catch (RuntimeException e) {
39                System.out.println(e.getMessage());
40            }
41            try  {
42                ks = builder.getKeyStore();
43            }
44            catch (KeyStoreException e) {
45                Security.removeProvider(sunpkcs11.getName()); //si se produce un error elimino el provider del scope
46                System.out.println(e.getMessage());
47            }
48        }
49        catch (RuntimeException e) {
50            System.out.println(e.getMessage());
51        }
52
53        // Obtengo el Alias de la tarjeta
54        try {
55            String alias = (String)ks.aliases().nextElement();
56            System.out.println("Alias:<<"+alias+">>");
57        }
58        catch (KeyStoreException e) {
59            System.out.println(e.getMessage());
60        }
61
62        // Una vez obtenido el alias cierro
63        try {
64            ((SunPKCS11) ks.getProvider()).logout();
65
66        }
67        catch (ClassCastException e) {
68            // TODO: si el provider es de tipo PKCS12 no se puede hacer el cast ni el logout pero no es necesario
69        }
70        catch (LoginException e) {
71        }
72    }
73}
Mostrando el intervalo 1 - 20 de 29 resultados.
de 2