Buenas,
Estoy realizando un proyecto en la universidad en la que me surge la necesidad de poder ejecutar programas externos desde mi programa, concretamente deseo poder ejecutar keytool y openssl.
Actualmente he creado un script en bash y batch con los comandos que funciona correctamente. Este script lo llamaría desde el programa Java, sin embargo la gracia estaría en meter directamente las llamadas que hay dentro de los scripts en vez de llamar al script.
He visto que para ejecutar programas externos dispongo de ProcessBuilder, sin embargo no consigo ejecutar ni keytool ni openssl.
He llegado a conseguir ejecutar uno de los scripts antes creados, concretamente desde windows y ejecutando:
ProcessBuilder pb = new ProcessBuilder(
"cmd",
"/C",
runtimeDir + "crearCertificado.bat",
username,
password
);
pb.start();
Esto ha funcionado. Se ejecuta "cmd" que a su vez ejecuta "crearCertificado.bat" (lo de ejecutar cmd /C es lo que he visto en todos los ejemplos).
Sin embargo si lo cambio por la linea de keytool no me hace nada, en ninguna de las formas que lo he probado (que hansido todas las que se me han ocurrido):
· Lo he probado poniendo "keytool" y sus argumentos
· Con todo el path hasta keytool (ya que como véis al CMD le paso el path entero al .bat si no tampoco lo conseguía ejecutar -.-)
· Los dos puntos anteriores pero tal y como he ejecutado el bat (cmd /C punto_anterior)
ProcessBuilder pb = new ProcessBuilder(
"keytool",
"-keystore", keystore,
"-genkey",
"-alias", alias,
"-dname",
"\"CN=" + username + ",",
"OU=BiC User,",
"O=BiC,",
"L=Barcelona,",
"S=Barcelona,",
"C=ES\"",
"-keyalg", "RSA",
"-keysize", Integer.toString(keysize),
"-validity", Integer.toString(validity),
"-storepass", password,
"-keypass", password
);
pb.directory(runtimeDir);
Process p = pb.start();
printProcessBuilder(pb);
También he probado poniendo algunos argumentos más juntos, por ejemplo en vez de separar "-keystore" y su valor con una coma, pos con concatenación de string normal y corriente: "-keystore " + keystore
En todos los casos al visualizar que comando se ejecuta con
for (String command : pb.command()) {
System.out.print(command + " ");
}
El comando es correcto. Incluso me pongo en el directorio donde está y lo copio y pego y funciona, sin embargo el propio programa no me ejecuta el keytool, sin embargo, como digo, si he podido llegar a ejecutar el script batch.
¿Que ocurre?
Gracias!