본문
Keytool-IUI로 인증서를 간편하게 생성/관리하자(안드로이드 개발)
JRE 에는 기본적으로 keytool이라는 인증서 관리 툴이 따라오게 된다. 이를 사용하기 위해서는 명령 프롬프트을 열고 흑백 화면에서 명령을 입력해야 한다(물론 명령에 대하여 숙지해놓아야한다.). 물론 인증서로 복잡한 작업은 왠만해선 하지 않기 때문에 괜찮은데 이번에 굳이 이 프로그램을 찾은 이유는 바로 안드로이드 개발시에 사용하는 keytool은 JRE의 버전에 따라 결과가 달라지기 떄문이다. (본문 뒤편에서 다시 언급됩니다)
구글 지도 구현에 도움을 주는 MapView위젯을 사용하기 위해서는 구글측에서 사용허가를 받아야 한다. 허가받지 않고 사용시 지도는 격자무늬로 채워지며, Couldn't get connection factory client 오류가 나온다. 사용허가를 받기 위해서는 개발에 사용되는 인증서의 지문(MD5)이 필요한데, 이는 keytool -list -keystore debug.keystore 명령(debug.keystore는 %HOMEPATH%\.android\에 위치해있다)을 사용하여 간편하게 조회할 수 있다. 물론 이는 JDK 1.6 환경에서는 잘 동작한다. 하지만 JDK 1.7에서의 keytool은 인증서의 지문을 SHA1형식으로만 출력하기 때문에 사용할 수 없다.
JRE 1.6에서의 keytool파일은 '설치된 JRE 1.6'에 종속되었기 떄문에 다른 standalone 프로그램이 있을까 해서 찾다가 발견한것이 GUI 기반의 keyTool-IUI. 메뉴를 보자면 많은 기능을 포함하고 있는데, 이중에서 안드로이드 개발에 있어서 사용되는 부분에 대해 알아보기로 했다. 다운로드페이지에서 jar파일로 다운받아도 더블클릭해서는 실행이 안되고, 대신 압축을 풀어서 그 안의 rc15ktl.jar을 실행시킬 수 있다.
우선 위에 언급했던 Android Maps API Key Signup 사이트를 위하여 인증서의 MD5 값을 불러오는 작업을 한다. 여기에서 한가지, JKS keystore를 불러오는데 있어서 jks 확장자가 아니면 읽어들이지 않으므로 개발시 사용되는 .keystore파일의 확장자를 .jks로 변경해 주어야 한다. 변경해 준 후 프로그램 상단 메뉴인 Tools -> Keystore Manager -> JKS keystore를 클릭하여 파일을 선택하면 JKS keystore manager 창이 뜨게 된다.([그림 1]에서 두번째 창) debug.keystore의 암호는 android이므로 입력하여 진행한다. 여기에서 테이블 엔트리를 선택하여 오른쪽 마우스를 클릭하면 나오는 메뉴중 view certificate chain을 선택하면 가장 상단의 창을 볼 수 있다. MD5는 물론이고 SHA1까지도 볼 수 있다.
[그림 1] MD5, SHA1 인증 지문을 확인할 수 있다
또한 이 프로그램은 애플리케이션 서명을 위해서도 사용될 수 있다. 물론 서명되지 않은채로 어플을 배포할 수 있지만 사용자가 설정을 변경해야할 불편함도 있을 뿐 아니라, 개발자 식별, 애플리케이션 무결성등을 보장하기 위하여 서명은 필수적이다. keytool -genkey -keystore key.keystore와 같이 입력한 후 나오는 질문에 잘 응답하면 개인키를 갖는 keystore를 손쉽게 생성할 수 있으며, keyTool-IUI에서도 마찬가지로 간단히 생성할 수 있다.
[그림 2, 3, 4] keystore를 생성하고, 개인키를 만들어 keystore에 보관한다.
우선 [그림 2]와같이 비어있는 keystore를 생성해준다. 그 후 [그림 3]처럼 설정해준다. 이미 기본적으로 값들이 설정되어있으며, 입력이 필요한 최소한의 조건은 common name(CN) 뿐이다. 원한다면 [그림 4]처럼 Cert. Extension - KeyUsage의 Enabled를 해제할 수도 있다.(keytool에서 기본 명령 실행시 disabled된 상태로 결과가 출력된다) 필요조건이 만족되면 가장 아래의 파란색 ok버튼이 활성화 되며 이를 클릭하면 마찬가지로 생성이 완료된다. 이후 Sign file with private key메뉴 혹은 eclipse adt에서 apk 파일을 서명할 수 있다.
글을 마치기 전에 잠시 keytool을 다시한번 살펴보니 출력결과를 상세하게 보여주는 -v 옵션이 있었다. 이를 사용하니 jre 1.7에서도 MD5 결과를 볼 수 있었다 심지어 SHA256까지 보여준다.. 아 오늘도 삽질이로구나.
구글 지도 구현에 도움을 주는 MapView위젯을 사용하기 위해서는 구글측에서 사용허가를 받아야 한다. 허가받지 않고 사용시 지도는 격자무늬로 채워지며, Couldn't get connection factory client 오류가 나온다. 사용허가를 받기 위해서는 개발에 사용되는 인증서의 지문(MD5)이 필요한데, 이는 keytool -list -keystore debug.keystore 명령(debug.keystore는 %HOMEPATH%\.android\에 위치해있다)을 사용하여 간편하게 조회할 수 있다. 물론 이는 JDK 1.6 환경에서는 잘 동작한다. 하지만 JDK 1.7에서의 keytool은 인증서의 지문을 SHA1형식으로만 출력하기 때문에 사용할 수 없다.
JRE 1.6에서의 keytool파일은 '설치된 JRE 1.6'에 종속되었기 떄문에 다른 standalone 프로그램이 있을까 해서 찾다가 발견한것이 GUI 기반의 keyTool-IUI. 메뉴를 보자면 많은 기능을 포함하고 있는데, 이중에서 안드로이드 개발에 있어서 사용되는 부분에 대해 알아보기로 했다. 다운로드페이지에서 jar파일로 다운받아도 더블클릭해서는 실행이 안되고, 대신 압축을 풀어서 그 안의 rc15ktl.jar을 실행시킬 수 있다.
우선 위에 언급했던 Android Maps API Key Signup 사이트를 위하여 인증서의 MD5 값을 불러오는 작업을 한다. 여기에서 한가지, JKS keystore를 불러오는데 있어서 jks 확장자가 아니면 읽어들이지 않으므로 개발시 사용되는 .keystore파일의 확장자를 .jks로 변경해 주어야 한다. 변경해 준 후 프로그램 상단 메뉴인 Tools -> Keystore Manager -> JKS keystore를 클릭하여 파일을 선택하면 JKS keystore manager 창이 뜨게 된다.([그림 1]에서 두번째 창) debug.keystore의 암호는 android이므로 입력하여 진행한다. 여기에서 테이블 엔트리를 선택하여 오른쪽 마우스를 클릭하면 나오는 메뉴중 view certificate chain을 선택하면 가장 상단의 창을 볼 수 있다. MD5는 물론이고 SHA1까지도 볼 수 있다.
[그림 1] MD5, SHA1 인증 지문을 확인할 수 있다
또한 이 프로그램은 애플리케이션 서명을 위해서도 사용될 수 있다. 물론 서명되지 않은채로 어플을 배포할 수 있지만 사용자가 설정을 변경해야할 불편함도 있을 뿐 아니라, 개발자 식별, 애플리케이션 무결성등을 보장하기 위하여 서명은 필수적이다. keytool -genkey -keystore key.keystore와 같이 입력한 후 나오는 질문에 잘 응답하면 개인키를 갖는 keystore를 손쉽게 생성할 수 있으며, keyTool-IUI에서도 마찬가지로 간단히 생성할 수 있다.
[그림 2, 3, 4] keystore를 생성하고, 개인키를 만들어 keystore에 보관한다.
우선 [그림 2]와같이 비어있는 keystore를 생성해준다. 그 후 [그림 3]처럼 설정해준다. 이미 기본적으로 값들이 설정되어있으며, 입력이 필요한 최소한의 조건은 common name(CN) 뿐이다. 원한다면 [그림 4]처럼 Cert. Extension - KeyUsage의 Enabled를 해제할 수도 있다.(keytool에서 기본 명령 실행시 disabled된 상태로 결과가 출력된다) 필요조건이 만족되면 가장 아래의 파란색 ok버튼이 활성화 되며 이를 클릭하면 마찬가지로 생성이 완료된다. 이후 Sign file with private key메뉴 혹은 eclipse adt에서 apk 파일을 서명할 수 있다.
글을 마치기 전에 잠시 keytool을 다시한번 살펴보니 출력결과를 상세하게 보여주는 -v 옵션이 있었다. 이를 사용하니 jre 1.7에서도 MD5 결과를 볼 수 있었다 심지어 SHA256까지 보여준다.. 아 오늘도 삽질이로구나.
댓글