2013-12-18 4 views
2

Java 스크립트에서 keytool을 호출하여 자체 서명 된 인증서를 만들고 싶습니다. 다음은 내가 가지고있는 문제점을 포함하고있는 간단한 코드입니다 :Linux에서 Runtime.getRuntime(). exec()와 함께 keytool 사용

public class Tester { 
     public static void main(String[] args) { 
      String[] cmd = { 
       "/bin/sh", 
       "-c", 
       "keytool", 
       "-genkey", 
       "-dname", 
       "\"C=US,CN=CU,L=ABC,O=ABC_Univ,OU=ABC_Pro\"", 
       "-keysize", 
       "1024", 
       "-alias", 
       "testkeypairs", 
       "-keyalg", 
       "RSA", 
       "-sigalg", 
       "SHA1withRSA", 
       "-keystore",  
       "testkeystore", 
       "-storepass", 
       "abcdef", 
       "-keypass", 
       "abcdef" 
      }  
      Process testProc = Runtime.getRuntime().exec(cmd); 
} 

실행했을 때 오류가 없습니다. 그러나 그것은 나에게 키 스토어를주지 않았다. 내 질문은 :

  1. 키 도구에 의해 생성 된 인증서는 그것이, getinputstream()를 사용하여 부모 프로세스에 공급해야하는 "서브 프로세스의 출력"으로 간주되지 않는 이유는 무엇입니까? 이 경우 다음 포스트에서 논의

  2. , 나는 또한

    Keytool usage with Runtime.getRuntime().exec() under Linux

    프로그램

그냥 붙어있어 정지 결코 보인다는 getinputstream() 일을 시도했다.

  1. Java 프로그램을 사용하여 자체 서명 된 인증서를 만드는 다른 방법이 있습니까?

저는 Java의 초보자이며 영어가 제 1 언어가 아닙니다. 나는 나의 질문을 명확하게 표현하기를 희망한다.

+0

정확하게 무엇을 시도하고 있는지 모르지만 변경을 고려하십시오. 당신의 전술을 약간 :'exec'를 호출하여 keytool 바이너리를 호출하는 대신 프로그래머가 직접 키 스토어 생성 코드를 호출 해보십시오. http://stackoverflow.com/questions/5312559/how-do-i-programmatically-create-a-new-keystore – Gus

+0

내가 원하는 건 프로그래밍 방식으로 자체 서명 된 인증서를 만드는 것입니다. Runtime.getRuntime.exec()를 사용하여 keytool을 호출 할 수 있다고 생각했는데, 다음 게시물을 살펴 보았습니다. [http://stackoverflow.com/questions/8308148/keytool-usage-with-runtime-getruntime-exec-under-linux ] 나는 그들의 방법을 시도했지만 인증서를 얻을 수 없었다. @Hariprasad –

+0

@Gus 표준 java crypto API에서는 인증서 서명을 할 수 없습니다. 이를 위해서는 타사 라이브러리 (예 : BouncyCastle)를 사용해야합니다. – Jcs

답변

2

다른 접근법을 다시 시도 할 수 있습니다. keytool이 Java로 작성되었으며 JDK와 함께 제공되기 때문에 this answer과 같이 keytool 클래스를 직접 인스턴스화 할 수 있습니다. 이 방법을 사용하면 원하는 JKS 파일에서 자체 서명 된 인증서를 생성 할 수 있지만 생성 된 인증서에 프로그래밍 방식으로 액세스 할 수는 없습니다.

Java 7에서는 new sun.security.tools.KeyTool()을 수행해야하지만 Java 8에서는 클래스가 이동되어 new sun.security.tools.keytool.Main을 수행해야합니다. 물론 Oracle JDK에서만 작동하며 API는 내부적이며 이후 Java 버전 등에서는 존재하지 않을 수 있습니다.