본문 바로가기
일하는 중에

Java Applet을 배포하려면 jarsigner를 이용해서...

by likebnb 2010. 10. 1.

최근에 자바 애플릿을 만들 일이 있었다.
프로그램을 열심히 작성하고 에러 없이 컴파일까지 완료하였다.
그런데 JAR로 압축하여 웹서버로 배포하여 테스트를 하는데 다음과 같이 에러를 내뿜고 동작하질 않았다.

원인은 아래 그림의 Caused by로 시작되는 줄에 나타난 것 처럼 인증되지 않는 JAR의 실행이 인증예외를 발생시킨 탓이다.
그도 그럴 것이 Java Applet은 로컬 PC로 다운로드 되어 실행되는 것으로 로컬 PC의 자원에 대한 접근이 가능하기 때문에
이를 아무런 제약 없이 실행하게 둘 수 없다는 보안 규칙 때문이다.

java.security.cert.CertificateException: Certificate has been denied at...





그렇다면 결론은? 그렇다. 개발된 JAR를 보안 인증서로 서명하여 배포하면 된다.

그래서 오늘 함께 알아 볼 내용은 개발 및 테스트를 위한 과정에서 임시 인증서를 이용하여 테스트를 위한 서명된 JAR를 만들어 보는 
것이다. 이를 위해 JAVA 개발킷에 함께 딸려 온 keytool과 jarsigner라는 유틸리티가 필요하다.



1. 제일 먼저 키저장소를 새로 생성한다.

keytool -genkey -keystore likebnb.keystore -alias likebnb







2. 생성된 키저장소를 자가인증(self certificate)한다.

keytool -selfcert -alias likebnb -keystore likebnb.keystore





자가인증을 할 때 -validity 옵션을 사용해서 인증서의 만료일자를 지정할 수 있다. 이 옵션을 지정하지 않으면 기본값은 180일로 6개월이 된다.

프로젝트에서 부득이하게 테스트 인증서를 사용해야하는 경우엔 기본값인 6개월로 두면 문제가 발생할 수 있으니 반드시 충분한 날수로 지정해주도록 하자.

예를 들어 10년 동안 인증서가 유효하게 하려면 -validity 3650과 같이 옵션을 줘야 한다.






3. 인증된 키저장소를 확인한다.

 keytool -list -keystore likebnb.keystore







4. 키저장소를 이용하여 JAR에 서명을 한다.

 jarsigner -keystore likebnb.keystore test.jar likebnb






5. 서명된 JAR와 그렇지 않은 원본 JAR는 다음과 같이 파일의 크기가 다름을 알 수 있다.





이상과 같이 JAR를 인증서로 서명하여 웹에서 사용할 수 있도록 하는 방법을 알아 보았다. 추가로 ant 등을 이용하여 컴파일을 하기
위해서는 아래 구문과 같이 build.xml 파일을 수정해 주어야 한다.

  <target name="signjar">
    <signjar alias="likebnb" jar="build/jars/test.jar"
     keystore="../likebnb.keystore" storepass="my.password" />
    <delete dir="build/classes"/>
  </target>



이상의 방법은 어디까지나 테스트를 목적으로 하는 임시 인증서 및 서명이므로 실제로 배포할 때에는 공인인증기관에서 발급 받은
인증서를 가지고 서명해야 하는 것은 두말할 것 없는 일이다. 어쨌든 개발하고 있는 애플릿을 테스트 해보기 위해선 알아두면 좋겠다.