2013-03-23 2 views
0

KeyTool 클래스를 사용하여 프로그래밍을 통해 Java 키 저장소를 PFX 파일로 변환하려면 Keytool.exe와 동일한 기능을 지원해야합니다. 나는 프로젝트 요구 제한 때문에 내 응용 프로그램에서 명령 프롬프트 프로세스를 사용할 수 없으므로 프로그래밍을 통해 명령 프로세스도 열 수 없습니다.Java 프로그래밍을 통해 java 키 저장소를 PFX로 변환

C : \ 키 도구 -importkeystore -srckeystore .k eystore -srcstoretype JKS -destkeystore thekeystore.pfx -deststoretype PKCS12

나는 위의 명령을 사용하여 keytool.exe에 의해 PFX 파일을 만들 수 있습니다하지만 내 요구 사항은 생성하는 것입니다 내 응용 프로그램에서 키 저장소로 PFX 파일. Google에서 많은 검색을했는데이 문제와 관련하여 도움이나 도움을 줄 수있는 도움이되는 링크를 찾을 수 없습니다. 클래스 sun.security.tools.Keytool 나는이뿐만 아니라 검색하지만이 클래스에 대한 일반적인 프로그래밍 도움말을 찾을 수 없습니다. 친절하게 누군가가 조언이나 아이디어를 가지고 있다면 그것을 공유하십시오.

답변

2

KeyTool 클래스에 대해 알지 못합니다. 공개 API가 아니기 때문에이를 사용하는 것이 싫지만 KeyStore 클래스를 사용하여 키스트 아를 읽고 쓸 수 있습니다. 그 간단한 것, 내가 PFX (PKCS12 키 저장소)를 만드는 방법을 알고 일부러

public void convertKeystore(Path sourceKeystorePath, 
          char[] sourceKeystorePassword, 
          Path destKeystorePath, 
          char[] destKeystorePassword) 
throws GeneralSecurityException, IOException { 

    KeyStore sourceKeystore = KeyStore.getInstance("jks"); 
    try (InputStream stream = 
      new BufferedInputStream(
       Files.newInputStream(sourceKeystorePath))) { 
     sourceKeystore.load(stream, sourceKeystorePassword); 
    } 

    KeyStore destKeystore = KeyStore.getInstance("pkcs12"); 
    destKeystore.load(null, destKeystorePassword); 

    // Assume each alias in a keystore has the same password 
    // as the keystore itself. 
    KeyStore.ProtectionParameter sourceAliasPassword = 
     new KeyStore.PasswordProtection(sourceKeystorePassword); 
    KeyStore.ProtectionParameter destAliasPassword = 
     new KeyStore.PasswordProtection(destKeystorePassword); 

    Enumeration<String> aliasList = sourceKeystore.aliases(); 
    while (aliasList.hasMoreElements()) { 
     String alias = aliasList.nextElement(); 
     KeyStore.Entry entry = 
      sourceKeystore.getEntry(alias, sourceAliasPassword); 
     destKeystore.setEntry(alias, entry, destAliasPassword); 
    } 

    try (OutputStream stream = 
      new BufferedOutputStream(
       Files.newOutputStream(destKeystorePath))) { 
     destKeystore.store(stream, destKeystorePassword); 
    } 
} 
+0

감사하십시오 documentation에 따르면, 자바는 최소의 jkspkcs12 키 스토어 유형에서 지원, 그래서 당신은 뭔가를 할 수 있습니다. 나는 그것을 시험해 볼 것이다. – wolvorinePk