当前位置: 首页 > 知识库问答 >
问题:

Java keytool命令未从Process builder运行

芮歌者
2023-03-14

我试图运行从ProcesBuilder的JAVA的关键工具命令,但它失败与以下错误:

“非法选项:-genkeypairKey和证书管理工具命令:-certreq生成证书请求-changealias
更改条目的别名-删除删除条目-exportcert导出证书-genkeypair
生成密钥对-genseckey生成密钥-gencert从证书请求生成证书-importcert
导入证书或证书ain-importpass导入密码-importkeystore从另一个密钥库导入一个或所有条目-KeyPassword更改条目的密钥密码-列表列出密钥库中的条目-printcert
打印证书的内容-printcertreq打印证书请求的内容-printcrl
打印CRL文件的内容-StorePassword更改密钥库的存储密码“keytool-command_name-help”了解command_name的用法

下面是同样的代码片段:

public void testName() throws Exception {
    {
        String[] commands = { "keytool ", " -genkeypair  ", " -keyalg ", " RSA ", " -keysize ", " 2048 ",
                " -alias ", " rootkey ", " -dname ", "DNAME_INFORMATION", " -keystore ", " .keystore ",
                " -storetype ", " PKCS12 ", " -storepass ", " pass ", " -keypass ", " pass" };
        ProcessBuilder probuilder = new ProcessBuilder(commands);
        // You can set up your work directory
        probuilder.directory(new File(System.getenv("JAVA_HOME") + "\\bin"));

        Process process = probuilder.start();

        // Read out dir output
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        final StringBuilder commandStr = new StringBuilder();
        for (final String command : commands) {
            commandStr.append(command);
            commandStr.append(" ");
        }
        System.out.printf("Output of running %s is:\n", commandStr.toString());
        is = process.getErrorStream();
        if (null != is) {
            isr = new InputStreamReader(is, Charsets.UTF_8);
            br = new BufferedReader(isr);
        }
        StringBuffer sbuffer = new StringBuffer();
        if (null != br) {
            while ((line = br.readLine()) != null) {
                sbuffer.append(line);
            }
        }
        // If sbuffer contains some value then error has occured.
        // Wait to get exit value
        try {
            int exitValue = process.waitFor();
            System.out.println("\n\nExit Value is " + exitValue);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

如果我们从%JAVA_HOME%/bin目录(即cmd)运行相同的命令,那么它将创建。没有任何错误的密钥库文件。

命令:keytool-genkeypair-keyalg RSA-keysize 2048-alias rootkey-dname“dname_信息”-keystore。密钥库-存储类型PKCS12-存储通行证-密钥通行证

请告知是否有人遇到过此类问题。

谢谢。

共有1个答案

孔运珧
2023-03-14

你必须去掉论点周围的空格。

String[] commands = { "keytool ", "-genkeypair", "-keyalg", "RSA", "-keysize", "2048",
    "-alias", "rootkey", "-dname", "DNAME_INFORMATION", "-keystore", ".keystore",
    "-storetype", "PKCS12", "-storepass", "pass", "-keypass", "pass" };

顺便说一句,您可以直接访问密钥库,请参阅密钥库类。

 类似资料:
  • 我正在尝试使用ProcessBuild运行cmd语句。 但是,我只能打开cmd。exe 那么如何编写此语句通过java运行cmd命令??我得到了错误,因为语句由"*"组成。如何编辑ProcessBuilder以便我可以运行语句?非常感谢

  • 线程“main”java.io.ioException中出现异常:无法运行程序“java” 但是当我从终端上运行任何java命令时,它们都工作得很好。 我发现的另一件事是,当我在终端中运行命令:并使用ProcessBuilder()时,它们会显示不同的输出。即ProcessBuilder命令中不显示jdk/bin的路径。 我如何解决这个问题?

  • 我试图调用cmd命令从Java使用进程构建器。然而,我面临的问题很少。 > 这个程序有时没有给出正确的输出。如果我使用process.destroy()方法并得到exitValue,它显示1。如果我注释掉process.destroy()方法,异常出现,进程没有退出。我猜可能是线程竞争条件。但是,没有process.waitFor()的影响。它有时仍然会产生错误的输出。我们如何测试这些情况并找出问

  • 问题内容: 我在Ubuntu环境中使用jar执行openSSL命令时遇到问题。我的结论是,发生这种情况是由于文件路径中的空间正在作为命令中的参数(例如,以下命令中的SHA 256)传递。我已经使用了进程和类来执行相同的操作: 首先 : 第二 : 最终命令如下所示,如果在命令提示符下单独执行,则工作正常,但使用Java代码执行时失败: 我也使用以下方法解决了此问题,但是没有按预期工作: 请查看并帮助

  • 我刚开始咕噜咕噜的。我正在尝试在我的Mac OSX Lion上配置Grunt。 我按照这里的说明,然后创建了一个包含下面文件的项目文件夹。当我尝试通过在终端中键入“grunt”来运行时,我会得到。我还修改了paths,希望添加路径可以使任务运行器工作,但它仍然不能工作。有人能帮忙吗?

  • javac-cp“lib/*”src/com/company/main.java 在myproject/src中,我尝试使用: JAVA-CP。COM/公司/主要 C:\myproject\src>javac-cp“lib/*”com/company/main.java C:\myproject\src>java-cp.;“lib/*”com/company/main 现在,代码编译和执行没有任何