使用Java调用时,Keytool命令不起作用
我正在尝试向现有Java密钥库文件添加私钥对。当我通过终端执行以下命令时,它工作。(即,当我执行“keytool-list-v-keystore-ecekeystore.jks”时,我可以看到新添加的密钥) keytool-genkey-alias blabla-keyalg RSA-keystore ecekeystore.jks -dname“CN=MyName,OU=blabla,O=blabla,L=blabla,S=blabla,C=US”-存储密码1-密钥密码2 但是当我运行下面的Java代码时,我的密钥库文件中没有任何更改使用Java调用时,Keytool命令不起作用,java,key,terminal,Java,Key,Terminal,我正在尝试向现有Java密钥库文件添加私钥对。当我通过终端执行以下命令时,它工作。(即,当我执行“keytool-list-v-keystore-ecekeystore.jks”时,我可以看到新添加的密钥) keytool-genkey-alias blabla-keyalg RSA-keystore ecekeystore.jks -dname“CN=MyName,OU=blabla,O=blabla,L=blabla,S=blabla,C=US”-存储密码1-密钥密码2 但是当我运行下面的J
try {
Runtime rt = Runtime.getRuntime();
String command = "keytool " +
"-genkey -alias blabla -keyalg RSA " +
"-keystore ecekeystore.jks " +
"-dname \"CN=MyName, OU=blabla, O=blabla, L=blabla, S=blabla, C=US\" " +
"-storepass password1 " +
"-keypass password2";
System.out.println(command);
Process pr = rt.exec(command);
return true;
} catch (IOException e) {
e.printStackTrace();
}
我将感谢任何帮助
已解决:
Runtime rt = Runtime.getRuntime();
try {
String[] cmdArray = new String[14];
cmdArray[0] = "keytool";
cmdArray[1] = "-genkey";
cmdArray[2] = "-alias";
cmdArray[3] = "blabla";
cmdArray[4] = "-keyalg";
cmdArray[5] = "RSA";
cmdArray[6] = "-keystore";
cmdArray[7] = "ecekeystore.jks";
cmdArray[8] = "-dname";
cmdArray[9] = "CN=MyName, OU=blabla, O=blabla, L=blabla, S=blabla, C=US";
cmdArray[10] = "-storepass";
cmdArray[11] = "password1";
cmdArray[12] = "-keypass";
cmdArray[13] = "password1";
Process pr = rt.exec(cmdArray);
InputStream is = pr.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output is:\n");
while ((line = br.readLine()) != null) {
System.out.println(line);
}
return true;
} catch (IOException e) {
e.printStackTrace();
}
这是一个编程问题,而不是安全问题。在我看来,它类似于
Process。exec
要求在单独的数组参数中指定参数。我遵循了这里的文档(),它说唯一的输入是字符串“command”。“这是一个方便的方法。对表单exec(command)的调用与调用exec(command,null,null)的行为完全相同。”另外,我希望我之前的意思是Runtime.exec
。您在正确的目录中吗?-keystore
是一个相对路径,因此如果您不在适当的目录中…我尝试使用“Process pr=rt.exec(command,null,dir);”指定工作目录但一切都没有改变。