2017-10-29 5 views
1

x509証明書をtrustStoreにインポートする必要があります。Java TrustStore

このコマンドは、cmdを開くのではなく、Javaプログラムを実行することで実行します。しかし、それは単にcmdを開き、何も起こりません。ここで

は、コードは次のとおりです。

String AppPath = System.getProperty ("user.dir") ; 
String totalPath = AppPath + "\\firstCA.crt" ; 
String command = " keytool " + 
       " -import "+ 
       " -file "+ totalPath + " " + 
       " -alias " + "CARoot" + " " + 
       " - keystore " + "myTrustStore" + " " ; 

Runtime rt = Runtime.getRuntime(); 
rt.exec(new String[]{"cmd.exe","/c","start",command }); 
+1

あなたはこのようにそれを行うことができます、しかし、私はそれをお勧めしません。証明書を 'X509Certificate' Javaオブジェクトにロードし、このオブジェクトを' KeyStore'インスタンスに追加するほうがはるかに簡単です。詳細はこちらをご覧ください。 – Robert

+1

ここをクリックhttps://stackoverflow.com/q/21775408/1429387 – naXa

答えて

0

問題はexec()メソッドに渡さcmdarray引数です。
java.lang.Runtime.exec()は次のように宣言されています。

public Process exec(String cmdarray[]) throws IOException { 

そして、それは述べている:

は、独立したプロセスで指定されたコマンドと引数を実行します。

cmdarray呼び出すコマンドとその引数を含む配列。

あなたがしたように、引数間の空白を自分で処理する必要はありません。
このメソッドでは、配列の各要素が渡された引数とみなされます。
このメソッドは、個々のString要素に空白が含まれているかどうかをチェックしません。また、それらを分割して新しい引数を生成して渡すこともありません。
Soは全体String:実際に渡すために複数の引数がありますが

String command = " keytool " + 
       " -import "+ 
       " -file "+ totalPath + " " + 
       " -alias " + "CARoot" + " " + 
       " - keystore " + "myTrustStore" + " " ; 

1つの引数として渡されます。

が別個String要素として、各引数を渡すことでString連結を交換し、それは問題ないはずです。

String[] allCommands = new String[] { "cmd.exe", "/c", "start", 
    "keytool", "-import", "-file", totalPath, "-alias", "CARoot", "-keystore" , "myTrustStore" }; 

Process process = Runtime.getRuntime().exec(allCommands); 
関連する問題