que ingles implementar firma ejecutar desde descargar archivos aplicacion abrir java jar sign

ingles - java jar download



¿Cómo se firman programáticamente archivos jar en Java? (4)

Estoy usando la tarea SingJar Ant (que aparentemente llama a la herramienta de línea de comandos debajo). Debería ser posible llamarlo programáticamente.

¿Alguien ha hecho esto antes? La única referencia que he encontrado en google ha sido: http://onjava.com/onjava/2001/04/12/signing_jar.html, que aún usa sun. * Clases que causarán problemas ...

Encontré esto también, pero no funciona con java16: https://svn.cs.cf.ac.uk/projects/whip/trunk/whip-core/src/main/java/org/whipplugin/data/bundle/ JarSigner15.java


En el archivo tools.jar está la clase sun.security.tools.JarSigner que tiene un método de ejecución estática (ava.lang.String [] strings) que toma los mismos parámetros que el ejecutable jarsigner.

Entonces puedes llamar algo así como:

sun.security.tools.JarSigner.run(new String[] { "-keystore", keystoreFile.getAbsolutePath(), "-storepass", keystorePassword, outFile.getAbsolutePath(), keystoreAlias });

Debe asegurarse de que tools.jar esté en su classpath para compilar y ejecutar.


Para abordar un cambio repentino de restricciones de seguridad en las aplicaciones WebStart en Java 7u45, hemos creado un generador de archivos jar simple y firmado . Utiliza el módulo bcpkix Guava 15 y Bouncy Castle. Debería ejecutarse en Java 6 y 7. Es adecuado solo para archivos pequeños. Úselo para cualquier propósito que desee.


Tenga en cuenta que la clase sun.security.tools.JarSigner se escribió para utilizarse como una utilidad de línea de comandos y no se diseñó para ser llamada desde el código Java. Como resultado, el manejo de errores es bastante abrupto: el código simplemente imprimirá un mensaje de error a la salida estándar y luego llamará a System.exit() 1 .

Esto significa que si llama a la clase desde su código Java y se produce un error cuando intenta firmar un jar, la JVM que ejecuta su código simplemente se detendrá. Esto puede estar bien dependiendo de su situación, pero si su código es de larga duración o actúa como un servicio, no es tan bueno.

Por lo tanto, es mejor llamar a la herramienta jarsigner con ProcessBuilder según el comentario de clamp. A continuación, puede llamar a waitFor() en el objeto de proceso resultante y verificar exitValue() para ver si el comando fue exitoso. getInputStream() le permitirá leer cualquier mensaje de error que se haya escrito en la salida estándar si la operación falla.