Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java调用时,Keytool命令不起作用_Java_Key_Terminal - Fatal编程技术网

使用Java调用时,Keytool命令不起作用

使用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

我正在尝试向现有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代码时,我的密钥库文件中没有任何更改

    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);”指定工作目录但一切都没有改变。