【发布时间】:2015-05-25 08:17:46
【问题描述】:
在 Ubuntu 环境中使用我的 jar 执行 openSSL 命令时遇到问题。
我得出的结论是,这是因为文件路径中的空间在命令中作为参数传递,例如以下命令中的 SHA 256。
我已经使用了 process 和 ProcessBuilder 类来执行相同的操作:
第一:
String certFilePath = "/home/mplusuer/Desktop/Nishant/210515/TestData/TestData/SHA 256/nishant.cer"
String []cmdGetAlgorithm = new String[3];
cmdGetAlgorithm[0] = "openssl x509 -in";
cmdGetAlgorithm[1] = certFilePath;
cmdGetAlgorithm[2] = "-noout -text -certopt no_subject,no_header,no_version,no_serial,no_validity,no_subject,no_issuer,no_pubkey,no_sigdump,no_aux,no_extensions";
ProcessBuilder pb = new ProcessBuilder(cmdGetAlgorithm[0], cmdGetAlgorithm[1],cmdGetAlgorithm[2]);
// setup other options ...
Process processGetAlgorithm = pb.start();
processGetAlgorithm.waitFor();
第二:
Runtime runtime = Runtime.getRuntime();
String cmdGetAlgorithm = "openssl x509 -in "
+ certFilePAth
+ " -noout -text -certopt no_subject,no_header,no_version,no_serial,no_validity,no_subject,no_issuer,no_pubkey,no_sigdump,no_aux,no_extensions ";
Process processGetAlgorithm = runtime.exec(cmdGetAlgorithm);
最后的命令如下,在命令提示符下单独执行可以正常运行,但是使用java代码执行失败:
openssl x509 -in /home/mplusuer/Desktop/Nishant/210515/TestData/TestData/SHA 256/suketu.cer \
-noout -text -certopt no_subject,no_header,no_version,no_serial,no_validity,no_subject, \
no_issuer,no_pubkey,no_sigdump,no_aux,no_extensions
我也使用了以下方法来解决此问题,但没有达到预期的效果:
String quoted = "\"" + certFilePath + "\"";
String escaped = certFilePath.replace(" ", "\\ ");
请注意并帮助我解决问题。
【问题讨论】:
-
1) 会发生什么?
-
请找到以下场景错误:1) java.io.IOException:无法运行程序“openssl x509 -in”:错误=2,java.lang.ProcessBuilder 中没有这样的文件或目录。开始(ProcessBuilder.java:1047)
-
你有一个叫
openssl x509 -in的程序吗?如果不是,那你为什么要运行一个名为openssl x509 -in的程序? (而不是运行一个名为openssl的程序,前两个参数是x509和-in)