2011-10-07 2 views
8

이전에이 작업을 수행 한 사람이 있습니까?Java에서 jar 파일에 프로그래밍 방식으로 어떻게 서명합니까?

이이 발견 ... * 문제가 발생할 것이다 클래스 여전히 일을 사용 http://onjava.com/onjava/2001/04/12/signing_jar.html,하지만 java16 작동하지 않습니다 :. 내가 구글에서 발견 한 유일한 참조했습니다 https://svn.cs.cf.ac.uk/projects/whip/trunk/whip-core/src/main/java/org/whipplugin/data/bundle/JarSigner15.java

+2

Java 내에서 jar 서명자 프로세스를 호출 할 수 있습니다. ProcessBuilder를 사용하는 것이 가장 좋습니다. – clamp

답변

0

SingJar Ant task (분명히 아래의 명령 줄 도구라고 부름)을 사용합니다. 프로그래밍 방식으로 호출 할 수 있어야합니다.

+0

은 'jarsigner'를 호출하지 않는 것을 찾고 있었는데 ... - java에서 모두 완료되었습니다 ... – wuntee

+1

@wuntee : Ant taks가 쉽게 가능하면 그렇게 할 것이라고 생각합니다. –

2

tools.jar 파일에는 jarsigner 실행 파일과 동일한 매개 변수를 사용하는 정적 실행 (ava.lang.String [] strings) 메소드가있는 sun.security.tools.JarSigner 클래스가 있습니다. 당신은 확실히 tools.jar를 컴파일 및 실행에 대한 클래스 경로에 만들 필요가

sun.security.tools.JarSigner.run(new String[] { 
    "-keystore", keystoreFile.getAbsolutePath(), 
    "-storepass", keystorePassword, 
    outFile.getAbsolutePath(), 
    keystoreAlias 
}); 

:

그래서 당신은 뭔가를 호출 할 수 있습니다.

3

Java 7u45의 WebStart 응용 프로그램에서 보안 제한이 갑자기 변경되는 것을 처리하기 위해 simple signed jar file generator을 만들었습니다. Guava 15와 Bouncy Castle bcpkix 모듈을 사용합니다. Java 6 &에서 실행해야합니다. 7. 작은 파일에만 적합합니다. 원하는 용도로 사용하십시오.

3

sun.security.tools.JarSigner 클래스는 명령 줄 유틸리티로 사용하도록 작성되었으며 Java 코드에서 호출하도록 설계되지 않았습니다. 결과적으로 오류 처리는 매우 갑작 스럽습니다. 코드는 표준 출력에 오류 메시지를 인쇄 한 다음 System.exit()1을 호출합니다.

Java 코드 내에서 클래스를 호출하고 jar에 서명하려고 할 때 오류가 발생하면 코드를 실행하는 JVM이 중지됩니다. 상황에 따라 괜찮을 수도 있지만 코드가 장기 실행되거나 서비스로 작동하는 경우에는 좋지 않습니다.

따라서 클램프의 설명에 따라 ProcessBuilder를 사용하여 jarsigner 도구를 호출하는 것이 좋습니다. 그런 다음 결과 Process 개체에 waitFor()을 호출하고 exitValue()을 확인하여 명령이 성공적으로 수행되었는지 확인할 수 있습니다. getInputStream()은 작업이 실패 할 경우 표준 출력으로 작성된 오류 메시지를 읽을 수있게합니다.

관련 문제