无法创建CSR证书

时间:2015-12-31 16:37:25

标签: java ssl

在linux中,我无法使用java使用以下命令创建CSR文件。直接从终端访问时,相同的命令有效。

 ../jre/bin/keytool -genkey -alias tomcat -keyalg RSA -keypass "password" -storePass "password" -keysize 2048 -validity 300 -dName "CN=testcn, OU=test, O=ME, L=testch, S=tests, C=testc" -keystore ../jre/bin/ssl.keystore

得到以下异常:

  

keytool error:java.lang.RuntimeException:用法错误,OU = test,是   不是合法的命令

提前致谢: - )

1 个答案:

答案 0 :(得分:0)

不要将命令作为一个字符串传递,而是尝试将命令行分成单独的参数。

换句话说,请尝试替换

    Process p = Runtime.getRuntime().exec(command)

    Process p = Runtime.getRuntime().exec(new String[] {
            "keytool", "-genkey", "-alias", "tomcat", "-keyalg", "RSA", "-keypass", "password", "-storePass", "password", "-keysize", "2048",
            "-validity", "300", "-dName", "CN=testcn, OU=test, O=ME, L=testch, S=tests, C=testc", "-keystore", "test.keystore" });

或者,使用ProcessBuilder:

    ProcessBuilder pb = new ProcessBuilder(
            "keytool", "-genkey", "-alias", "tomcat", "-keyalg", "RSA", "-keypass", "password", "-storePass", "password", "-keysize", "2048",
            "-validity", "300", "-dName", "CN=testcn, OU=test, O=ME, L=testch, S=tests, C=testc", "-keystore", "test.keystore");
    Process p = pb.start();

ProcessBuilders只能从命令行参数列表创建,而不能从命令行创建。 Runtime.getRuntime().exec(command)使用StringTokenizer拆分命令行,然后将结果传递给ProcessBuilder,看起来StringTokenizer在将该命令行拆分为参数方面做得不是很好。