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