2017-10-29 10 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' 자바 객체에로드하고이 객체를'KeyStore' 인스턴스에 추가하는 것은 훨씬 간단합니다. 자세한 내용은 여기에서 검색하십시오. – Robert

+1

여기에서보세요. https://stackoverflow.com/q/21775408/1429387 – naXa

답변

0

문제는 exec() 메서드에 전달 된 cmdarray 인수입니다 : 여기

는 코드입니다.

는 별도의 프로세스에서 지정된 명령 및 인수를 실행합니다 :

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

그리고이 상태로 : java.lang.Runtime.exec()
가 선언된다.

cmdarray 호출 할 명령과 해당 인수가 포함 된 배열입니다.

사용자가했던 것처럼 인자 사이의 공백을 처리 할 필요가 없습니다.
이 방법의 경우 배열의 각 요소 String은 전달 된 인수로 간주됩니다.
이 메서드는 개별 String 요소에 공백이 포함되어 있는지 확인하지 않고 전달할 새 인수를 생성하기 위해 요소를 분할하지 않습니다. String
그래서 전체 : 실제로 전달하는 여러 인자가있는 동안

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

가 단일 인수로 전달됩니다.


는 별개의 String 요소로 각 인수를 전달하여 String 회씩 연결을 교체하고 그것을 잘해야한다 :

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

Process process = Runtime.getRuntime().exec(allCommands);