我在使用Ubuntu环境中的jar执行openSSL命令时遇到问题。 我已经得出结论,这是因为在命令中作为参数传递的文件路径中的空间而发生的,例如, SHA 256在下面的命令。 我已经使用过程和ProcessBuilder
类,用于执行相同的:ProcessBuilder并运行包含空格的OpenSSL命令
首先:
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)会发生什么? – immibis
请在以下错误中找到以下错误:1)java.io.IOException:无法运行程序“openssl x509 -in”:error = 2,没有这样的文件或目录 \t at java.lang.ProcessBuilder.start(ProcessBuilder.java :1047) –
你有一个叫做'openssl x509 -in'的程序吗?如果没有,那么你为什么要运行一个名为'openssl x509 -in'的程序? (与前两个参数为'x509'和'-in'运行名为'openssl'的程序相反) – immibis